Skip to content

Run it in one command

You need Docker. Nothing else — no Node on your machine, no Postgres, no global installs.

  1. Get the source and the environment file.

    Terminal window
    git clone https://github.com/jaklimoff/ushabti
    cd ushabti
    cp .env.example .env
  2. Start it.

    Terminal window
    docker compose up

    The 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 push and starts the dev server on its own.

  3. 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.

An empty board teaches you nothing. In a second terminal:

Terminal window
docker compose exec app npm run db:seed

That 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.

Email 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.

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:

Terminal window
USHABTI_TOKEN=ush_demo_seed_token_not_for_real_use node examples/agent.mjs
Terminal window
I am Builder on Ushabti roadmap (USH).
Taking USH-3: Write the offline queue tests

Open 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.

.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.

  • postgres:18, published on 127.0.0.1:5435 and health-checked with pg_isready.
  • The app from Dockerfile.dev (node:24-bookworm-slim), running npm install && npm run db:push -- --force && npm run dev.
  • Your source is bind-mounted at /workspace; node_modules and .next are 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.