Case Study · Software Product · EdTech

BUNGUMAN

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.

Role
Founder & Developer
Timeline
2026
Domain
Language learning · PWA
Stack
React · Supabase · Gemini
Overview

Where it started

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.

BUNGUMAN app
BUNGUMAN · flashcardadd bunguman-hero.jpg
A German sentence card, generated fresh for the learner's level.
The problem

Flashcard apps run out — and don't manage memory

Before · typical flashcard apps

  • Fixed decks that run out; nothing new to practise
  • Sentences that feel canned, not natural
  • "Review everything" instead of reviewing what you're about to forget
  • No path to retention — you see a card once and move on

After · BUNGUMAN

  • Endless, AI-generated sentences at your level
  • A shared pool that grows richer as people use it
  • SM-2 spaced repetition surfaces cards right before you'd forget
  • Dictionary lookups and audio built into the card
How it works

The learning loop

1
Pick a level
A1, A2, and up.
2
Get a sentence
Gemini 2.5 Flash generates a fresh German card at that level.
3
Flip & check
Reveal the meaning, tap a word for a dictionary lookup, hear it read aloud.
4
Rate it
Easy or Hard.
5
Scheduled to return
SM-2 sets the next review interval from your rating.
6
Pool grows
The sentence joins the shared pool for everyone.
Under the hood

The Gemini key never touches the client

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.

Client
React PWA
Offline cache
Capacitor (mobile)
→
Backend
Supabase Auth
Postgres · shared pool + progress
→
AI layer
Edge Function
Gemini 2.5 Flash · rate-limited
→
Extras
FreeDictionary API
TTS audio
Stripe billing
The Gemini key never touches the client — every call goes through the Edge Function
Features

What the app does

01 · Generation

AI sentence generation

Gemini 2.5 Flash produces fresh, level-appropriate German — never a fixed list that runs out.

02 · Retention

Spaced repetition (SM-2)

Cards return exactly when you're about to forget them, not on a flat schedule.

03 · Content

Shared sentence pool

Generated sentences land in a shared Supabase pool — a library that grows for everyone.

04 · Comprehension

Dictionary + audio

Instant word lookups via FreeDictionary and spoken pronunciation on each card.

05 · Access

Offline PWA

Installable, with cached cards — study without a connection.

06 · Business

Freemium

A free daily tier, with Pro unlocking unlimited cards, all levels, and full history.

Engineering

From prototype to shippable product

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.

Monetisation

Freemium, gated on one flag

Free

$0
  • ~10 cards / day
  • A1 – A2 levels
  • No history

Pro

~$4 – 7 / mo
  • Unlimited cards
  • All levels
  • Full history & spaced repetition
Billed via Stripe, gated on an is_pro flag in Supabase.
Screens

Inside BUNGUMAN

Level and home screen
Homeadd bunguman-home.jpg
Level & home
A sentence flashcard
Cardadd bunguman-card.jpg
A sentence card
Spaced-repetition review
Reviewadd bunguman-review.jpg
Spaced-repetition review
Stack

Built to ship solo

React
Front end
PWA + Capacitor
Installable web app, packaged for mobile
Supabase
Auth, Postgres (shared pool + progress), Edge Functions
Gemini 2.5 Flash
Sentence generation, via an Edge Function
FreeDictionary API
Word definitions
Stripe
Freemium billing
Impact

From a finite deck to a living one

Turns a finite deck into an endless, self-refreshing study source.
Retention by design — SM-2 reviews instead of blind repetition.
A shared pool that compounds in value as more people learn.
Hardened from prototype to a monetisable, shippable product.
Real numbers (active users, cards reviewed, free → Pro conversion) drop straight into this section.
More case studies

More work

See the rest of the work.