c757d0882a08af066f10de979163b522c1c3d7a7
All checks were successful
Test and deploy staging / staging (push) Successful in 2m30s
Stan Website
This is my personal website, including:
- Contact info / social links
- About me
- Blog posts + comments
- Projects like Animaldex, CatchEmAll
Language learner
/projects/language-learner teaches Dutch and Korean (explained in English) and
English (explained in Dutch), from A1 to C1. Korean starts with a Hangul level.
It runs entirely in the browser: no database tables, migrations or API keys.
- Course content lives in
src/lib/language-learner/courses/<lang>/<level>.tsas compacttarget | translation | notelines, plus markdown notes and multiple-choice grammar questions (prompt | answer | wrong; wrong | explanation). Exercises (choice, typing, sentence building, fill-in-the-blank, listening, matching) are generated from that data.content.test.tsvalidates every lesson. - Endless drills are generated by code in
src/lib/language-learner/drills/: number words, Dutch/English clock times, de/het, plurals, Dutch and Korean conjugation (a rule-based Korean conjugator handling the ㅂ/ㄷ/르/ㅅ/ㅎ irregulars), Korean particles and counters, Hangul reading, English irregular verbs, comparatives and a/an. - Challenges: a seeded daily challenge (first score of the day counts), 60-second sprint, survival with three lives, mixed practice, level tests that mark a level as done at 80%, and spaced-repetition reviews (simplified SM-2).
- Audio uses the browser's speech synthesis, so listening exercises appear only when the device has a voice for the language. Romanization of Korean is approximate Revised Romanization.
- Progress, streaks and settings are stored in
localStorage(language-learner-v1), per browser. Export/import on the overview page moves them between devices.
Description
Languages
TypeScript
51.1%
Svelte
35.5%
HTML
7.6%
Python
3.2%
CSS
1.8%
Other
0.7%