A premium, full-stack study management app built for serious students. Track subjects, monitor syllabus completions, log focused study sessions with a built-in Pomodoro timer, and get visual warnings about approaching exam deadlines — all in one beautifully designed dashboard.
| Service | URL |
|---|---|
| Frontend | https://studytracker.vercel.app |
| Backend | https://studytracker-api.onrender.com |
- Subjects & Topics Management — Create subjects with icons, colors, and exam dates. Organize topics within each subject and track completion status.
- Study Session Logging — Log study sessions manually or directly via the timer. View your history and daily study analytics.
- Pomodoro Timer — Built-in focus timer with customizable work/break intervals and audio notifications.
- Exam Countdown — Automatic countdown timers and behind-schedule warnings based on your syllabus completion vs. exam date.
- Overall Progress Overview — Unified progress stats across all subjects.
- Pie Chart Breakdown — Topic completion status (Not Started / In Progress / Completed).
- Study Hours Bar Chart — Rolling 7-day bar graph of daily study minutes using Recharts.
- Urgent Alerts — Subjects that are behind schedule are surfaced prominently.
- Glassmorphism Design — Frosted glass sidebar and sticky navbar with backdrop blur.
- Premium Dark Mode — Deep
#0B0F19Midnight Slate palette with full dark/light toggle. - Framer Motion Animations — Elegant page-load transitions and interactive micro-animations.
- Loading Skeletons — Context-aware loading placeholders instead of spinners (dark/light mode aware).
- Drag & Drop Subjects — Reorder subject cards with smooth drag-and-drop via
@dnd-kit. - Mobile Bottom Navigation — Responsive native-app-style bottom nav bar for mobile screens.
- Custom Toast Notifications — Branded success/error messages via
react-hot-toastthat adapt to dark mode.
- JWT Authentication — Secure registration & login with token-based sessions.
- Avatar Upload — Crop your profile photo with
react-image-cropbefore uploading securely to Cloudinary via the backend. - Dark Mode Preference — Persisted across sessions in the database.
- API Rate Limiting —
express-rate-limitapplied globally to all/apiroutes. - Express Validator — Input sanitization and validation on all write operations.
- Centralized Auth Middleware — Protected routes enforced server-side.
- Environment Variables Only — Zero hardcoded credentials across the entire codebase.
Frontend
| Library | Purpose |
|---|---|
| React + Vite | Core UI framework |
| Tailwind CSS v3 | Styling & design system |
| React Router DOM v6 | Client-side routing |
| Axios | HTTP client with interceptors |
| Framer Motion | Animations & transitions |
| @dnd-kit | Drag and drop |
| Recharts | Data visualization |
| react-hot-toast | Notifications |
| react-image-crop | Avatar cropping |
| react-loading-skeleton | Loading states |
Backend
| Library | Purpose |
|---|---|
| Node.js + Express | API server |
| MongoDB + Mongoose | Database & ORM |
| JSON Web Tokens | Authentication |
| Cloudinary + Multer | Media storage |
| express-rate-limit | API protection |
| express-validator | Input validation |
| bcryptjs | Password hashing |
- Node.js
v18+ - A MongoDB Atlas account (free tier works)
- A Cloudinary account (free tier works)
git clone https://github.com/your-username/StudyTracker.git
cd StudyTrackercd backend
npm install
cp .env.example .env
# Fill in your values in .env
npm run devcd ../frontend
npm install
cp .env.example .env
# Set VITE_API_URL=http://localhost:5000
npm run devOpen http://localhost:5173 in your browser.
This project uses a decoupled deployment strategy:
- Create a new Web Service on Render
- Set Root Directory →
backend - Build Command:
npm install - Start Command:
node server.js - Add all environment variables from
backend/.env.example - Set
CLIENT_URL→ your Vercel frontend URL
- Import the repo on Vercel
- Set Root Directory →
frontend - Framework auto-detected as Vite
- Add environment variable
VITE_API_URL→ your Render backend URL
StudyTracker/
├── backend/
│ ├── src/
│ │ ├── config/ # DB & Cloudinary config
│ │ ├── controllers/ # Route handler logic
│ │ ├── middleware/ # Auth, error handling, rate limit
│ │ ├── models/ # Mongoose schemas
│ │ └── routes/ # Express route definitions
│ ├── server.js
│ └── .env.example
├── frontend/
│ ├── src/
│ │ ├── components/ # Reusable UI components
│ │ ├── context/ # AuthContext
│ │ ├── pages/ # Full page views
│ │ ├── services/ # API service functions
│ │ └── utils/ # Constants & helpers
│ └── .env.example
├── plans.md # Implementation notes
└── README.md
Refer to backend/.env.example and frontend/.env.example for a complete list of required variables with descriptions and security notes.
Built with ❤️ for serious students.