An AI-powered flashcard app for learning German — endless, level-appropriate sentences generated on demand, scheduled by spaced repetition so they actually stick. Built solo, from prototype to a shippable, monetised product.
Most flashcard apps hand you a fixed deck — learn it and you're done, and the sentences rarely match how a language is actually used.
BUNGUMAN takes the opposite approach: instead of a finite list, it generates fresh German sentences at the learner's level on demand, and uses spaced repetition to bring each one back at the right moment. The content never runs out, and the review schedule does the remembering for you.
The client is a React PWA; everything that costs money or needs a secret lives behind Supabase. Every sentence request goes through an Edge Function, never straight to Gemini.
Gemini 2.5 Flash produces fresh, level-appropriate German — never a fixed list that runs out.
Cards return exactly when you're about to forget them, not on a flat schedule.
Generated sentences land in a shared Supabase pool — a library that grows for everyone.
Instant word lookups via FreeDictionary and spoken pronunciation on each card.
Installable, with cached cards — study without a connection.
A free daily tier, with Pro unlocking unlimited cards, all levels, and full history.
BUNGUMAN started as a single-file prototype with the Gemini key sitting in the front end — fine for a demo, unshippable for real. Getting it release-ready meant rebuilding the foundations: I moved every Gemini call behind a Supabase Edge Function so the key stays server-side, added rate limiting so no single user can drain the quota, and turned on email confirmation to keep fake accounts out.
That's what turned a working toy into something I could charge for.
is_pro flag in Supabase.