
An offline-first K53 learner's-licence drill PWA — 600+ DLTC-format questions in English, Afrikaans and isiXhosa, built for budget Android on 3G.
View the product pageThe problem
SA's K53 failure rate exceeds 60% — people fail on never having seen the question format under timed pressure, not on knowledge. Existing options (out-of-stock booklets, 15–40MB government PDFs, a 2009 quiz site) all fail the budget-device, prepaid-data user.
Architecture
A routerless client SPA: all learning state lives in localStorage (including the SM-2 schedule), so the app works fully offline. Supabase only handles magic-link auth and the PayFast-ITN subscriber activation.
100
Lighthouse PWA score
~107KB
initial JS (gzipped)
R0.54
AI cost / month @ 10k calls
395
road-sign images
Stack
AI
The AI Tutor uses OpenAI gpt-4o-mini at temperature 0 with a localStorage cache — a deliberate, honest exception to the platform’s Anthropic default (it shows range, and keeps per-explanation cost near R0).
Data model
1 Supabase table + 5 localStorage stores
Key decisions
The hard parts, solved
Each question is a card {interval, easeFactor, repetitions, nextReview}. Correct answers walk an interval ladder (1d → 6d → round(interval × EF)) and adjust ease; wrong answers reset. getDueIds() returns the most-overdue first; "mastered" = interval ≥ 21 days. Powers the Weak Spots tab with zero manual config.
395 sign images pulled from the official manual PDF via paint-operation counting to distinguish real signs from page chrome, with a runtime SVG fallback so a corrupted image never shows a broken state.
Sounds are synthesized at runtime via the Web Audio API (zero audio files, offline-safe), with ctx.resume() on every call to satisfy the iOS gesture requirement.
Sourced from nanda-k53-drill-master — BUILDLOG_k53, WONDERLAND_DECISIONS_K53, spacedRepetition.js.
.jpg&w=3840&q=75)