- Website: https://disciplan.vercel.app/
Disciplan helps students turn overwhelming assignments into clear, day-by-day plans so they can stay consistent, focused, and on track. It combines planning, execution, and progress tracking in one place. 📚
Disciplan is an AI-powered assignment planning platform that converts large workloads into actionable study tasks with realistic daily structure.
- Break assignments into day-by-day tasks
- Generate plans with Gemini AI plus deterministic fallback logic
- Track progress across Dashboard, Timeline, and History
- Manage authenticated user sessions
- Personalize defaults for workload, difficulty, and start page
- Configure theme preference (
light,dark,system)
| Layer | Stack |
|---|---|
| Frontend | React 19, Vite, Tailwind CSS, Radix UI |
| API | Express 5 (serverless-compatible) |
| Database | Neon Postgres (pg) |
| Auth | JWT in HttpOnly cookies |
| AI | Gemini (@google/generative-ai) |
- Node.js 20+
- npm 10+
- A Postgres database (Neon or local)
npm install
cd frontend && npm installCreate backend/.env (or root .env) with:
DATABASE_URL=postgres://USER:PASSWORD@HOST:5432/DB_NAME?sslmode=require
JWT_SECRET=replace-with-a-long-random-secret-at-least-32-characters
GEMINI_API_KEY=your-gemini-api-key
GEMINI_MODEL=gemini-2.5-flash-lite
AI_BUDGET_MONTHLY_USD=20
AI_BUDGET_HARD_STOP_USD=19
AI_MAX_OUTPUT_TOKENS=600
AI_THINKING_BUDGET=0
AI_USER_DAILY_REQUEST_LIMIT=20
PORT=5000
CORS_ORIGINS=http://localhost:5173
NODE_ENV=developmentnpm run migrateBackend (root):
npm run start:backendFrontend (separate terminal):
cd frontend
npm run devRequired variables:
DATABASE_URLJWT_SECRETGEMINI_API_KEYGEMINI_MODELAI_BUDGET_MONTHLY_USDAI_BUDGET_HARD_STOP_USDAI_MAX_OUTPUT_TOKENSAI_THINKING_BUDGETAI_USER_DAILY_REQUEST_LIMITPORTCORS_ORIGINSNODE_ENV
Root:
npm run start:backend
npm run migrate
npm run check:backendFrontend:
cd frontend
npm run dev
npm run lint
npm run build
npm run previewAuth:
POST /api/registerPOST /api/loginPOST /api/logoutGET /api/me
Settings:
GET /api/settingsPATCH /api/settings
Assignments and Tasks:
GET /api/assignmentsPOST /api/assignmentsDELETE /api/assignments/:idGET /api/assignment/plan/:idGET /api/timelineGET /api/historyPATCH /api/tasks/:idPATCH /api/tasks/:id/toggleDELETE /api/tasks/:id
- Create a Neon project and copy
DATABASE_URL - Run migrations:
npm run migrate- Import repository into Vercel
- Keep project root as deployment root (
vercel.jsonis already configured) - Add production environment variables:
DATABASE_URLJWT_SECRETGEMINI_API_KEYGEMINI_MODELAI_BUDGET_MONTHLY_USDAI_BUDGET_HARD_STOP_USDAI_MAX_OUTPUT_TOKENSAI_THINKING_BUDGETAI_USER_DAILY_REQUEST_LIMITCORS_ORIGINSNODE_ENV=production
Routing behavior:
/api/*-> serverless Express handler (api/index.js)- non-API routes -> frontend
index.html(SPA deep-link support)
- Create a feature branch
- Make focused changes
- Run lint/build/check scripts
- Open a PR with clear testing notes