A modern, full-stack task management application designed for students to organize assignments, projects, and deadlines efficiently. Built with React, Express, MongoDB, and Firebase Authentication.
- π Secure Authentication: Firebase-based user authentication with email/password
- β Task Management: Create, read, update, and delete tasks with ease
- π¨ Priority Levels: Organize tasks by Low, Medium, or High priority
- π Due Dates: Set and track task deadlines
- π Advanced Filtering: Filter tasks by status, priority, and completion
- π± Responsive Design: Works seamlessly on desktop, tablet, and mobile devices
- π Modern UI: Clean, intuitive interface built with Tailwind CSS
- π€ User Isolation: Each user sees only their own tasks (secure multi-tenancy)
- β‘ Real-time Updates: Fast and responsive user experience
- π Protected Routes: Secure API endpoints with Firebase token verification
- React 19 - UI library
- Vite - Build tool and dev server
- React Router - Client-side routing
- Tailwind CSS - Utility-first styling
- Axios - HTTP client
- Firebase - Authentication
- Node.js - Runtime environment
- Express - Web framework
- MongoDB - Database
- Mongoose - ODM for MongoDB
- Firebase Admin SDK - Token verification
- Joi - Data validation
- CORS - Cross-origin resource sharing
Student-Task-Planner/
βββ src/ # Frontend source code
β βββ components/ # React components
β β βββ AddTaskForm.jsx
β β βββ EditTaskForm.jsx
β β βββ TaskCard.jsx
β β βββ TaskList.jsx
β β βββ FilterBar.jsx
β β βββ Header.jsx
β β βββ Modal.jsx
β β βββ ProtectedRoute.jsx
β βββ pages/ # Page components
β β βββ Dashboard.jsx
β β βββ Login.jsx
β β βββ Signup.jsx
β βββ contexts/ # React contexts
β β βββ AuthContext.jsx
β βββ hooks/ # Custom hooks
β β βββ useAuth.js
β β βββ useTasks.js
β βββ services/ # API services
β β βββ api.js
β βββ config/ # Configuration
β β βββ firebase.js
β βββ App.jsx # Main App component
β βββ main.jsx # Entry point
β
βββ server/ # Backend source code
β βββ controllers/ # Route controllers
β β βββ taskController.js
β βββ models/ # Mongoose models
β β βββ Task.js
β βββ routes/ # API routes
β β βββ taskRoutes.js
β βββ middleware/ # Custom middleware
β β βββ auth.js # Firebase token verification
β β βββ errorHandler.js
β βββ config/ # Server configuration
β β βββ database.js
β βββ utils/ # Utility functions
β β βββ validators.js
β β βββ query.js
β βββ app.js # Express app setup
β βββ server.js # Server entry point
β
βββ public/ # Static assets
βββ .env.example # Frontend env template
βββ vercel.json # Vercel config
βββ render.yaml # Render config
βββ README.md # This file
- Node.js >= 18.0.0
- npm or yarn
- MongoDB Atlas account (or local MongoDB)
- Firebase project
git clone https://github.com/yourusername/student-task-planner.git
cd student-task-planner- Go to Firebase Console
- Create a new project
- Enable Authentication β Email/Password sign-in method
- Go to Project Settings β General β Get your config values
- Go to Project Settings β Service Accounts β Generate new private key
- Create account at MongoDB Atlas
- Create a cluster
- Create a database user
- Whitelist your IP address (or use 0.0.0.0/0 for all IPs)
- Get your connection string
# Copy environment template
cp .env.example .env
# Edit .env with your values
VITE_API_URL=http://localhost:5000/api
VITE_FIREBASE_API_KEY=your-api-key
VITE_FIREBASE_AUTH_DOMAIN=your-project.firebaseapp.com
VITE_FIREBASE_PROJECT_ID=your-project-id
VITE_FIREBASE_STORAGE_BUCKET=your-project.appspot.com
VITE_FIREBASE_MESSAGING_SENDER_ID=your-sender-id
VITE_FIREBASE_APP_ID=your-app-idcd server
cp .env.example .env
# Edit .env with your values
MONGODB_URI=your-mongodb-connection-string
PORT=5000
NODE_ENV=development
CLIENT_URL=http://localhost:5173
FIREBASE_PROJECT_ID=your-project-id
FIREBASE_CLIENT_EMAIL=firebase-adminsdk-xxxxx@your-project.iam.gserviceaccount.com
FIREBASE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\nYour-Key-Here\n-----END PRIVATE KEY-----\n"# Install frontend dependencies (from root)
npm install
# Install backend dependencies
cd server
npm install
cd ..Terminal 1 - Backend:
cd server
node server.jsTerminal 2 - Frontend:
npm run devThe app will be available at:
- Frontend: http://localhost:5173
- Backend: http://localhost:5000
- Firebase Authentication: Industry-standard authentication
- Token Verification: Every API request verified via Firebase Admin SDK
- User Isolation: Tasks strictly scoped to authenticated user
- Protected Routes: Frontend and backend route protection
- Environment Variables: Sensitive data never committed to repository
- Input Validation: Server-side validation with Joi
- Error Handling: Secure error messages without exposing internals
All task endpoints require Authorization: Bearer <firebase-token> header.
GET /api/tasks- Get all user's tasks (supports filtering)GET /api/tasks/:id- Get specific taskPOST /api/tasks- Create new taskPUT /api/tasks/:id- Update taskDELETE /api/tasks/:id- Delete task
Query Parameters for GET /api/tasks:
status- Filter by completion status (completed/pending)priority- Filter by priority (low/medium/high)sortBy- Sort field (dueDate/priority/createdAt)order- Sort order (asc/desc)
- AddTaskForm - Create new tasks
- EditTaskForm - Modify existing tasks
- TaskCard - Display individual task
- TaskList - Display task collection
- FilterBar - Filter and sort tasks
- Header - Navigation and user menu
- Modal - Reusable modal component
- ProtectedRoute - Route authentication guard
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the project
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.