You will need a Supabase project before starting. The free tier is enough to get going.
What you get
Docker Compose brings up 5 containers:- api — Express API server, identity resolution, signal ingestion
- worker — Background jobs: AI synthesis, live sync, ICP scoring
- frontend — Nginx serving the React SPA
- redis — Session state and job queue
- caddy — Automatic SSL and subdomain routing
Step 1: Get the files
Clone the repo or download just the production files:Step 2: Configure environment
nous.env and fill in:
Step 3: Run the database schema
Open your Supabase project → SQL Editor → paste and run the full contents ofsupabase/schema.sql.
This creates all tables, RLS policies, indexes, and enables vector and uuid-ossp.
Step 4: Point your DNS
Create two A records pointing to your server IP:| Record | Points to |
|---|---|
app.yourdomain.com | Your server IP |
api.yourdomain.com | Your server IP |
Step 5: Start
- Frontend →
https://app.yourdomain.com - API →
https://api.yourdomain.com
Step 6: Enable email auth in Supabase
Open your Supabase project → Authentication → Providers → Email and turn it on. Without this, no one can sign up. If you want Google sign-in, enable the Google provider in the same panel and set your OAuth client ID and secret.Step 7: Create your first user
Openhttps://app.yourdomain.com and click Sign up. Enter your email and password, confirm the OTP, and run through the onboarding flow. Your workspace is created at the end of onboarding.
Step 8: Create an API key
In the app, go to Settings → API Keys → Create Key. Use that key for the MCP server or any REST call. The MCP config looks like this.NOUS_API_URL to their own API domain. Otherwise the MCP server talks to Nous Cloud.
Step 9: Connect your first integration
Open Settings → Integrations and connect at least one signal source to start populating your customer graph.Updating
The images are built locally from source, so pull the latest code and rebuild:git pull fetches the new code, --build recompiles the images from it, and -d
restarts only the containers that changed (Redis and Caddy are left untouched). The
frontend is rebuilt too — Vite bakes the UI into a static bundle at build time, so a
plain restart won’t pick up frontend changes.