AI-powered English speaking practice with Duolingo-style gamification. Practice real-world conversations through AI roleplay — ordering coffee, job interviews, networking, and more.
🔗 Live Demo → noworneverev.github.io/speak-quest
- 36 missions across 6 themed worlds
- AI roleplay with dynamic characters (barista, interviewer, doctor, neighbor, etc.)
- Smart conversation ending — AI detects when your goal is met
- Real-time speech transcription via Web Speech API
- Detailed evaluation with quote-and-correct feedback + pronunciation tips
- Gamification: XP, levels, stars, hearts, daily streaks
- Dual AI backends: Google Gemini (cloud) or Ollama (local)
- i18n: English / 繁體中文
- Progress saved in browser localStorage
| # | World | Missions | Topics |
|---|---|---|---|
| 1 | ☕ Café & Restaurants | 6 | Order drinks, dine out, pay the bill |
| 2 | 6 | Airport, immigration, taxis, directions | |
| 3 | 🏨 Hotel & Accommodation | 6 | Check-in, room issues, room service |
| 4 | 🏥 Emergencies & Daily Life | 6 | Pharmacy, doctor, shopping, returns |
| 5 | 💼 Business & Workplace | 6 | Job interview, meetings, presentations, salary negotiation |
| 6 | 🎉 Social & Everyday | 6 | Meet neighbors, invite friends, small talk, complaints |
Visit noworneverev.github.io/speak-quest, enter your Google AI Studio API key, and start practicing.
git clone https://github.com/noworneverev/speak-quest.git
cd speak-quest
flutter pub get
flutter run -d chromeUse a local AI model instead of Gemini — works both locally and from the deployed GitHub Pages version.
# 1. Install Ollama (https://ollama.ai)
# 2. Download the model
ollama run gemma4
# 3. Allow CORS from GitHub Pages (if using the deployed version)
# On Windows (PowerShell):
$env:OLLAMA_ORIGINS="https://noworneverev.github.io"; ollama serve
# On macOS/Linux:
OLLAMA_ORIGINS=https://noworneverev.github.io ollama serve
# 4. In SpeakQuest Settings → enable "Use Local Ollama"Note: Chrome allows HTTPS pages to connect to
http://localhost, so the deployed GitHub Pages version can talk to your local Ollama instance.
| Framework | Flutter 3.7+ / Dart 3.7+ |
| State | Provider |
| AI | Gemini API / Ollama (OpenAI-compatible) |
| STT | Web Speech API |
| TTS | flutter_tts |
| Storage | SharedPreferences (localStorage on web) |
| CI/CD | GitHub Actions → GitHub Pages |
lib/
├── data/ # Mission definitions (36 missions)
├── l10n/ # Localization (en, zh)
├── models/ # ChatMessage, Mission, UserProgress, World
├── providers/ # AppState, Conversation, Progress
├── screens/ # Onboarding, WorldMap, Chapter, MissionBriefing,
│ # Conversation, Results, Profile, Settings
├── services/ # AiService (Gemini/Ollama), STT, TTS, Storage
├── theme/ # Design system & colors
└── widgets/ # MicButton, StarRating, AnimatedCounter, WorldCard
Pushing to main auto-deploys via GitHub Actions. To deploy manually:
flutter build web --release --base-href /speak-quest/MIT