README.en.md

June 9, 2026 · View on GitHub

English | 简体中文
Echo Loop

Echo Loop — Efficient English Listening & Speaking Training

You no longer have to figure out how to practice English on your own.

Blind listening · Intensive listening · Shadowing · Retelling · Review — Echo Loop guides you through every step at a scientifically-paced rhythm.

This project is academically advised by Yang Yan from the School of Foreign Studies, Minzu University of China.

License: AGPL-3.0 Platform Latest release Total release downloads Last commit

echo-loop/Echo-Loop | Trendshift

Download on the App Store

🇨🇳 Note for China users: The China App Store listing is temporarily off the shelf while we complete ICP registration. Users in mainland China can still install Echo Loop with an App Store account from another region (e.g. US or Hong Kong). It will be relisted once registration is complete.


📱 Screenshots

Import audio
Import audio, start practicing
Scientific practice
Scientific practice, listen-speak loop
Auto reminders
Auto reminders, visible progress
Sentence-by-sentence
Sentence-by-sentence intensive listening
Sense group split
Sense-group split, hard sentence analysis
Paragraph retelling
Retelling: turn comprehension into output
Saved sentences
Saved hard sentences, practice to mastery
Flashcard review
Flashcard review with original context
Freestyle practice
Practice freely at your own pace
Echo Loop

✨ Features

  • 🤖 Auto-driven learning rhythm: Shadowing repetitions, review timing, and hard-sentence marking all advance automatically — you just focus on listening and speaking.
  • 🎯 Listen-speak loop: Intensive listening, shadowing, and retelling flow seamlessly. From understanding the content, to imitating expression, to saying it in your own words.
  • 🧩 Sense-group splitting for long sentences: Long sentences are split by sense groups, breaking complex structures into digestible chunks.
  • Save hard sentences and review them on demand: Hard sentences are auto-archived for focused shadowing and repeated practice — no more "marked and forgotten".
  • 📚 Contextualized flashcard review: Saved words and sense groups are reviewed alongside their original sentence context — memorize in context, not in isolation.
  • 💡 AI translation, analysis, and vocabulary explanation: Bilingual translation, sentence analysis, word usage and collocations — expand on demand without breaking your flow.
  • 📍 Resume where you left off: Automatically records your stage and current sentence, so you can pick up instantly — even 5-minute fragments count.
  • 📊 Learning statistics: Tracks practice time, input/output ratio, and unique vocabulary — see exactly how much you've practiced and spoken.
  • 🎙️ AI shadowing evaluation: Automatically aligns ASR results with the original text, highlights matched words, and gives a shadowing rating.
  • 🎧 Local audio import + AI subtitles: Batch-import local audio, import existing subtitles, or auto-transcribe with AI.

🤔 Why we built this

When using other English-learning apps, you have to decide for yourself: how many times should I listen today? Intensive or extensive? Which sentence haven't I mastered yet? Should I shadow it? When should I review?

Those decisions themselves are what drains your willpower — it's not that you can't understand, it's that you don't know what to do next.

Echo Loop takes those decisions off your plate. Pick a piece of audio you want to understand, hit start, and from blind listening to completion, every step tells you "what to do right now".

You just need to keep opening the app — Echo Loop handles the rest. Practicing one piece thoroughly beats listening to 100 random ones.


🆚 How it differs from other solutions

We picked four English-learning apps most familiar to Chinese learners for comparison. Each individual feature exists, more or less, in other apps. But Echo Loop's real difference is this: it strings every step together and drives you through automatically — you don't need to figure out the method, control repetition counts, or manage review intervals yourself.

FeatureEcho LoopDaily English ListeningKekenetLiulishuoAnki
App-driven learning rhythm✅ Fully automatic
Listen → speak loop (intensive + shadowing + retelling)⚠️ Partial⚠️ Partial⚠️ Partial
Sense-group splitting for long sentences
Saved-sentence focused review
Contextualized flashcard review⚠️ Manual cards required
AI translation / sentence analysis / word deep-dive⚠️ Partial⚠️ Partial
Resume where you left off⚠️ Partial⚠️ Partial⚠️ Partial⚠️ Partial
Stats: time / input-output ratio / unique vocabulary⚠️ Partial⚠️ Partial⚠️ Partial
AI shadowing evaluation
Local audio import⚠️ Manual cards
Offline available⚠️ Partial
Open source

🧠 Methodology

Blind listening → Intensive listening → Shadowing → Retelling → Spaced review → Completion.

flowchart LR
  A[Blind listening<br/>Listen through once, gauge overall difficulty] --> B[Intensive listening<br/>Understand sentence by sentence, mark hard ones]
  B --> C[Shadowing<br/>Imitate pronunciation and intonation]
  C --> D[Retelling<br/>Express in your own words, build output ability]
  D --> E[Spaced review<br/>Re-practice before forgetting, consolidate long-term memory]
  E --> F[Completion<br/>Finish this round of learning]

Every step above is auto-driven by Echo Loop — no judgment calls required.

You don't need to manage "how many times should I listen" or "is it time to review last week's material". Open the app, and what to do today appears right in front of you.

The full process is quantified: practice time · input/output ratio · unique vocabulary.

How are spaced reviews scheduled?

Each piece of material is split into 1 first-pass session + 7 spaced reviews. Intervals stretch from 6 hours to 28 days, hitting the memory trace just before forgetting — aligned with the Ebbinghaus forgetting curve.

