DATABASE_URL is the only thing it asks of its host. You do not invent a password,
run a migration, or configure anything before first boot — the app provisions its owner
account and applies its own migrations when it starts.
Docker
One command on any machine with Docker. PDF export works out of the box, because the
image carries the browser and fonts the renderer needs.
Railway
Five clicks, no terminal at all. One variable to type, and it is a reference the
platform autocompletes.
Locally
Node 20+ and a Postgres. Four commands.
What happens on first boot
1
Migrations apply themselves
npm start runs prisma migrate deploy before the server. There is no migration step
for you to run, now or after any future update.2
The owner account is created
One account, role
SUPER_ADMIN. It cannot be demoted or deleted, and there is exactly
one per instance.3
A password is generated and printed once
Read it from the logs, sign in, change your email and password from Settings.
4
You connect an assistant
Open Settings. It opens on Connections, with one already waiting.
Per-client steps →
Every environment variable
Only the first is required, and everything else has a working default.This list is short on purpose. Everything else an instance can be configured with lives
in the database and is changed from Admin → Configuration without a redeploy — including
the instance name, the public URL, email and billing.
What is in there →Note that the Public URL setting and the
PUBLIC_URL variable are not two ways to
do one thing. The setting is what invitation links and the Stripe webhook URL are built
from; the variable only fills in the sign-in line of the startup banner.Upgrading and backups
Both are one command with Docker, and automatic on a platform that redeploys from git. Upgrading, backups and restores →Locked out
SetRESET_OWNER_PASSWORD=1 on the app and restart. A fresh owner password is printed to
the logs. Remove the variable afterwards, or it resets on every boot.