Practice English for real situations — and help others do the same.
Felingo is an open source, mobile-first web app for practicing English phrases, dialogues, and interview-style answers. It is useful for performers and teams, or anyone who wants calmer, more natural English when it matters.
The scenarios lean toward live events (fans, press, backstage), but content and code are for everyone. Bugfixes, copy, translations, a11y, and small features are all welcome.
Live site: felingo.se
Felingo walks you through themed sessions: phrases, multiple-choice interview practice, backstage vocabulary, and a full-screen “panic” mode for quick phrases.
Core concept: Pick → Play → Speak
- Talk to Fans — Common phrases and responses for fan interactions
- Interview Mode — Press-style Q&A with multiple-choice responses
- Backstage English — Technical and logistical vocabulary behind the scenes
- Panic Mode — Full-screen emergency phrases when you need help right now
- Audio & pronunciation — Pre-generated MP3 where deployed (optional ElevenLabs pipeline in
scripts/), plus Web Speech API fallback in supported browsers - Favorites — Save phrases for quick review
- Offline support — Installable PWA; works without a network after first load
- No accounts — Open the site and start
- React 19 + TypeScript
- Vite 8
- Tailwind CSS 4
- Zustand
- Framer Motion
- Vitest + React Testing Library
- PWA (service worker + manifest)
# Install dependencies
npm install
# Start dev server
npm run dev
# Build for production
npm run build
# Optional: pre-generate MP3s in public/audio/ (needs .env — see .env.example)
# npm run generate:tts
# MP3s are gitignored; copy them to your host when you deploy.
# Tests
npm test
# Lint & type-check
npm run lint
npm run typecheck
# Format (CI runs format:check — run this before pushing)
npm run format
npm run format:checkTypical flow: build on GitHub, upload dist/ — no manual FTP on every release.
-
VPS / Linux with SSH (recommended):
.github/workflows/deploy.ymlrunsnpm run buildand uploadsdist/with tar over SSH (works on Inleed and other hosts that lack server-sidersync). Add secrets under Settings → Secrets and variables → Actions (listed in the workflow file). OptionalDEPLOY_SSH_PORT: Inleed webbhotell often uses 2020 (default is 22). ForSSH_KNOWN_HOSTS, use the same port, e.g.ssh-keyscan -p 2020 -H ns14.inleed.net. Point the vhost document root atDEPLOY_PATH. By default the workflow is manual (Actions → Deploy → Run workflow); after secrets work, uncomment theworkflow_runblock in the YAML to deploy automatically whenever CI passes onmain. -
FTP/SFTP-only hosting: use an action such as FTP-Deploy-Action with the same build step, then upload
dist/. -
Fully managed hosting: Netlify, Cloudflare Pages, or Vercel connect to GitHub in a few clicks and build + host on every push — no server to maintain.
Audio: public/audio/*.mp3 is not in Git. Copy them once (rsync/scp) to the same paths on the server, or run npm run generate:tts there with API keys.
src/
├── components/
│ ├── ui/ # Reusable primitives (Button, Badge)
│ ├── cards/ # PhraseCard, DialogueCard, ChoiceCard, FunCard
│ ├── layout/ # Header, Navigation
│ └── session/ # SessionPlayer, ProgressIndicator
├── pages/ # HomePage, SessionPage, PanicPage, FavoritesPage
├── data/ # JSON content + TypeScript schemas
├── hooks/ # useSession, useSpeech, useLocalStorage
├── store/ # Zustand store
└── lib/ # Utilities (shuffle, content-loader)
This repo is public on purpose: we want issues, pull requests, and discussion.
- Fork the repository and create a branch (
feature/…orfix/…). - Keep CI green:
npm run lint,npm run typecheck,npm test, andnpm run format:check(Prettier is enforced in GitHub Actions). - Open a pull request with a short description of the change. For larger work, an issue first helps align direction.
- Be constructive and respectful — thank you for helping improve Felingo.