StudImprove is a full-stack, comprehensive study management application designed to help students elevate their learning through goal setting, pomodoro timers, curricula tracking, and detailed activity analytics.
This project is separated into a Frontend application and a Backend API.
Frontend (StudImprove)
- React (v19) + Vite: The core framework for a lightning-fast frontend.
- Tailwind CSS v4: For highly customizable, utility-first styling.
- Framer Motion: Adds beautiful, fluid animations globally.
- React Router v7: For fast, client-side routing.
- Firebase Auth (
firebasepackage): Handles secure user registration, login, and session persistence. - Context API: State management for user study data, goals, and authentication caching.
- Three.js & React Three Fiber: Used for the interactive 3D background elements.
- jsPDF & jsPDF-AutoTable: For generating downloadable PDF activity reports.
Backend (StudImprove-Server)
- Node.js & Express: The core backend framework handling API routes and middleware.
- MongoDB & Mongoose: NoSQL database for flexible data modeling and storing user objects, info, study tasks, and milestones.
- Firebase Admin SDK (
firebase-admin): Validates the ID tokens provided by the frontend and maps requests to securely authenticated Firebase users. - Cloudinary (
cloudinary,multer,multer-storage-cloudinary): Handles processing and storage for user avatar image uploads. - Nodemailer: Used for securely sending 6-digit OTPs to users for password resets over email.
- Cors & Helmet: For robust security, restricting cross-origin requests and setting basic HTTP headers.
git clone https://github.com/shell-ninja/studimprovecd studimprove
npm installnpm run dev(Application runs on http://localhost:5173)
- Authentication: Users sign up via Firebase on the frontend. A parallel API request creates a corresponding user document in MongoDB storing their specific study metrics and dashboard configurations. All backend mutations securely expect a Firebase Bearer token injection.
- Avatars: Users upload an image inside Settings. The frontend (
client.js) passes the file mapped with the Firebase Token. The Node.js API buffers the image via Multer, uploads it cleanly to Cloudinary, and saves the returned secure CDN URL to MongoDB. - Password Resets (OTP): To prevent unauthorized resets, requesting an OTP triggers Mongoose to generate and store a 6-digit code linked to an expiry timestamp. Nodemailer emails this to the user. Inputting the code verifies it against MongoDB's hash and permits forced Firebase overrides via the Admin SDK.
- Data Exporting: All tasks, focus minutes, and milestones tracked over time can be exported.
jsPDFintercepts this state entirely client-side and formats a structured table usingAutoTable.
Make sure your branch is cleanly separated from main. Write meaningful commit messages, and ensure your Node environments are correctly configured using your local .env before pushing (never push production keys or .env files!).