Skip to content

I built StudyFlow, an exam planner that reschedules itself when you tick off a study session

Kristoffer Aarsten@kristofferaarstem

2026-10-22 · Posted with Claude Code · 1 more build

Follow
StudyFlow dashboard in dark mode with exam countdowns, today's study sessions and overall progress
StudyFlow dashboard in dark mode with exam countdowns, today's study sessions and overall progress

I wanted a study planner for university exams that actually adapts instead of being a static to-do list. I gave Claude Code one long spec (dashboard, courses, rule-based planner, progress tracking, dark mode, Norwegian UI) and it produced a working React app, then tested its own flows in a real browser and fixed a mobile overflow bug.

Save

What made it work

  • The plan is a pure function of the app state, so ticking a session or changing hours per day regenerates it instantly
  • Stable session IDs (topic:index) let completed sessions survive replanning
  • Unit tests on the planner caught edge cases: empty data, past exams, overflow
  • A real-browser click-through found a mobile layout overflow that type-checking and tests missed

The screens

Study plan page with hours-per-day slider, weekday toggles and sessions grouped by day
Study plan page with hours-per-day slider, weekday toggles and sessions grouped by day
Progress page with completion ring, streak, attention list and weekly activity chart
Progress page with completion ring, streak, attention list and weekly activity chart
Course overview with three colour-coded courses and their exam dates
Course overview with three colour-coded courses and their exam dates

Build your own version

Yours goes up next to @kristofferaarstem’s as a vibe off, and @kristofferaarstem is told. Credit for the idea stays with them.

Build your own version
How it was madeThe prompt, tools, what’s left to make it real.

What’s left to make it real

Next: the planner is a greedy rule-based scorer with hand-picked weights (difficulty x1.2, urgency 20/days-to-exam, -2.5 per same-course session per day). It needs tuning against real students and probably a smarter spaced-repetition step. Data lives only in localStorage, so there is no sync between devices, and import is missing (export exists). Sessions are fixed at 1 hour with hours-per-knowledge-level hardcoded; users should be able to set their own estimates. No end-to-end tests are checked into the repo, only unit tests. Browser coverage was Chrome only.

Made with
Claude Code, React, TypeScript, Tailwind CSS, Vite, Vitest, Playwright
How
Claude Code (Sonnet 5.5) in VS Code with a single detailed prompt. React 18, TypeScript, Tailwind and Vite, no backend, data in localStorage. It wrote the planner as a pure function with Vitest tests, then drove the built app with Playwright and Chrome to click through the main flows.
The prompt
Build StudyFlow - Smart Exam Study Planner: a modern, responsive React + TypeScript + Tailwind app for university students, all UI in Norwegian (Bokmål). Features: exam dashboard with countdowns and course colours; a rule-based study planner that schedules topics (rated 1-5) around exam dates and hours per day and updates when sessions are completed; progress tracking with per-course bars, hours studied and a weekly chart. Dark mode default with light option, Notion/Linear-style design, localStorage, sample data for three courses with reset, input validation, empty states, no placeholder buttons. Test the main flows and fix issues.
In Claude Code, React, TypeScript, Tailwind CSS, Vite, Vitest, PlaywrightModel Claude Sonnet 5.5

Building on it rather than answering it? Post a remix and it links back here.

Share it

Comments

Nothing yet. Ask @kristofferaarstem how they got it to work, or say what you liked.

Sign in to comment — you come straight back here.

More builds

Post a build

Have your AI post it

Give this line to your AI, like Claude Code or Cursor. Nothing publishes until you say so.

  1. 1Paste it to your AI
  2. 2It sends you a link
  3. 3Check it, pick a username, publish
Prefer a form? Post yours · How it works