Bible Skill Builder
An offline-first PWA for memorizing scripture with FSRS spaced repetition, seven graded recall modes, and word-level diff grading. No backend, no accounts, and all data stays on your device.
- TypeScript
- React
- Vite
- FSRS
- IndexedDB
- PWA
- Tailwind CSS
Problem
People who want to know scripture well rarely lack motivation. What they lack is a system. Reading is passive, retention fades, and re-reading a verse feels like progress without proving you can actually recall it. I wanted a tool that treats memorization the way a language app treats vocabulary: short, active, adaptive practice that schedules itself and stays out of the way.
What I built
Bible Skill Builder is an installable, offline-first web app that turns memorization into daily active recall. You add a passage, practice it through one of seven graded modes, and the app grades your answer, schedules the next review, and tracks mastery over months. Every flow runs on your device. There is no backend, no account, and no analytics.
How it works
The interesting engineering is in the grading and scheduling loop, and in doing all of it with zero server.
- FSRS scheduling (
ts-fsrs). Each passage carries its own spaced-repetition state; once a chapter is solid, its chained recitation earns a second, independent schedule. Reviews feed the algorithm and it decides when a verse comes back. - Word-level diff grading. Full-recall answers are diffed against the source text word by word (the
diffpackage) to produce an accuracy percentage, which maps to a suggested FSRS grade (Again / Hard / Good / Easy) that you can override before confirming. Feedback uses strikethrough and wavy underlines, not color alone, so it reads without color vision. - Seven review modes, all graded. Full Recall, Cloze Deletion (blank rate scales with mastery), First-Letter Fade, Word Bank, Listen & Recite (Web Speech API, feature-detected with a graceful fallback), Reference Match, and Speed Recall. The last mode you used for a passage becomes its default.
- Derived mastery + chapter chaining. Passages move New → Learning → Young → Mature → Mastered from their FSRS state. Chained recitation for a whole chapter unlocks only once every verse hits a 21-day interval: recite verse 1, then 1+2, then the whole chapter, with only the final run graded.
- A daily queue interleaves everything due with a capped number of new passages across books, so sessions stay short and varied.
Architecture & decisions
- Local-first by design. All state lives in IndexedDB via Dexie, with
useLiveQuerydriving reactive UI. The only network call is an optional verse autofill from a public-domain Bible API; the app never bundles copyrighted translations; you paste in the ones you own. - Offline & installable. A Workbox service worker (
vite-plugin-pwa) precaches the shell, so every flow except autofill works with no connection, and the app installs to a home screen. - Your data stays yours. Because there’s no cloud copy, Settings exports every table to a single JSON backup and restores from it, and a banner nudges you if it’s been too long since the last export.
- Stack. TypeScript · React 18 · Vite · Tailwind CSS · Dexie ·
ts-fsrs·diff· Recharts (progress dashboard) · Zustand (ephemeral UI state) · vite-plugin-pwa. The grading math, an FSRS round-trip, and the diff renderer are covered by Vitest + React Testing Library.
Impact / results
This is a finished, self-contained product rather than a demo: seven working review modes, a real scheduling algorithm, a metrics dashboard, an achievement system, and offline install, with the core logic under unit test. The design constraint I’m proudest of is that it delivers all of that with no server, no account, and no tracking. Everything a “smart” study app usually needs a backend for is done on-device.
What I’d do next
- Optional end-to-end-encrypted sync so a backup can follow you across devices without giving up the local-only guarantee.
- Shareable, importable passage packs and reading plans.
- Smarter cloze/word selection that targets the words you actually miss.
- Audio recording for spoken recitation review, beyond the current speech-recognition mode.
Gallery















