DEV Community

Max McGregor
Max McGregor

Posted on

How I built a spaced repetition vocabulary app with Flutter and FSRS

I'm a solo developer and this is my first published app. I built a Spanish vocabulary app that teaches the 1,000 most common words using spaced repetition. Here's how it works.

The idea

1,000 words cover about 80% of spoken conversation in Spanish. I wanted the fastest path to learning them. I chose to use spaced repetition to learn as fast as possible. The gist is you're shown each word right before you forget it. This has allowed me to learn 8-10 new words/day in under 15 minutes.

Architecture

  • Flutter/Dart - cross-platform from a single codebase (iOS and Android from day one)
  • SQLite - all learning state lives on-device
  • Supabase - sync and auth, lightweight backend
  • FSRS algorithm - the scheduling brain (via the fsrs Dart package, Rust core)

How the FSRS scheduling works

Every word has two key properties: stability (how many days until your recall probability drops to 90%) and difficulty (0-10 scale, affects how fast stability grows).

When you see a flashcard and rate it Again/Hard/Good/Easy, FSRS recalculates both values and sets the next due date. Words you know get pushed out days or weeks. Words you struggle with come back in minutes.

The daily session assembles a queue of up to 30 cards:

  1. Cards that are due today (most overdue first)
  2. New words if there's room (up to 12 new per day, 30 on day one)
  3. Trouble cards -- high difficulty or high lapse count with low stability
  4. Bonus cards due in the next few days to fill remaining slots
  5. Shuffle and go

Conjugation unlocking

When a base verb reaches stability >= 7.0 (meaning you reliably know the word), its conjugations automatically unlock and enter the queue as new cards. You learn "hablar" first, then "hablo," "hablas," "habla" show up naturally.

What I'd do differently

  • State management - I'd be more intentional about it from the start. Flutter has a lot of options and I learned as I went.
  • Content pipeline - The word list is baked into the app. A CMS or remote content layer would make updates easier.

The numbers

Built in ~2 months spending about 1 hour/day. $99 Apple dev account, Claude Code for AI-assisted development, free Supabase tier. ~$20 in revenue so far with zero marketing. First published app.

$1.99, one-time purchase. No subscription, no ads.

1,000 Spanish Words on the App Store

Looking for Android testers. Please DM me if interested.

Top comments (0)