What you get
Every account on your install is treated as Pro by default: no plans render, no paywall appears, and no monthly AI cap applies. You are the one paying for inference (via your own OpenRouter key), so nothing meters you. AI, food search, email, analytics, and authentication providers each switch on with their own environment variables and stay quiet without them — a deployment without anOPENROUTER_API_KEY still works, and any user can supply their own key in Settings to use the Coach on their own credential.
Services started
When installation finishes, two services are available on localhost:
To serve on a real domain, set
PUBLIC_HOST before the first run, or update CONVEX_CLOUD_ORIGIN, CONVEX_SITE_ORIGIN, and APP_URL in selfhost/.env and re-run ./install.sh. Full details are in the Install guide.
Prerequisites
Docker with Compose v2
Runs the backend, dashboard, datasource, and app. Compose v2 is required — the installer uses
docker compose (space, not hyphen).Bun 1.3.4 or newer
Required on the host to deploy the Convex functions during installation. Node.js 18+ also works as an alternative.
~10 GB disk (USDA)
The USDA FoodData Central catalog requires roughly 10 GB of disk space. The datasource starts empty and serves whatever you import.
~25 GB disk (USDA + OFF)
Add another ~15 GB if you also import the full Open Food Facts catalog. Partial imports are supported — you can load a slice first.
Xcode or Android Studio are only needed if you intend to build native iOS or Android apps. The PWA route requires no extra toolchain at all.
What runs in Docker
The installer brings up four containers, all defined inselfhost/docker-compose.yml:
- Convex backend — database, realtime sync, authentication, scheduled work, and every server-side integration.
- Convex dashboard — the admin UI at
http://127.0.0.1:6791where you inspect data, run queries, and manage environment variables. - Datasource — the self-hosted food and exercise API (Bun + SQLite), serving USDA, Open Food Facts, and wger data from whatever you’ve imported.
- App — a production build of the React web app, served at
http://127.0.0.1:8081.