A comprehensive study planning and course management platform with hierarchical roadmaps, assessments, and scheduling tools.
Features β’ Quick Start β’ Documentation β’ Tech Stack
Next Learn is a full-stack educational web platform that helps students and educators organize study materials, create learning roadmaps, and manage assessments and routines β all within an authenticated, user-friendly system.
- Structured Content: Subjects β Roadmaps β Chapters with rich text editing
- Assessment System: Exams with automated grading and history tracking
- Scheduling Tools: Study routines, event calendars, and dashboards
- Authentication: Secure JWT-based login with Google OAuth integration
- Create and organize subjects with titles, codes, and metadata
- Build course roadmaps using the TipTap rich text editor
- Nest chapters inside roadmaps for detailed learning paths
- Write personal notes and attach external resources
- Create and edit exams with multiple question types
- Support for timed exams and auto-submission
- Instant grading and score tracking
- Historical results and analytics dashboard
- Custom study routines and recurring events
- Interactive calendar with color-coded deadlines
- Centralized dashboard for quick overviews
- NextAuth.js with credentials and Google OAuth providers
- Configurable session expiry (24h or 30 days)
- JWT tokens with secure cookie handling
- Middleware-based route protection
- Node.js β₯ 18.x
- MongoDB (Local or Atlas)
- npm, yarn, pnpm, or bun
# Clone the repository
git clone https://github.com/ByteCrister/next-learn.git
cd next-learn
# Install dependencies
npm installCreate a .env.local file in the root:
# Database
MONGODB_URI=mongodb://localhost:27017/next-learn
# or MongoDB Atlas:
# MONGODB_URI=mongodb+srv://username:password@cluster.mongodb.net/next-learn
# Authentication
NEXTAUTH_SECRET=your-secret-key-here
NEXTAUTH_URL=http://localhost:3000
# Google OAuth
GOOGLE_CLIENT_ID=your-google-client-id
GOOGLE_CLIENT_SECRET=your-google-client-secretThis is a Next.js project bootstrapped with [create-next-app](https://nextjs.org/docs/app/api-reference/c
First, run the development server:
npm run devThen open: http://localhost:3000
npm run build
npm start| Technology | Version | Purpose |
|---|---|---|
| Next.js | 15.4.5 | App Router + SSR |
| React | 19.1.0 | UI library |
| TypeScript | 5.x | Type safety |
| Tailwind CSS | 4.x | Styling |
| TipTap | 3.0.9 | Rich text editing |
| Zustand | 5.0.7 | State management |
| Radix UI | Latest | Accessible UI primitives |
| Material-UI | 7.2.0 | UI components |
| Framer Motion | 12.23.12 | Animations |
| Technology | Version | Purpose |
|---|---|---|
| Next.js API Routes | 15.4.5 | Backend API |
| MongoDB | 8.17.0 | Database |
| Mongoose | 8.17.0 | ODM |
| NextAuth.js | 4.24.11 | Authentication |
| bcryptjs | 3.0.2 | Password hashing |
| jsonwebtoken | 9.0.2 | JWT handling |
- Validation: Zod, Yup
- Forms: React Hook Form, Formik
- HTTP: Axios
- Calendar: react-big-calendar
- Notifications: react-toastify
- DnD: @dnd-kit
next-learn/
βββ src/
β βββ app/
β β βββ layout.tsx
β β βββ page.tsx
β β βββ dashboard/
β β βββ subjects/
β β βββ exams/
β β βββ routines/
β β βββ api/
β β βββ auth/
β β βββ subjects/
β β βββ roadmaps/
β β βββ exams/
β β βββ results/
β β βββ dashboard/
β βββ components/
β β βββ ui/
β β βββ subjects/
β β βββ Editor/
β β βββ providers/
β βββ models/
β β βββ User.ts
β β βββ Subject.ts
β β βββ CourseRoadmap.ts
β β βββ Exam.ts
β β βββ ExamResult.ts
β βββ store/
β β βββ useDashboardStore.ts
β β βββ useSubjectsStore.ts
β β βββ useEventsStore.ts
β βββ utils/
β β βββ auth/
β β βββ api/
β β βββ helpers/
β βββ config/
β βββ ConnectDB.ts
βββ public/
βββ package.json
βββ tailwind.config.js
βββ tsconfig.json
βββ .env.local
| Model | Purpose |
|---|---|
| User | Authentication and profile data |
| Subject | Top-level educational categories |
| CourseRoadmap | Structured course paths |
| Exam | Assessment definitions |
| ExamResult | Scores and submissions |
| Event | Calendar events and reminders |
-
Credentials Provider: Email/password via bcrypt
-
Google OAuth: Secure sign-in via NextAuth
-
Session Lifetimes:
- Default: 24 hours
- With βRemember Meβ: 30 days
useDashboardStore: Profile & content statsuseSubjectsStore: Subject/roadmap datauseEventsStore: Calendar events
POST /api/auth/signinβ LoginPOST /api/auth/signoutβ LogoutGET /api/auth/sessionβ Session info
GET /api/subjectsβ List subjectsPOST /api/subjectsβ CreatePUT /api/subjects/:idβ UpdateDELETE /api/subjects/:idβ Delete
GET /api/roadmapsβ RetrievePOST /api/roadmapsβ CreatePUT /api/roadmaps/:idβ UpdateDELETE /api/roadmaps/:idβ Delete
GET /api/examsβ ListPOST /api/examsβ CreatePOST /api/exams/joinβ ParticipateGET /api/resultsβ View results
GET /api/view/subjectβ Public subject viewGET /api/view/notesβ Shared notes view
- Framework: Tailwind CSS
- Fonts: Inter (primary), Sora (secondary)
- Theme: Dark/light with custom palette
- Enhancements: Typography plugin, smooth animations
- JWT-based authentication
- Bcrypt password hashing
- Route-level access control
- User data isolation per session
- CSRF and HTTPS enforced
- Secrets stored in
.env.local
- Push to GitHub
- Import into Vercel
- Set environment variables
- Deploy automatically
npm run build
npm startRequirements:
- Node.js β₯ 18
- MongoDB connection string
- Configured environment variables
npm run dev # Development (Turbopack)
npm run build # Production build
npm start # Start production server
npm run lint # Lint codebaseThis is a private project, but internal contributors can:
- Fork the repository
- Create a branch (
git checkout -b feature/AmazingFeature) - Commit (
git commit -m 'Add AmazingFeature') - Push (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is private and proprietary. All rights reserved Β© ByteCrister.
- Real-time collaboration
- Mobile application
- Roadmap export feature
- Advanced analytics dashboard
- Notification & alert system
For inquiries or bug reports:
- Open a GitHub issue
- Contact the development team directly
- Built with Next.js
- UI from Radix UI and Material-UI
- Rich text editing via TipTap
- Authentication powered by NextAuth.js