A minimalistic yet impressive web-based scheduling management system designed for high school exhibitions. The application allows administrators to manage class timetables in real-time while teachers can view their personalized schedules with instant update notifications.
- Complete Schedule Management: Create, edit, and delete teacher schedules across 5 working days (Monday-Friday) and 8 periods per day
- Teacher Account Management: Add and manage teacher accounts with secure authentication
- Break Period Configuration: Toggle break periods between Period 3 and Period 4 (simulating half-yearly changes)
- Conflict Detection: Automatically prevent double-booking and scheduling conflicts
- Real-time Update Tracking: All schedule changes are logged with timestamps and admin attribution
- Personalized Timetable View: Clean, organized display of weekly schedule
- Change Notifications: Orange-highlighted cells indicate schedule modifications within the last 24 hours
- Change Log Panel: View detailed history of recent schedule updates
- Manual Refresh: Refresh button to check for latest updates (simulates real-time in exhibition demo)
- Dark Mode Support: Toggle between light and dark themes
- Exhibition Mode Toggle: Special badge display for demonstration purposes
- QR Code Quick Login: Mock QR-based authentication demo (shows concept for production)
- Clean, Professional UI: Minimalistic design with smooth animations and transitions
- Responsive Layout: Works seamlessly on desktop and mobile devices
Frontend:
- React 19.x - Modern UI framework
- React Router - Client-side routing
- Tailwind CSS - Utility-first styling
- Shadcn/UI - Pre-built component library
- Axios - HTTP client
Backend:
- FastAPI - High-performance Python web framework
- SQLAlchemy - SQL toolkit and ORM
- PyJWT - JWT token authentication
- Passlib - Password hashing
- Pydantic - Data validation
Database:
- SQLite - Lightweight SQL database
βββββββββββββββ βββββββββββββββ βββββββββββββββ
β React β HTTP β FastAPI β Async β SQLite β
β Frontend βββββββββ>β Backend βββββββββ>β Database β
β (Port 4040) β <βββββββ€ (Port 8080) β <βββββββ€ (File-based) β
βββββββββββββββ JSON βββββββββββββββ SQLAlchemy βββββββββββββββ
β
β JWT Authentication
β State Management
β Routing
v
βββββββββββββββββββββββββββββββββββββββ
β User Roles: β
β - Admin: Full CRUD operations β
β - Teacher: Read-only schedule view β
βββββββββββββββββββββββββββββββββββββββ
- Node.js 16+ and npm/bun
- Python 3.11+
- Navigate to backend directory:
cd backend- Install Python dependencies:
pip install -r requirements.txt- Configure environment variables:
The
.envfile should contain:
DATABASE_URL="sqlite+aiosqlite:///school_schedule.db"
CORS_ORIGINS="*"
JWT_SECRET_KEY="school-schedule-secret-key-2025"
- Start the backend server:
uvicorn server:app --host 127.0.0.1 --port 8080The backend will be available at http://127.0.0.1:8080
API documentation: http://127.0.0.1:8080/docs
- Navigate to frontend directory:
cd frontend- Install dependencies:
npm install
# or if you prefer bun:
bun install- Start the frontend development server:
npm start
# or:
bun startThe application will open at http://localhost:4040
Run these commands in separate terminal windows:
Terminal 1 - Backend:
cd backend
pip install -r requirements.txt
uvicorn server:app --host 127.0.0.1 --port 8080Terminal 2 - Frontend:
cd frontend
bun install
bun start- Check Backend: Visit
http://127.0.0.1:8080/docs - Check Frontend: Visit
http://localhost:4040
Username: admin123
Password: password123
Teacher 1: t_sagnik / pass123 (Sagnik Sir)
Teacher 2: t_nadeem / pass123 (Nadeem Sir)
Teacher 3: t_prinshu / pass123 (Prinshu Sir)
Teacher 4: t_abhishek / pass123 (Abhishek Sir)
Toggle exhibition mode from the homepage to showcase the system with:
- Floating badge indicating demo mode
- QR code login demonstration
- Optimized for presentation on large screens
- Login with admin credentials
- Navigate to "Schedules" tab
- Select a teacher from dropdown
- Click empty cells to add schedule entries
- Click existing entries to edit or delete
- Switch to "Teachers" tab to manage accounts
- Adjust break period in "Settings" tab
- Login with teacher credentials
- View personalized timetable automatically
- Orange highlights show recent changes
- Check change log panel for details
- Use refresh button to get latest updates
- Show homepage with Exhibition Mode toggle
- Login as admin, add a schedule entry
- In another window, login as teacher
- Refresh teacher view to show the change
- Demonstrate orange highlight and change log
- Show break period configuration
- Display QR code demo modal
- Can be positioned after Period 3 or Period 4
- Admin can toggle this in Settings tab
- Simulates half-yearly schedule adjustments
- Automatically displayed in timetable grid
- Every schedule edit creates a changelog entry
- Teachers see orange highlights for 24 hours
- Detailed change log shows old vs new values
- Tracks which admin made the change
- Prevents double-booking of classrooms
- Checks if class already has a lesson at that time
- Shows clear error message when conflict detected
- JWT Authentication with 7-day token expiration
- Bcrypt password hashing
- Role-based access control
- Protected API endpoints
- CORS configuration
Minimalistic & Professional:
- Clean light theme with soft gradients
- Academic color palette (blue, gray, orange)
- Space Grotesk for headings, Inter for body text
- Glass-morphism effects for depth
- Smooth transitions and animations
Backend won't start:
- Verify port 8080 is available
- Check SQLite database file path in
.envfile - Ensure all Python dependencies are installed
Database connection issues:
- Check if the SQLite database file exists in the backend directory
- Verify DATABASE_URL in
.envfile is correct - Restart the backend server
Frontend won't connect:
- Ensure backend is running on port 8080
- Check browser console for CORS errors
- Verify backend API endpoints are accessible
- Check frontend
.envfile has correctREACT_APP_BACKEND_URL=http://127.0.0.1:8080 - Restart frontend after changing
.envfile
Login fails:
- Check backend logs for initialization messages
- Ensure demo users were created during startup
- Try restarting the backend server
Port conflicts:
- Backend uses port 8080
- Frontend uses port 4040
Port already in use error:
- Kill existing uvicorn processes:
pkill -f uvicorn - Or find and kill specific process:
ps aux | grep uvicornthenkill [PID] - Check if port is free:
ss -tlnp | grep 8080
POST /api/auth/login- Login and get JWT tokenGET /api/auth/verify- Verify token
GET /api/users- List all usersPOST /api/users- Create new userDELETE /api/users/{user_id}- Delete user
GET /api/schedules- Get schedulesPOST /api/schedules- Create schedule (Admin)PUT /api/schedules/{schedule_id}- Update schedule (Admin)DELETE /api/schedules/{schedule_id}- Delete schedule (Admin)
GET /api/settings/break-period- Get break configPUT /api/settings/break-period- Update break position (Admin)
GET /api/changelogs- Get change history
Created by Yuvraj, Supriyo & Naman
This project showcases modern full-stack web development, user experience design, and practical problem-solving for educational institutions.
Status: Exhibition Demo Ready