The Problem: The product had to be demonstrable end to end — real enrolments, approvals, scores, transcripts — long before the client's backend existed. Mock JSON would have meant building every screen twice, and throwing the data logic away when the real API arrived.
My Solution: SQLite compiled to WebAssembly, running in the tab. On boot it restores the last snapshot from IndexedDB, runs ordered, append-only migrations, and seeds if empty; every write schedules a debounced snapshot, with a pagehide flush as a safety net. Seventeen repositories are the only code allowed to write SQL, and screens depend on their interfaces through injection tokens — so moving to an HTTP backend is a change of provider bindings, not a rewrite.




