What DEMO_MODE=true changes
The LinkedIn, WhatsApp, email and R2 integrations are stored with placeholder credentials so their pages open. Nothing ever uses them. Playing a call recording does not work, because there is no audio behind it; transcripts and summaries show as normal.
Set it up
1
Create the deployment and its database
Follow Dokploy or Docker Compose as for any install, with a new, empty PostgreSQL. The database user must be a superuser (the default for the
postgres image): the clock rewrites the CRM’s history tables, which are append-only for everyone else.2
Set the environment
Next to the usual required variables:Leave every integration and AI key unset. Do not set up an external cron or Dokploy schedule jobs for this deployment.
3
Create the schema and seed it
The seed is not in the Docker image, so it runs from a checkout of the repository on your machine. Give the demo database a temporary External Port (on Dokploy: the database’s page), then, with the deployment’s own values:If the deployment has already started, it created the schema itself; then
bun run db:setup refuses (the database has tables) and you can skip it. Variables you export win over the repository’s .env.local. The key must match the deployment’s, because the seed encrypts the placeholder integrations with it. DEMO_MODE=true lets the seed write to a database that is not on localhost; it prints the host it writes to, and refuses a database that already holds a real organization. The seed takes a few seconds. Remove the external port afterwards.4
Open it
Open the deployment’s address. You land on Analytics, signed in, with the banner at the top.
Try it locally
DEMO_MODE, the same seed is an ordinary organization you can sign in to as [email protected] / demo-password-123 and change freely.
What the seed creates
scripts/db/seed-demo.ts runs the modules in scripts/db/demo/ against one fictional world (content.ts). Northwind, its team and every person are invented; the companies they prospect are real, well-known ones, so lead lists show real logos, but nobody there said anything shown. Phone numbers are in ranges reserved for fiction. Re-running it on a seeded database does nothing.