api.happy-next.com. This gives you complete control over your data and infrastructure.
Happy supports two modes:
- Hosted (default) — Clients use
https://api.happy-next.comout of the box - Self-hosted — Run your own
happy-server,happy-voice, and supporting services with Docker Compose
Requirements
- Docker + Docker Compose
- A LiveKit deployment (not included in
docker-compose.yml) — for voice features- You’ll need
LIVEKIT_URL,LIVEKIT_WS_URL,LIVEKIT_API_KEY,LIVEKIT_API_SECRET
- You’ll need
- API keys for voice providers (if using voice)
OPENAI_API_KEY,CARTESIA_API_KEY
Quickstart
- Clone the repository:
- Create your environment file:
-
Edit
.envand fill in the required values. At minimum:HANDY_MASTER_SECRET— Generate a random 64+ character stringPOSTGRES_*— Database credentialsS3_*— Or use the MinIO defaultsLIVEKIT_*+ voice API keys — If using voice features
- Start the stack:
- Apply database migrations (first run only):
- Open the web app at
http://localhost:3030.
Services
The Docker Compose stack includes:| Service | Port | Description |
|---|---|---|
happy-app | 3030 | Web app (Nginx) |
happy-server | 3031 | API server (Node.js) |
happy-voice | 3040 | Voice gateway (Node.js) |
minio | 3050 | S3-compatible file storage |
postgres | 5432 | Database |
redis | 6379 | Caching and Socket.IO adapter |
Connecting the CLI
The CLI defaults to the hosted API. For self-hosting, set environment variables:Connecting the mobile app
- Development builds: Set
EXPO_PUBLIC_HAPPY_SERVER_URLwhen starting Expo, or use the in-app server settings screen - Production builds: Use the in-app server settings screen to set a custom server URL
S3 / MinIO notes
S3_PUBLIC_URL must be reachable by clients (browser and mobile), not just Docker containers.
- Local: MinIO is exposed at
http://localhost:3050, soS3_PUBLIC_URL=http://localhost:3050works - Remote: Use a real S3-compatible endpoint with a public URL matching your TLS/host setup
Remote access
If accessing from another device (LAN or internet), avoid hard-codedlocalhost URLs:
- Put the web app, API, and voice gateway behind domains with TLS
- Set
EXPO_PUBLIC_HAPPY_SERVER_URLandEXPO_PUBLIC_VOICE_BASE_URLto those public origins - Set
APP_URLto your web origin