All projects

Study PlannerIn progress

Fits study sessions around your timetable and deadlines

Study Planner

A study planner for university students. You give it your timetable and deadlines, and it books study sessions into your free time: when to start each assignment, how to spread revision before an exam, and what to do in each session. When you miss a session, it moves the work somewhere else without reshuffling the rest of your week.

A week in the planner: classes, a work shift, and study sessions placed around them

How the planning works

The scheduler is a pure, deterministic Python package, kept separate from the web app and the database. It plans in two stages.

  1. Allocation. It works out how many minutes each task needs on each day. Exams get distributed practice that ramps up over the weeks before them. Assignments start early, with the lead time scaled to the effort. Homework is spread over the few days before it's due. An earliest-deadline-first check across the whole term catches problems early, such as "needs 9 h before Friday, only 5 h free", instead of quietly overbooking you.
  2. Placement. An OR-Tools CP-SAT model places sessions in 15-minute slots. Hard constraints cover classes, travel buffers, sleep, availability, daily caps, breaks and due times. Soft goals reward interleaving courses and keeping sessions where they already were, so replanning after one missed session only changes a few blocks. The planner highlights every block it changed.

The solver runs single-threaded with a fixed seed and a deterministic time budget, so the same inputs always give the same plan. Property tests on random calendars check for overlaps, and the suite covers Sydney's daylight-saving changes.

AI that asks first

Claude reads uploaded timetables and course outlines and suggests how to break an assignment into steps. Everything it produces is a draft. The API checks it against a schema and re-validates it, and flags bad rows in plain language instead of dropping them. Nothing reaches the schedule until the student confirms it. The AI never decides whether time is free. Uploads aren't stored, and every model call is logged with its cost against a daily allowance.

Also built

  • Custom email and password auth, with sessions, CSRF protection and rate limits.
  • Calendar feeds in and out as .ics: import Moodle deadlines and personal calendars, and subscribe to your plan from any calendar app.
  • Check-ins after each session, automatic rescheduling of missed work, web push and email reminders, and a daily summary.
  • Light and dark themes, and university-agnostic term structures (teaching weeks, flexibility weeks and breaks are data, not code).

Stack

Next.js 16 (App Router), Tailwind 4, TanStack Query and FullCalendar on the front end. FastAPI, async SQLAlchemy 2, Alembic and Postgres on the back end. The TypeScript API client is generated from the OpenAPI schema. It deploys to Vercel as two services (web and api) behind one origin, with Neon Postgres and a cron tick for background jobs.

Next

Photographing mistakes and resurfacing them with FSRS spaced repetition, plus reports comparing estimated and actual study time.

Status
In progress
Stack
Next.js, FastAPI, Postgres, OR-Tools, Claude API
Tags
education, scheduling, fullstack, ai, python
Updated