Problem
I wanted to study from my own notes without a backend, an account, or a paid SaaS - and I wanted to swap scheduling algorithms without rewriting the app. Existing tools either locked content behind their own formats or offered a single opaque scheduler with no way to experiment.
Approach
Questions are authored as MDX next to the posts they belong to, ingested into SQLite, and exported as a static JSON bundle. The web app is a strict CSR React 19 + Vite client: it loads that bundle, tracks learning state in the browser (Zustand + versioned localStorage), and feeds reviews to a pluggable scheduler. Presentation lives as reusable, Storybook-backed blocks in the shared UI kit; this app only owns containers, hooks, routes, store, and algorithms.
- Content pipeline reuse - one SQLite artifact feeds the blog and the quiz; export emits per-post, per-tag, and full offline bundles with no content duplication.
- Multi-scope study - study a single set, a tag, or every due card across added sets; cram mode for a card or whole tag; browse/search/filter globally; preview any card outside a session.
- Rich rendering - Markdown/MDX stems and explanations with KaTeX math and highlighted code; four answer formats (free text, multiple choice, true/false, multiple select) with auto-grade or self-grade.
- Scheduler as a seam - SM-2 and FSRS-5 implement one interface; switching at runtime migrates every card losslessly and reversibly. A back-test harness compares review load at the same retention target.
- Spaced-repetition correctness - interval fuzz and load balancing, per-set and global daily limits, leech detection, and rollover-aware local dates.
- Offline PWA - installable shell with precached indexes; per-set and per-tag question files cached stale-while-revalidate so opened sets stay available offline.
- Stats and settings - 30-day forecast, 1-year heatmap, ease/difficulty distribution, reviews/day, retention, and average interval; theme, study order, scheduler config, backup/restore, and clear-all - still zero accounts.
Outcome
A genuinely offline-capable study tool that reuses the blog's content with zero duplication, surfaces progress in a full stats dashboard, and offers a clean place to experiment with scheduling research - including measurable comparisons between SM-2 and FSRS.