Inspiration

I'm Mario, from Seville, Spain. I've studied languages with a lot of apps, and I kept hitting the same wall: I'd read a word, feel good about it, and a week later it was gone. Most apps optimise for streaks and taps, not for memory. And reading alone doesn't make you able to use a language: you also need to hear it, say it and write it.

I wanted an app built around how memory actually works: spaced repetition, combined with active practice in every skill.

What it does

Loopify teaches a language a little bit every day and brings every word back right before you'd forget it.

  • Grammar path from A0 to C2: short lessons, one small page at a time, each unlocking the next once you've practised it.
  • Tap any underlined word to open its full card: pronunciation, audio (normal and slow), meanings, CEFR level, gender, inflections, synonyms and real examples. One tap adds it to your learning list.
  • Active practice after every lesson: listen first, then see the word, say it out loud (record and play back, with optional AI pronunciation feedback), then write what you hear. Reviews also include translation in both directions.
  • Spaced repetition per skill: each word has its own schedule for listening, speaking and translating both ways. The first review comes a few minutes after learning; every correct answer multiplies the interval (hours → days → weeks), and mistakes bring it back sooner.
  • Vocabulary lists by CEFR level (A1–C2), topics and idioms, with progress shown on every word.
  • Loopify Max subscription for AI extras such as "Explain my mistake", "Explain grammar" and "Nuance and alternatives".

How I built it

  • App: Flutter with Riverpod, plus a local SQLite/Drift database so reviews stay fast and work offline. Audio uses record and audioplayers.
  • Backend: Dart (shelf) with PostgreSQL. The scheduler runs on the server and keeps a separate interval and ease for each skill.
  • AI: Google Gemini checks typed answers by meaning rather than exact string matching, powers the explanations, and gives pronunciation feedback. It also helps generate the lesson, example and translation content, which goes through reproducible, validated scripts.
  • Payments: RevenueCat (purchases_flutter) for the Max subscription, including purchases as a guest and restoring access when you log in or switch accounts.
  • Infra: self-hosted CI/CD and a Kubernetes (k3s) deployment for the API.

Challenges we ran into

  • Grading answers fairly. "La mesa", "mesa" and "the table" can all be right depending on the exercise. Exact matching felt punishing, so answers are evaluated semantically, with a clear explanation when you're wrong.
  • A scheduler that respects skills. Recognising a word when you read it isn't the same as saying it or writing it from memory, so every skill gets its own interval.
  • Content quality at scale. Thousands of words and lessons across several languages had to be generated, then validated for language, structure and cross-references before shipping.
  • Payments in the real world. Guest purchases, account switches, restores and App Store sandbox receipts during review all needed careful handling so nobody loses access they paid for.

Accomplishments that we're proud of

  • A complete grammar path from absolute beginner to C2, and CEFR word lists with thousands of cards.
  • Every session combines listening, speaking, writing and reading, not just flashcards.
  • Word lookup that never makes you lose your place: tap, understand, keep going.

What we learned

  • Retention is a product feature: when you review matters as much as what you review.
  • AI works best as a patient tutor that explains mistakes, not as a replacement for practice.
  • Smooth monetisation (guest purchases, restores) matters as much as the paywall itself.

What's next for Loopify

  • Full grammar paths for more languages beyond Spanish, English, French and German.
  • Richer speaking practice with conversation scenarios.
  • Smarter daily planning that adapts review load to each learner's retention.

Built With

Share this project:

Updates

Submission history