A full-stack web application that helps students optimize their study time by generating personalized, priority-based daily study schedules.
- Smart Course Management: Add courses with exam dates, difficulty ratings, and confidence levels
- Assignment Tracking: Track quizzes, homework, and projects with due dates
- Calendar View: Visual month-by-month calendar showing all assignments and exams
- Intelligent Scheduling Algorithm: Prioritizes study time based on:
- Course difficulty (1-5 scale)
- Your confidence level (1-5 scale)
- Days until exam deadline
- Visual Schedule: Day-by-day study plan with color-coded time blocks
- Responsive Design: Works seamlessly on desktop and mobile devices
- Demo Data: Quick demo mode for testing and presentations
- Backend: Python 3 with Flask framework
- Frontend: Vanilla HTML, CSS, and JavaScript (no frameworks)
- Database: SQLite (persistent storage)
- Styling: Modern CSS with Inter font, navy/blue color scheme
-
Clone or download this project
-
Create a virtual environment:
python3 -m venv venv
-
Activate the virtual environment:
- On macOS/Linux:
source venv/bin/activate - On Windows:
venv\Scripts\activate
- On macOS/Linux:
-
Install dependencies:
pip install -r requirements.txt
-
Start the Flask server:
python app.py
-
Open your browser and navigate to:
http://localhost:5000 -
Get started:
- Click "Get Started" on the landing page
- Navigate through the three tabs: Courses & Assignments, Calendar, and Schedule
- Add your courses or click "Load Demo Data" for a quick demo
- Add assignments to each course (quizzes, homework, projects)
- View all assignments in the calendar view
- Set your available study hours per day in the Schedule tab
- Click "Generate Schedule" to see your optimized study plan
StudyPlanner/
├── app.py # Flask backend with API routes and scheduling algorithm
├── requirements.txt # Python dependencies (Flask)
├── studysync.db # SQLite database (auto-created on first run)
├── static/
│ ├── css/
│ │ └── style.css # All styling with responsive design
│ └── js/
│ └── app.js # Frontend logic and API communication
├── templates/
│ ├── index.html # Landing page
│ └── planner.html # Main planner interface
└── tests/
├── conftest.py # Test configuration and fixtures
├── test_assignments.py
└── test_schedule.py
The scheduling algorithm uses a priority-based approach:
priority = difficulty × (6 - confidence) / days_until_exam
- Higher difficulty → More study time needed
- Lower confidence → More study time needed
- Closer deadline → Higher urgency
- For each day from today until the earliest exam:
- Calculate priority scores for all active courses
- Normalize priorities into percentages
- Allocate available hours proportionally
- Round to 0.5-hour blocks (minimum 0.5 hours per course)
For a student with 4 hours available per day and these courses:
| Course | Difficulty | Confidence | Days Until | Priority Score | Allocated Time |
|---|---|---|---|---|---|
| Math | 5 | 2 | 7 | 2.86 | 2.0 hours |
| Physics | 4 | 4 | 3 | 2.67 | 2.0 hours |
| History | 2 | 5 | 14 | 0.14 | 0.5 hours (min) |
GET /- Landing pageGET /planner- Main planner interface with tabs
GET /api/courses- Get all coursesPOST /api/add-course- Add a new courseDELETE /api/courses/<id>- Delete a coursePOST /api/load-demo- Load demo data
GET /api/assignments- Get all assignmentsPOST /api/assignments- Add a new assignmentPUT /api/assignments/<id>- Toggle assignment completion statusDELETE /api/assignments/<id>- Delete an assignment
POST /api/generate-schedule- Generate optimized schedule
The "Load Demo Data" button populates the app with 4 sample courses:
- Calculus Exam - High difficulty (5), Low confidence (2), 10 days away
- Physics Final - Medium-high difficulty (4), Medium confidence (3), 7 days away
- History Essay - Low difficulty (2), High confidence (4), 14 days away
- Programming Project - High difficulty (5), Medium-high confidence (4), 5 days away
This demonstrates how the algorithm prioritizes urgent, difficult courses while still allocating time to all subjects.
- Color Palette: Navy (#1a1a2e), Accent Blue (#4361ee), Success Green (#06ffa5)
- Typography: Inter font family from Google Fonts
- UI Components:
- Card-based layout with smooth transitions and hover effects
- Tabbed navigation for Courses, Calendar, and Schedule views
- Interactive calendar with assignment chips
- Color-coded course assignments
- Responsive: Mobile-first design with breakpoints at 768px and 1024px
The code includes:
- Database schema with courses and assignments tables
- RESTful API endpoints for CRUD operations
- Priority-based scheduling algorithm (step-by-step comments)
- Frontend state management and event handlers
- Comprehensive test suite using pytest
This makes it easy to understand the implementation and extend functionality.
Potential features for future development:
- User authentication and persistent user accounts
- Study session tracking and analytics
- Calendar integration (Google Calendar, iCal)
- Study technique recommendations
- Mobile app version
- Export schedule to PDF
This project is created for educational purposes.
Built with ❤️ for students who want to study smarter, not harder.