We've successfully forked Happy and added support for custom voice API providers:
- Environment Variable Support - Can now use your own ElevenLabs API keys
- Abstraction Layer Ready - Foundation for OpenAI Realtime API integration
- Backward Compatible - Still works with default Happy agents if no keys provided
- Sign up at https://elevenlabs.io ($5/month starter plan)
- Go to "AI Agents" → "Create an AI agent"
- Configure your agent:
- Name: "Happy Assistant" (or your preference)
- Voice: Choose any voice you like
- First message: "Hi, Happy here!"
- Knowledge base: Leave default
- Copy the agent ID (looks like:
agent_xxxxxxxxxxxxxxxxxxxxx) - Get your API key from Profile → API Keys
cd /home/brett/happy-fork-deployment
cp .env.example .env
nano .env # Add your ElevenLabs credentials# Quick test
docker-compose up
# Or deploy to Dokploy
dokploy app deploy --project happy-assistant- Local: http://localhost:8082
- Tailnet: http://100.119.254.98:8082
- Custom domain: http://happy.your-tailnet.ts.net
-
Your Own ElevenLabs Account
- No rate limiting from shared account
- Reliable voice service
- Your own usage limits
-
Privacy
- Voice data through your account only
- No sharing with other users
-
Customization Ready
- Modify agent personality
- Add custom prompts
- Switch to OpenAI when ready
Your iPhone Safari → Tailnet → Dokploy → Happy Web (your fork)
↓
Your ElevenLabs Agent
When you're ready to add OpenAI Realtime API:
- We've already created the abstraction layer (
VoiceProvider.ts) - Need to implement
OpenAIProvider.ts - Update environment to use
EXPO_PUBLIC_VOICE_PROVIDER=openai
- Check your ElevenLabs dashboard for usage
- Verify agent ID is correct (no spaces)
- Check browser console for errors
- Make sure microphone permissions granted
# Clean rebuild
docker-compose down -v
docker-compose build --no-cache
docker-compose up- Verify Tailscale is connected
- Check Dokploy is running: http://100.119.254.98:3000
- Try direct Docker access: http://localhost:8082
- ElevenLabs Starter: $5/month for 30 minutes
- ElevenLabs Creator: $22/month for 100 minutes
- OpenAI Realtime: ~$0.06/minute (when implemented)
happy-fork/
├── sources/realtime/
│ ├── RealtimeVoiceSession.tsx # Mobile (modified)
│ ├── RealtimeVoiceSession.web.tsx # Web (modified)
│ ├── VoiceProvider.ts # New abstraction layer
│ └── providers/
│ ├── ElevenLabsProvider.ts # ElevenLabs implementation
│ └── OpenAIProvider.ts # Future OpenAI implementation
The Happy agent context is sent via the initialConversationContext in voiceHooks.ts.
You can modify this to customize the agent's behavior:
// Line 132 in voiceHooks.ts
prompt += 'THIS IS AN ACTIVE SESSION: \n\n' + formatSessionFull(...)- Make changes in your fork
- Push to GitHub
- Rebuild Docker image
- Test on Tailnet
- Iterate quickly without iOS builds!
- Happy Issues: https://github.com/slopus/happy/issues
- Your Fork: https://github.com/LymanBE/happy-fork
- Original Issue #68: Feature request for custom API keys# Deployed via Dokploy - 2025-09-02T00:23:01+00:00