Skip to content
All builds

GroundworkStudy-Buddy

What it does for you

Turns a goal and a deadline into a prerequisite map, a next-best activity each day, and a plan that says early when you are behind.

Groundwork screenshot

Screenshots

Groundwork screenshot 1
Groundwork screenshot 2
Groundwork screenshot 3

In more detail

Groundwork turns a goal and a deadline into a study plan that adapts to you. It maps which topics depend on which, tells you the single best thing to study today and why, and warns you early when the deadline no longer fits. Most study plans are static lists; this one notices what you actually get right and wrong.

Honest limits

Claude mode has never been run against the live API. By rule, no paid calls were made during the build. The quiz, cut, and export buttons were checked by rendering and unit tests, not by clicking through in a real browser. The map layout can route long edges behind other nodes.

How I built it

Claude Code wrote the pure core first: Bayesian Knowledge Tracing for mastery, the prerequisite map and its layout, a picker that chooses learn, practice, or review with a plain reason, a scheduler with cut suggestions, a schema and repair pass for model output, and .ics calendar export. That core had 178 unit assertions before any UI existed.

Then the build hit the dropped-stream problem. Two builder runs died mid-stream after the core and part of the UI, and index.html pointed at five files that did not exist. A third Claude Code run finished it by writing the missing views as small modules, each under about 100 lines, one small tool call at a time. It also added a wiring test that walks the app.js import graph so a missing file cannot hide again.

My part was scope, the demo scenario, and reviewing each screenshot. The first demo seed was already 90 percent mastered, so it showed nothing interesting. We retuned it (new learner, 1.5 hours a week, a 7-day deadline) so it lands behind plan with two suggested cuts. Three built-in packs work with no API key.

What I learned

  • Replaying an event log beats storing derived state. Mastery is never saved. The app keeps the raw answer log and replays it through the mastery and spaced-review models on every render, so the quiz meter, burndown, streaks, and demo simulator all agree by construction. A restore from backup is just a new log.
  • A cut suggester gets trusted when its rule fits in one sentence: optional leaf topics only, biggest first, never core. Easy to explain in the UI, easy to test.
  • Model output needs repair, not just validation. Renaming duplicate ids, remapping prerequisites by title, and breaking cycles turns most near-miss JSON into something usable.
  • On a flaky connection, long responses die. Files under 100 lines and small tool calls finished what two longer runs could not.

What carried forward

The small-file approach came straight from the September 20 stall, when we found the API was dropping long responses and switched to a "tiny writes" brief. This project is the clearest proof in my range that it works: two runs died, the small-file run shipped. The same rule shows up in #87, #88, and #90. The replay-from-a-log idea also shows up in #90, where saves and replays come from keeping the dice inside the game state.

If I took it further

I would add edge routing to the map and a browser test that clicks through a full quiz. Then I would run Claude mode with a real key and see how often the repair pass actually has to step in.

#082 Built with Claude Code September 23, 2026 229 automated checks

Want one like this?