rusky
The review algorithm as a pure function, and therefore testable
A spaced-repetition app for learning Russian: 6 test suites over logic that needs neither a database nor a clock to be proven.
- Next.js
- TypeScript
- Prisma
- SQLite
- Tailwind CSS
- Vitest
- Docker
What it is
An app for learning Russian from scratch with spaced repetition: theory, practice and assessment, plus a system that decides what to review today based on what you got wrong yesterday. The path starts with the Cyrillic alphabet — all 33 letters across six lessons — then moves through everyday conversation, numbers and grammar, keeping your progress: streak, percentage mastered, and the next review date for every card.
The number is really a design choice. The heart of the system, the part that decides when a card comes back, is a pure function: card state and the grade you gave it go in, the new state comes out. It touches no database, asks for no clock, has no side effects. That is why the 6 test suites (review, due dates, quiz, streak, writing, content integrity) can prove the logic that actually matters without standing up an environment — the stateful part lives in its own layer and is tested separately. It is the decision that keeps a small app editable six months later.
I reused the same base for other subjects — Python, Bitcoin and .NET — changing only the content.
