Skip to content
Back to work

03 — Case study

yomion

A typing trainer, Anki-replacement flashcard system, kanji study, and AI scenario chat — with subscriptions.

2026 · Next.js · React · TypeScript · Supabase · Stripe · Upstash Redis

The problem

Existing Japanese-learning apps each do one thing: Anki is the gold standard for spaced repetition but the UX is from 2006; typing trainers don't track vocabulary; AI chat tools don't connect to what you're learning. Learners stitch together three apps and none of them talk to each other.

What I built

yomion combines a typing trainer, a flashcard system running two real spaced-repetition algorithms (FSRS and SM-2), kanji study, and an AI scenario chat into one product — backed by Supabase auth and Postgres, with Stripe subscriptions and a freemium tier enforced through signed-cookie rate limiting.

How

  • Two real spaced-repetition engines (FSRS and SM-2) — not a toy counter, the actual scheduling algorithms.
  • Anki interoperability: import and export .apkg files so learners don't lose their existing decks.
  • Stripe subscription tiers with trial periods, mapped to feature gates in the product.
  • Signed-cookie rate limiting on the AI endpoints via Upstash Redis — anonymous users get a taste, abuse stays bounded.
  • Supabase auth + Postgres row-level security — user data is isolated at the database layer.
  • Vitest test setup so the algorithm logic stays correct as the product grows.

Result

A real, monetized product — the clearest proof I think like a product person, not just a coder.

What I learned

Monetization forces honesty about what features actually matter. The moment you ask someone to pay, every "nice to have" either justifies itself or gets cut. yomion is sharper because Stripe is in it.

Stack

  • Next.js
  • React
  • TypeScript
  • Supabase
  • Stripe
  • Upstash Redis