An AI-powered French learning application featuring real-time voice conversation with a lifelike avatar tutor.
- Voice Conversation - Natural speech interaction using OpenAI Realtime API (GPT-4o)
- Lifelike Avatar - Beyond Presence avatar with real-time lip sync
- French Tutor - Meet Alessandra, your friendly French teacher
- Role-play Practice - Practice real-world scenarios (ordering at cafés, shopping, etc.)
- LiveKit Agents - Real-time audio/video infrastructure
- OpenAI Realtime API - Voice-to-voice AI conversation
- Beyond Presence - Avatar with synchronized lip movements
- Express.js - Token generation server
- Node.js 18+
- LiveKit Cloud account
- OpenAI API key (with Realtime API access)
- Beyond Presence API key
-
Clone the repository:
git clone https://github.com/parle-ai/french.git cd french -
Install dependencies:
npm install
-
Create
.envfile from example:cp .env.example .env
-
Fill in your API keys in
.env:LIVEKIT_URL- Your LiveKit Cloud WebSocket URLLIVEKIT_API_KEY- LiveKit API keyLIVEKIT_API_SECRET- LiveKit API secretOPENAI_API_KEY- OpenAI API keyBEY_API_KEY- Beyond Presence API key
Start both the server and agent in separate terminals:
Terminal 1 - Express Server:
npm startTerminal 2 - AI Agent:
npm run agentOpen http://localhost:8080 in your browser.
The app requires HTTPS for microphone access on mobile devices. Use Cloudflare Tunnel (recommended) or ngrok:
Option 1: Cloudflare Tunnel (recommended)
# Install cloudflared first:
# Ubuntu/Debian: sudo snap install cloudflared
# macOS: brew install cloudflared
cloudflared tunnel --url http://localhost:8080Option 2: ngrok
ngrok http 8080Use the generated HTTPS URL on your mobile device.
Run all services at once (in separate terminal windows):
# Terminal 1: Server
npm start
# Terminal 2: Agent
npm run agent
# Terminal 3: Tunnel (for mobile access)
cloudflared tunnel --url http://localhost:8080├── server.js # Express server (token generation)
├── agent.js # LiveKit Agent + Beyond Presence Avatar
├── public/
│ ├── index.html # Main page
│ └── demo.html # Demo page
├── .env.example # Environment variables template
└── package.json # Dependencies
MIT