Skip to main content
Self-hosting OneRep means running the entire stack — the Convex backend, the food datasource, and the web app — on hardware you control. One script clones secrets, wires up the backend, and starts every service. When it finishes, you have a fully functional fitness app with no external dependencies beyond the optional integrations you choose to enable.

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 an OPENROUTER_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 in selfhost/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:6791 where 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.