Personal project · Tool · 2026
The one repository you can actually open — and the server, not the app, owns the truth.
A spaced-repetition trainer with a small 3D foyer for picking a deck. The flashcard domain is deliberately plain — it is a vehicle for the two things a closed-source portfolio cannot show.
Every commercial project I shipped lives in a private repository, so none of my code is readable by anyone deciding whether to hire me. A Unity-only portfolio also says nothing about the server side.
Split the project into five assembly-enforced layers. Domain and Application compile with no engine reference at all, so the scheduling algorithm and session orchestration build and unit-test as plain C#; time enters through an IClock interface.
Made the server authoritative: the SM-2 algorithm exists twice, once as pure C# and once as server JavaScript, each with its own test suite, and the server result overwrites the client cache after every submission.
Made submission idempotent — de-duplicated on session id plus a payload hash, with request validation on every endpoint.
Wrote an offline path that degrades instead of failing: HTTP is primary, an atomic JSON cache is the fallback, and queued sessions drain in order once the connection returns.
Built a Deck Author window in UI Toolkit so deck content stays one diffable file instead of scattered assets.
Covered every layer with tests: twelve edit-mode suites on the client, plus algorithm and HTTP integration suites on the server.
A project that can be read, run and tested by a stranger — and a written list of its own limits, from last-write-wins across devices to the write-ahead log that a production version would need.
I built this one end to end. These are the parts worth naming.