Syllabus → topics → week-by-week study plan + curated videos. A Flask app built by a 4-person team; I owned the backend.
Team: Tushar (backend) · Manipal (backend) · Poras (frontend) · Swayam (frontend)
- Upload a syllabus (PDF or TXT).
- Extract topics (
syllabus_processor.py— heading/regex parsing). - Schedule topics across weeks (
scheduler.py— deadline-aware spreading). - Recommend YouTube videos per topic (
video_recommender.py). - Render dashboard + result pages.
upload → pdfplumber (fallback: PyPDF2) → extract_topics() → session
→ dashboard.html (topics + video links)
→ result.html (generated schedule)
app.py # Flask app (all routes)
syllabus_processor.py # topic extraction
scheduler.py # schedule generation
video_recommender.py # video suggestions
index.html upload.HTML # ┐
dashboard.html result.html│ ├ must live in templates/ (see step 1)
style.css # ┘ must live in static/
README.md
extras: project video (mp4), report (pdf), slides (pptx)
Important: Flask only serves templates from
templates/. The HTML files currently sit at the repo root — reorganize once after cloning (nothing is deleted, just moved into place):
git clone https://github.com/Tusharkapoor-oop/tushar_cse-AI-and-ML-A_AI-STUDY-PLANNER.git
cd tushar_cse-AI-and-ML-A_AI-STUDY-PLANNER
# one-time: put templates/static where Flask expects them
mkdir -p templates static
mv index.html dashboard.html result.html templates/
mv upload.HTML templates/upload.html # note: lowercase .html for Linux
mv style.css static/
# dependencies
pip install flask pdfplumber PyPDF2 werkzeug flask_sqlalchemy flask_login
# run
python app.py
# → http://127.0.0.1:5000Test with any text/PDF syllabus — the app deletes your upload immediately after parsing.
- Encoding-agnostic text reads: TXT uploads are tried as UTF-8 → Latin-1 → UTF-16.
- PDF fallback chain:
pdfplumberfirst (tables + layout),PyPDF2if that yields nothing. - Session-scoped state: topics live in the Flask session — no database required for the core flow.
- Upload hygiene:
secure_filename+ extension allow-list + immediateos.removeafter parse. - Limit: 16 MB upload cap (
MAX_CONTENT_LENGTH).
- Topic extraction is rule-based (regex/heading heuristics), not an LLM — precision varies with syllabus formatting.
app.run(debug=True)is the documented dev mode; put a real WSGI server in front for anything shared.- No automated tests yet — planned: pytest fixtures around
extract_topics()with 3 sample syllabi. - The walkthrough video (16.7 MB
project video final (2) (1) (1).mp4) will move to a GitHub Release to keep the clone small.
Project walkthrough (Google Drive)
No license file yet — MIT intended (to be added by the repository owner).