The open-source learning platform powered by AI.
Create courses, quizzes, flashcards, and study notes in minutes.
Live Demo · Report Bug · Contribute
- AI Course Generator — Generate full course structures with Gemini in seconds
- AI Quiz Generator — Auto-generate multiple-choice and short-answer questions
- AI Flashcards — Leitner-system spaced repetition cards for retention
- AI Study Notes — Summaries, key points, and term definitions
- AI Study Buddy — Context-aware chatbot for each course
- Course Forking — Customize public courses like GitHub repos
- Community Marketplace — Browse, filter, and upvote shared courses
- Export Options — PDF, Markdown, SCORM/xAPI packages
- Dark Mode — Full dark mode with system preference detection
- Mobile First — Responsive design across all devices
- Server Actions — Secure, authenticated database mutations
- Image Uploads — Cloudinary-powered course banner uploads
- Real-time Updates — Instant UI updates after mutations
- Type Safety — ESLint + Next.js type checking
| Category | Technology |
|---|---|
| Framework | Next.js 15 (App Router) |
| UI | React 18, Tailwind CSS, shadcn/ui |
| Auth | Clerk |
| AI | Google Gemini 2.0 Flash |
| Database | Neon PostgreSQL + Drizzle ORM |
| Storage | Cloudinary (unsigned uploads) |
| Deployment | Vercel |
- Node.js 18+ (recommended: 20+)
- npm, yarn, or pnpm
- Accounts for: Clerk, Google AI Studio, Neon, Cloudinary
# 1. Clone the repository
git clone https://github.com/omkarspace/coursei.ai.git
cd coursei.ai
# 2. Install dependencies
npm install
# 3. Set up environment variables
cp .env.example .env
# Fill in your API keys (see Environment Variables below)
# 4. Push database schema
npm run db:push
# 5. Start development server
npm run dev| Variable | Required | Description |
|---|---|---|
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY |
Yes | Clerk publishable key |
CLERK_SECRET_KEY |
Yes | Clerk secret key |
NEXT_PUBLIC_GEMINI_API_KEY |
Yes | Google Gemini API key |
DATABASE_URL |
Yes | Neon PostgreSQL connection string |
NEXT_PUBLIC_HOST_NAME |
Yes | App URL (e.g., http://localhost:3000) |
NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME |
Yes | Cloudinary cloud name |
NEXT_PUBLIC_CLOUDINARY_UPLOAD_PRESET |
Yes | Cloudinary unsigned upload preset |
NEXT_PUBLIC_YOUTUBE_API_KEY |
No | YouTube API key (for video search) |
coursei.ai/
├── app/
│ ├── _components/ # Shared UI components
│ │ ├── Navbar.jsx # Sticky navigation
│ │ ├── Hero.jsx # Landing page hero
│ │ ├── Features.jsx # Feature cards
│ │ ├── Pricing.jsx # Pricing plans
│ │ ├── FAQ.jsx # Accordion FAQ
│ │ ├── QuizGenerator.jsx # AI quiz UI
│ │ ├── Flashcards.jsx # 3D flip flashcards
│ │ ├── StudyNotes.jsx # AI study notes
│ │ └── ThemeToggle.jsx # Dark mode toggle
│ ├── actions/ # Server Actions (DB mutations)
│ ├── create-course/ # Course creation wizard
│ ├── course/ # Public course viewing
│ ├── dashboard/ # User dashboard
│ └── sign-in/ # Auth pages
├── configs/
│ ├── schema.jsx # Drizzle DB schema (5 tables)
│ ├── AiModel.jsx # Gemini AI chat sessions
│ └── cloudinary.js # Cloudinary config
├── lib/ # Utility functions
├── components/ui/ # shadcn/ui components
└── public/ # Static assets
| Table | Description |
|---|---|
CourseList |
Course metadata, banners, ownership |
Chapters |
Chapter content per course |
Quizzes |
Generated quiz questions |
Flashcards |
Generated flashcard decks |
StudyNotes |
Generated study notes |
| Command | Description |
|---|---|
npm run dev |
Start development server |
npm run build |
Build for production |
npm run start |
Start production server |
npm run lint |
Run ESLint |
npm run db:push |
Push database schema |
npm run db:studio |
Open Drizzle Studio |
We welcome contributions! Please read our Contributing Guide for details on:
- Setting up the development environment
- Branch naming conventions
- Pull request process
- Code style guidelines
This project is licensed under the MIT License — see the LICENSE file for details.
Built with ❤️ by Omkar
