Syllavil is a syllabus-to-study-plan tool. Paste in a syllabus (or upload a PDF/image), and it uses Gemini to extract every graded assignment, then ranks them by a custom urgency score so you always know what to focus on next.
- Upload — Paste raw syllabus text or upload a PDF/image on the
/uploadpage. - Parse —
gemini_parser.pysends the syllabus to Gemini, which returns structured JSON: course name, and every assignment with its due date, grade weight, and type (homework/quiz/exam/project). - Score —
scoring.pyranks assignments by urgency: grade weight, days remaining, and how far your current estimated grade is from your target grade (if set), plus a per-course priority boost. - Dashboard —
/dashboardshows assignments sorted by priority score, with a one-click "mark as done" per item.
- Backend: Flask, Flask-SQLAlchemy (SQLite), Flask-WTF
- AI: Google Gemini API (
gemini-3-flash-preview) for syllabus parsing - Calendar: Google Calendar API via OAuth (
google-auth-oauthlib) - Frontend: Jinja2 templates, Bootstrap 5
pip install -r requirements.txtYou'll need:
- A
.envfile withGEMINI_API_KEY=your_key_here - A
credentials.jsonfrom Google Cloud Console (OAuth client for the Calendar API) in the project root
Then run:
python app.py- Course — name, professor, syllabus text, a per-course priority boost
- Assignment — belongs to a course; title, due date, grade weight, type, completion status, and the linked Google Calendar event ID once exported
- Goal — optional target grade / current estimated grade per course, used to weight priority scoring
The core upload → parse → score → dashboard flow works end-to-end. Two features are scaffolded but not working yet:
- AI study tutor chat — A chat widget backed by Gemini function-calling (can answer questions about your courses and, in theory, schedule study sessions on your calendar). Currently broken/incomplete.
- Google Calendar export — One-click push of assignments to Google Calendar as events with reminders. OAuth flow and event creation are written but not fully working yet.
- Get the chatbot fully working end-to-end
- Get calendar export fully working end-to-end
- Clean up error handling around syllabus parsing (malformed Gemini responses)