LingoSync is a production-grade, offline-first language learning platform built around a real-time, voice-based AI mentor. A Flutter client following strict Clean Architecture communicates with a Node.js backend that proxies live audio sessions to the Google Gemini Live API, alongside a dedicated AI dictionary/analysis service.
- 🤖 Live AI Mentor — Real-time, bidirectional voice conversations over WebSockets, proxied through a dedicated
mentor-server.js, with audio streams offloaded to background isolates to keep the UI at 60fps. - 📺 Smart Video Analysis — Paste any YouTube link to extract transcript translations, grammar breakdowns, and CEFR-leveled vocabulary via
ai-server.js. - 🧠 Spaced Repetition Flashcards — Offline-first flashcard system that queues reviews locally and syncs to the backend once connectivity returns.
- ⏱️ Floating Pomodoro Timer — A persistent, draggable focus timer available across every screen in the app.
- 🏆 Live Leaderboard & Streaks — Gamified daily tasks with real-time leaderboard updates.
- 🌓 Full i18n & Theming — Material 3 design with instant Light/Dark and English/Persian switching.
- ✅ Tested & Automated — Unit/widget tests under
test/, with continuous integration via GitHub Actions (.github/workflows/flutter_ci.yml).
- Frontend: Flutter, Riverpod, Hive (offline caching)
- Database & BaaS: Supabase (PostgreSQL, Auth, Realtime, RPCs, RLS)
- AI & Middleware Server: Node.js, WebSockets, Docker
- LLM Engine: Google Gemini Live API
This is a monorepo containing the Flutter client, the Node.js backend, tests, and CI configuration side by side:
lingo_sync/
├── lib/ # Flutter client (see ARCHITECTURE.md)
├── backend/ # Node.js servers
│ ├── server.js # Main API/auth server
│ ├── ai-server.js # Dictionary & video analysis AI service
│ ├── mentor-server.js # Real-time WebSocket proxy to Gemini Live
│ ├── docker-compose.yml
│ └── package.json
├── test/ # Unit & widget tests (mirrors lib/ structure)
│ ├── core/
│ └── features/
├── .github/workflows/ # CI/CD pipeline (flutter_ci.yml)
├── pubspec.yaml
└── ARCHITECTURE.md
1. Clone the repository
git clone https://github.com/MasoudMaghsodi/lingo_sync.git
cd lingo_sync2. Supabase setup
- Create a project at supabase.com.
- Apply your schema (tables, RLS policies, and RPC functions) to the project.
3. Backend setup (Node.js)
Create backend/.env:
GEMINI_API_KEY=your_gemini_api_key
SUPABASE_URL=your_supabase_project_url
SUPABASE_SERVICE_KEY=your_supabase_service_role_keyThen deploy:
cd backend
docker-compose up -d4. Flutter client setup
Create a .env in the project root:
SUPABASE_URL=your_supabase_project_url
SUPABASE_ANON_KEY=your_supabase_anon_key
AI_SERVER_BASE_URL=http://localhost:3002/api
MENTOR_SOCKET_URL=ws://localhost:3001Then run:
flutter pub get
dart run build_runner build --delete-conflicting-outputs
flutter run5. Run tests
flutter testNote: the exact env var names, ports, and URLs above are placeholders matching this document's assumptions — swap in whatever your
app_config.dartand backend actually read.
For the full engineering breakdown of the codebase, see ARCHITECTURE.md.
LingoSync یک پلتفرم حرفهای و آفلاینمحور برای یادگیری زبان است که حول محور یک استاد هوش مصنوعی صوتی و بلادرنگ ساخته شده. کلاینت Flutter با پایبندی کامل به Clean Architecture، از طریق یک بکاند Node.js با API زنده Gemini Live گوگل و همچنین یک سرویس اختصاصی برای تحلیل واژگان و ویدیو، ارتباط برقرار میکند.
- 🤖 استاد هوش مصنوعی زنده — مکالمه صوتی دوطرفه در لحظه از طریق WebSocket، با پروکسی اختصاصی
mentor-server.jsو پردازش صدا در نخهای پسزمینه برای حفظ روانی کامل UI. - 📺 تحلیلگر هوشمند ویدیو — استخراج ترجمه زیرنویس، نکات گرامری و واژگان سطحبندیشده (CEFR) از هر لینک یوتیوب، از طریق
ai-server.js. - 🧠 فلشکارت با تکرار فاصلهدار — سیستم آفلایناول که مرورها را محلی ذخیره و پس از اتصال مجدد همگامسازی میکند.
- ⏱️ تایمر پومودوروی شناور — تایمر تمرکز شناور و قابلجابجایی در تمام صفحات اپ.
- 🏆 لیدربورد و استریک زنده — گیمیفیکیشن تسکهای روزانه با بهروزرسانی زنده امتیازات.
- 🌓 پشتیبانی کامل دو زبانه و تم — طراحی متریال ۳ با سوییچ آنی بین تاریک/روشن و فارسی/انگلیسی.
- ✅ تستشده و خودکار — تستهای واحد و ویجت در
test/، همراه با CI/CD از طریق GitHub Actions.
- فرانتاند: Flutter، Riverpod، Hive (کش آفلاین)
- دیتابیس و BaaS: Supabase (PostgreSQL، Auth، Realtime، RPC، RLS)
- سرور هوش مصنوعی و میانافزار: Node.js، WebSocket، Docker
- موتور LLM: Google Gemini Live API
این پروژه یک Monorepo شامل کلاینت فلاتر، بکاند Node.js، تستها و پیکربندی CI است (به بخش انگلیسی بالا برای درخت کامل پوشهها مراجعه کنید).
۱. دریافت پروژه:
git clone https://github.com/MasoudMaghsodi/lingo_sync.git
cd lingo_sync۲. راهاندازی Supabase:
- یک پروژه در supabase.com بساز.
- اسکیمای خودت (جداول، قوانین RLS و توابع RPC) را روی آن اعمال کن.
۳. راهاندازی بکاند (Node.js):
فایل backend/.env را بساز:
GEMINI_API_KEY=your_gemini_api_key
SUPABASE_URL=your_supabase_project_url
SUPABASE_SERVICE_KEY=your_supabase_service_role_keyسپس اجرا کن:
cd backend
docker-compose up -d۴. راهاندازی کلاینت فلاتر:
یک فایل .env در ریشه پروژه بساز:
SUPABASE_URL=your_supabase_project_url
SUPABASE_ANON_KEY=your_supabase_anon_key
AI_SERVER_BASE_URL=http://localhost:3002/api
MENTOR_SOCKET_URL=ws://localhost:3001سپس اجرا کن:
flutter pub get
dart run build_runner build --delete-conflicting-outputs
flutter run۵. اجرای تستها:
flutter testنکته: نام دقیق متغیرهای محیطی، پورتها و URLها بالا فقط فرضی هستند تا با ساختار همین سند هماهنگ باشند — آنها را با چیزی که واقعاً در
app_config.dartو بکاندت خوانده میشود جایگزین کن.
برای جزئیات کامل مهندسی و معماری پروژه، به فایل ARCHITECTURE.md مراجعه کنید.