Run it in one command
You need Docker. Nothing else — no Node on your machine, no Postgres, no global installs.
-
Get the source and the environment file.
Terminal window git clone https://github.com/jaklimoff/ushabticd ushabticp .env.example .env -
Start it.
Terminal window docker compose upThe first run builds the image and installs the packages, so give it a minute. The app container installs, writes the database schema with
drizzle-kit pushand starts the dev server on its own. -
Open it. The board is at http://localhost:3050. Register an account and you have an empty project with seven properties and two views already in it.
Something to look at straight away
Section titled “Something to look at straight away”An empty board teaches you nothing. In a second terminal:
docker compose exec app npm run db:seedThat creates a filled demo project, two accounts, and an agent with a run already open, so the board shows what a machine at work actually looks like.
| Password | |
|---|---|
demo@ushabti.local |
ushabti-demo |
friend@ushabti.local |
ushabti-demo |
Sign in as each one in two browser windows and move a card. The other window follows in about a second, with no reload.
Watch a machine take a card
Section titled “Watch a machine take a card”The seed also creates an agent called Builder with a fixed token. Give it to the example agent and watch the card grow a strip along the bottom:
USHABTI_TOKEN=ush_demo_seed_token_not_for_real_use node examples/agent.mjsI am Builder on Ushabti roadmap (USH).Taking USH-3: Write the offline queue testsOpen that card while it runs. The panel grows an Agent tab with a pulsing dot, holding the plan and the run log. Press Pause and watch the agent answer on its next report.
Other ways to run it
Section titled “Other ways to run it”.devcontainer/devcontainer.json points at the same compose file. Reopen in Container puts your
editor inside the app service, with ports 3050 and 5432 forwarded.
You need PostgreSQL 14 or later. Point DATABASE_URL at it, then:
npm installnpm run db:migratenpm run devNote that the compose files pin PostgreSQL 18, so that is the version actually tested.
Keep the db service and run the app on your host:
docker compose up dbDATABASE_URL=postgres://ushabti:ushabti@localhost:5435/ushabti npm run devThe compose file publishes Postgres on 127.0.0.1:5435, not 5432, so it does not fight a database
you already run.
What the dev setup is doing
Section titled “What the dev setup is doing”postgres:18, published on127.0.0.1:5435and health-checked withpg_isready.- The app from
Dockerfile.dev(node:24-bookworm-slim), runningnpm install && npm run db:push -- --force && npm run dev. - Your source is bind-mounted at
/workspace;node_modulesand.nextare named volumes, so they do not fight your host. - File-watch polling is on, so hot reload works on macOS and Windows.
Development uses drizzle-kit push, which follows src/db/schema.ts immediately. Migrations are
for self-hosted installs, and you still commit one with any schema change — see
contributing.