StageInterval since lastTasks
First passBlind → Intensive → Shadowing → Retelling
Review 1After 6 hoursHard-sentence drills + retelling
Review 2After 1 dayBlind listening + drills + retelling
Review 3After 2 daysBlind listening + drills + retelling
Review 4After 4 daysBlind listening + drills + retelling
Review 5After 7 daysBlind listening + drills + retelling
Review 6After 14 daysBlind listening + drills + retelling
Review 7After 28 daysBlind listening + drills + retelling

📥 Download & try it

App Store   Android APK

Desktop: macOS in development · Windows planned · Web not planned

App Store QR code
Scan to download iOS

💬 Join the community

Practice English alongside other committed learners: share methods, give feedback, and be the first to hear about new features.

WeChat group QR code
Scan to join WeChat group

If the QR code expires or the group hits the 200-member cap, add WeChat echo-loop-app first and the admin will invite you in.


🗺️ Roadmap

✅ 1 · Core features

  • Learning loop: blind / intensive / shadowing / retelling
  • Spaced review scheduling (6h → 28d)
  • Sense-group splitting for long sentences
  • Saved hard sentences + focused review
  • Contextualized flashcard review
  • AI translation / sentence analysis
  • iOS / macOS native ASR shadowing evaluation
  • Resume where you left off
  • Learning statistics

🚧 2 · AI capabilities

  • AI speaking partner
  • AI learning assistant (on-demand Q&A)
  • Word deep-dive analysis
  • Personalized material recommendations

🔭 3 · Experience & platforms

  • Custom task flows
  • Streaks / learning badges
  • Official macOS / Windows desktop release

🔭 4 · Content ecosystem

  • Official curated collections (by topic + difficulty)
  • User-shared collections / UGC learning materials

⭐ Star History

Star History Chart


🎓 Academic guidance & acknowledgements

Academic guidance

Thanks to Yang Yan (School of Foreign Studies, Minzu University of China; PhD in English Language and Literature, Peking University) for guiding this project's methodology.

Core dependencies


🧑‍💻 For developers

🚀 Quick start
git clone git@github.com:echo-loop/Echo-Loop.git
cd Echo-Loop
cp .dev.env.template .dev.env   # fill in Supabase / Google / API base URL
flutter pub get
dart run build_runner build
flutter run -d <ios|android|macos> --dart-define-from-file=.dev.env

Compile-time variables (SUPABASE_URL, SUPABASE_PUBLISHABLE_KEY, GOOGLE_WEB_CLIENT_ID, API_BASE_URL) live in .dev.env (debug) / .prod.env (release) and are injected via --dart-define-from-file. Both files are gitignored — do not commit them. .prod.env uses the same keys with the production API_BASE_URL.

🤝 How to contribute

Issues and PRs are welcome. Before submitting, please run:

flutter analyze
flutter test

Commit titles follow the PREFIX: content format (check git log for common prefixes — FEAT / FIX / DOCS / MOD / OPT / CHORE / CI / RELEASE, etc.). A detailed contribution guide will live in CONTRIBUTING.md (TBD). This project follows the Contributor Covenant code of conduct.

🛠️ Tech stack

Flutter Dart Riverpod Drift Material 3

CategoryTechnologyPurpose
UI frameworkFlutter + Material 3Cross-platform UI
State managementRiverpod (code generation)Unidirectional data flow
Audio playbackjust_audio + audio_sessionAudio engine layer
Subtitle parsingsubtitleSRT/VTT
File pickerfile_pickerLocal audio/subtitle import
PersistenceDrift (SQLite) + shared_preferencesProgress, favorites, cache
i18nflutter_localizations + ARB简体中文 / English
Testingflutter_test + mocktailUnit / widget / integration
Static analysisflutter_lintsCode style
📁 Project structure
lib/
├── l10n/              # i18n files (ARB format)
├── models/            # Data models (AudioItem, Sentence, Collection, etc.)
├── providers/         # Riverpod state management
│   ├── audio_engine/  # Audio engine layer (low-level playback control)
│   └── listening_practice/  # Listening practice layer (business logic)
│       ├── sentence_tracker.dart   # Sentence locator (binary search)
│       └── bookmark_manager.dart   # Bookmark manager
├── screens/           # Pages
├── services/          # Service layer (StorageService, SubtitleParser)
└── widgets/           # Reusable components

integration_test/      # End-to-end tests
test/                  # Unit / widget tests
⌨️ Dev commands cheat sheet

Run

flutter run -d ios            # iOS
flutter run -d android        # Android
flutter run -d macos          # macOS (in development, unreleased)
flutter run -d chrome         # Web (debug only, no release plan)

# iOS Simulator
xcrun simctl list devices available
xcrun simctl boot <DEVICE_UDID>
open -a Simulator

Test / quality checks

flutter analyze                          # Static analysis
flutter test                             # All tests
flutter test integration_test -d macos   # Integration tests
dart format .                            # Format

Code generation (after modifying Riverpod providers)

dart run build_runner build

Build

# Compile-time variables are injected from an env file (.dev.env for debug, .prod.env for release)
flutter build macos --dart-define-from-file=.prod.env
flutter build apk   --dart-define-from-file=.prod.env
flutter build ios   --dart-define-from-file=.prod.env

# Run on device
flutter run --release -d <DEVICE_ID> --dart-define-from-file=.dev.env

The release scripts scripts/run_simulator.sh (reads .dev.env) and scripts/release_{android,ios,macos}.sh (read .prod.env) already pass --dart-define-from-file for you.

Requirements

  • Flutter SDK 3.9.2+
  • iOS Simulator / Android emulator / physical devices
  • Desktop: macOS / Windows / Linux dev environment

📄 License

AGPL-3.0