{"adoption": {"forks": 298, "observed_at": "2026-08-28T04:07:50.547610+00:00", "stars": 3242}, "canonical_url": "https://ross.abutalabs.com/products/echo-loop", "card": {"archived": false, "artifact_type": "application", "description": "Echo Loop 是一款科学、高效的 AI 英语听说训练 App，通过盲听、精听、跟读、复述和间隔复习，自动驱动学习者把每一段音频真正练懂、练熟、练到会说。", "domain": ["education", "speech-processing"], "enriched": true, "function": ["speech-recognition", "nlp"], "health_score": 99, "homepage": "https://www.echo-loop.top", "language": "Dart", "license": "AGPL-3.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["echo-loop/Echo-Loop"], "name": "echo-loop/Echo-Loop", "platform": ["windows", "cross-platform"], "pushed_at": "2026-08-23T03:22:44+00:00", "repo": "echo-loop/Echo-Loop", "stars": 3242, "tags": ["english-learning", "language-learning", "listening-practice", "speaking-practice", "shadowing", "spaced-repetition", "pronunciation-scoring", "flutter", "ai-tutor", "education", "audio", "ios", "android", "macos", "mobile"], "topics": ["english-learning", "language-learning", "listening-practice", "spaced-repetition", "speaking-practice", "education", "flutter", "ai"], "urls": [], "use_cases": ["practice english listening comprehension with real audio", "improve my english speaking through shadowing exercises", "learn english with spaced repetition and automatic review reminders", "get ai feedback on my english pronunciation", "train myself to understand english without subtitles", "turn listening practice into actual speaking ability", "english listening and speaking training app with daily streak tracking"], "what_it_is": "Echo Loop is an open-source Flutter-based English listening and speaking training app that guides learners through a structured listen-to-speak cycle: blind listening, sentence-by-sentence intensive listening, shadowing with real-time AI pronunciation scoring, and paragraph retelling. It automatically schedules an 8-stage, 28-day spaced-repetition review cycle with reminders, so learners can build listening and speaking skills without designing their own study plan.", "when_to_avoid": ["You need grammar-focused or written-exam English preparation rather than listening and speaking practice", "You want to learn languages other than English", "You prefer casual content browsing over a demanding, structured daily drilling routine"], "when_to_choose": ["You want a structured, science-backed listen-to-speak training loop instead of passively consuming English podcasts or videos", "You need automatic spaced-repetition scheduling and reminders to build a consistent daily study habit", "You want real-time AI pronunciation scoring while shadowing bookmarked sentences", "You prefer an open-source alternative to commercial language-learning apps"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/echo-loop", "repo": "echo-loop/Echo-Loop", "role": "main", "score": 80}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:07:50.547610+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T07:24:30.494924+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3adad2288439cded7aa3b62ff357ef1294b701a3da51ceec49d07ccb73039ab4", "fetched_at": "2026-08-28T04:07:50.547610+00:00", "kind": "readme", "missing": false, "url": "https://github.com/echo-loop/Echo-Loop"}, {"content_hash": "7ef5232f40350717ed0cb5d8690204ae143ba4348772a43e3a31c8a4f9821320", "fetched_at": "2026-08-29T09:37:12.370455+00:00", "kind": "homepage", "missing": false, "url": "https://www.echo-loop.top"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:07:50.547610+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T07:24:30.494924+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3adad2288439cded7aa3b62ff357ef1294b701a3da51ceec49d07ccb73039ab4", "fetched_at": "2026-08-28T04:07:50.547610+00:00", "kind": "readme", "missing": false, "url": "https://github.com/echo-loop/Echo-Loop"}, {"content_hash": "7ef5232f40350717ed0cb5d8690204ae143ba4348772a43e3a31c8a4f9821320", "fetched_at": "2026-08-29T09:37:12.370455+00:00", "kind": "homepage", "missing": false, "url": "https://www.echo-loop.top"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T07:24:30.494924+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3adad2288439cded7aa3b62ff357ef1294b701a3da51ceec49d07ccb73039ab4", "fetched_at": "2026-08-28T04:07:50.547610+00:00", "kind": "readme", "missing": false, "url": "https://github.com/echo-loop/Echo-Loop"}, {"content_hash": "7ef5232f40350717ed0cb5d8690204ae143ba4348772a43e3a31c8a4f9821320", "fetched_at": "2026-08-29T09:37:12.370455+00:00", "kind": "homepage", "missing": false, "url": "https://www.echo-loop.top"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:07:50.547610+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:07:50.547610+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:07:50.547610+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T07:24:30.494924+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3adad2288439cded7aa3b62ff357ef1294b701a3da51ceec49d07ccb73039ab4", "fetched_at": "2026-08-28T04:07:50.547610+00:00", "kind": "readme", "missing": false, "url": "https://github.com/echo-loop/Echo-Loop"}, {"content_hash": "7ef5232f40350717ed0cb5d8690204ae143ba4348772a43e3a31c8a4f9821320", "fetched_at": "2026-08-29T09:37:12.370455+00:00", "kind": "homepage", "missing": false, "url": "https://www.echo-loop.top"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:07:50.547610+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:07:50.547610+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T07:24:30.494924+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3adad2288439cded7aa3b62ff357ef1294b701a3da51ceec49d07ccb73039ab4", "fetched_at": "2026-08-28T04:07:50.547610+00:00", "kind": "readme", "missing": false, "url": "https://github.com/echo-loop/Echo-Loop"}, {"content_hash": "7ef5232f40350717ed0cb5d8690204ae143ba4348772a43e3a31c8a4f9821320", "fetched_at": "2026-08-29T09:37:12.370455+00:00", "kind": "homepage", "missing": false, "url": "https://www.echo-loop.top"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:07:50.547610+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:07:50.547610+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:07:50.547610+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T07:24:30.494924+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3adad2288439cded7aa3b62ff357ef1294b701a3da51ceec49d07ccb73039ab4", "fetched_at": "2026-08-28T04:07:50.547610+00:00", "kind": "readme", "missing": false, "url": "https://github.com/echo-loop/Echo-Loop"}, {"content_hash": "7ef5232f40350717ed0cb5d8690204ae143ba4348772a43e3a31c8a4f9821320", "fetched_at": "2026-08-29T09:37:12.370455+00:00", "kind": "homepage", "missing": false, "url": "https://www.echo-loop.top"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:07:50.547610+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:07:50.547610+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T07:24:30.494924+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3adad2288439cded7aa3b62ff357ef1294b701a3da51ceec49d07ccb73039ab4", "fetched_at": "2026-08-28T04:07:50.547610+00:00", "kind": "readme", "missing": false, "url": "https://github.com/echo-loop/Echo-Loop"}, {"content_hash": "7ef5232f40350717ed0cb5d8690204ae143ba4348772a43e3a31c8a4f9821320", "fetched_at": "2026-08-29T09:37:12.370455+00:00", "kind": "homepage", "missing": false, "url": "https://www.echo-loop.top"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T07:24:30.494924+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3adad2288439cded7aa3b62ff357ef1294b701a3da51ceec49d07ccb73039ab4", "fetched_at": "2026-08-28T04:07:50.547610+00:00", "kind": "readme", "missing": false, "url": "https://github.com/echo-loop/Echo-Loop"}, {"content_hash": "7ef5232f40350717ed0cb5d8690204ae143ba4348772a43e3a31c8a4f9821320", "fetched_at": "2026-08-29T09:37:12.370455+00:00", "kind": "homepage", "missing": false, "url": "https://www.echo-loop.top"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T07:24:30.494924+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3adad2288439cded7aa3b62ff357ef1294b701a3da51ceec49d07ccb73039ab4", "fetched_at": "2026-08-28T04:07:50.547610+00:00", "kind": "readme", "missing": false, "url": "https://github.com/echo-loop/Echo-Loop"}, {"content_hash": "7ef5232f40350717ed0cb5d8690204ae143ba4348772a43e3a31c8a4f9821320", "fetched_at": "2026-08-29T09:37:12.370455+00:00", "kind": "homepage", "missing": false, "url": "https://www.echo-loop.top"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T07:24:30.494924+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3adad2288439cded7aa3b62ff357ef1294b701a3da51ceec49d07ccb73039ab4", "fetched_at": "2026-08-28T04:07:50.547610+00:00", "kind": "readme", "missing": false, "url": "https://github.com/echo-loop/Echo-Loop"}, {"content_hash": "7ef5232f40350717ed0cb5d8690204ae143ba4348772a43e3a31c8a4f9821320", "fetched_at": "2026-08-29T09:37:12.370455+00:00", "kind": "homepage", "missing": false, "url": "https://www.echo-loop.top"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 8, "rhythm": 98}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["young"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 118, "days_push": 10, "days_rel": 15, "gap_med": 5, "n_releases_24m": 20}, "score": 80, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}