ahmad.leo/yudanto
Side projects

Apps I built for my own problems

Things I made after work because something in my life annoyed me enough. Both run in the browser, keep your data on your device unless you choose to sync or share it, and are free to use.

Road to N3 on a phone: the N5 journey screen with a countdown to the next JLPT and progress for N5, N4 and N3
Study app · JLPT N5 → N3

Road to N3

A JLPT study site that tells you why you got it wrong, not just that you did.

The JLPT has beaten me twice, and a score never told me why. So I built the thing I wanted: every wrong answer is tagged with the trap it set, and the app tracks which traps keep catching me.

  • Why I miss

    Every wrong option is tagged with its trap (vowel length, look-alike kanji, particle role) and has its own note on why it's wrong in that sentence. Fast-and-wrong means a wrong belief; slow-and-right means recall is still fragile.
  • Real test format

    Kanji, vocabulary, grammar, sentence order, reading and listening, with the English translation after every answer (whole passages and listening scripts too), plus timed mock exams scored on the 180-point scale with the real pass line.
  • 304 grammar points

    Minna no Nihongo I and II in lesson order plus 122 N3 points by theme, each with its own questions.
  • Every kanji, every word

    All 650 N5–N3 kanji and every word on the JLPT lists have questions. The 122 look-alikes sit in 47 groups (休 体 本 木, 間 聞 問 開 閉), so they fight it out side by side.
  • Journey and Pass readiness

    Each level is a row of steps, mastered at 80%, with a countdown to the next JLPT; Scores predicts your result out of 180 and says whether you're on track to pass. Progress syncs across devices with no account, because nobody needs another password.
  • Noisy listening

    Recorded voices, with optional exam-room, café or street noise underneath, because the real listening room is never silent.
  • Claude coach

    Optional: bring your own Claude API key and it explains the pattern behind your real mistakes. The key never leaves your browser.
HTML + ES modulesNo build stepWeb AudioVOICEVOXClaude APICloudflare
Open Road to N3 road-to-n3.leoyudanto.com
Court Psywar on a phone: the Psywar tab of a padel session, with taunts for On fire, Nemesis, Pressure allergy and Back from the dead
Session app · padel & badminton

Court Psywar

Balanced matches, an honest table, and no mercy in the commentary.

Every padel session had the same three arguments: who plays next, who's actually winning, and who is lying about last week's score. Now one phone settles all three, and adds trash talk nobody asked for.

  • Fair matchmaking

    Every possible pairing is scored on who has waited longest, how close the teams are, and how often the same partners repeat. Not happy? Reroll.
  • A table you can't game

    Average games per match, pulled toward the middle so one lucky 4–0 doesn't crown anyone. A hidden Elo rating is used only to balance teams.
  • Psywar detector

    Replays every match to spot nemeses, revenge wins, comebacks, bagels and golden-point chokes, then writes the taunt for you, in English or Bahasa Indonesia. The Indonesian one slips in a Betawi pantun now and then.
  • Classic, Americano, Mexicano

    Classic games on rolling courts, or rounds to a fixed number of points where every point counts (padel can play rounds in games with golden point). Americano rotates partners; Mexicano re-sorts courts by the table, so getting promoted to court 1 (or kicked off it) gets its own taunt.
  • Live session sharing

    Send a join link or code to the WhatsApp group and other phones see the same table and psywar, and score the other courts. Points sync in batches every 10–15 seconds, because the free Cloudflare write limit is real and I am cheap.
  • Built for the court

    Installs to the home screen and works offline. Padel with golden point, badminton to 21 with deuce. Shares a recap image straight to WhatsApp or Instagram, so the losers can see it too.
ReactTypeScriptVitePWA · offlineUnit-tested domainCloudflare Workers + KV
Open Court Psywar court-psywar.leoyudanto.com
Same habits as at work

Small apps, built like production

In Court Psywar, the rules that decide things (scoring, matchmaking, ranking, taunts) live in plain functions with unit tests, away from the screens. In Road to N3, the question bank is data, and every wrong option carries a trap tag, so analysis is a query rather than guesswork. Both keep your data on your device by default, with a backup file to move it; anything synced or shared goes to Cloudflare under a random key, not an account. And I build both with Claude Code under the same written rules I use at work.