Skip to main content
On any machine with Docker installed:
That is the whole procedure. It starts the app and a Postgres it talks to over a private network, applies migrations, creates your owner account and prints the password. Sign in at http://localhost:3000.
PDF export works out of the box here. The image carries the Chromium and the Times-metric fonts the renderer needs, which is the one thing the Railway path cannot give you.

Optional variables

Every one is optional. Put them in a .env file next to docker-compose.yml:

The image

Built from the repository on every push and published at ghcr.io/shifulaboratories/hired. Building it yourself is docker compose build.

Upgrading

Your data lives in a named volume and survives upgrades and restarts. Migrations apply themselves on the way up.

Backing up

That file is the whole instance: every account, every brain, every resume, every application. Treat it accordingly.

Putting it behind a domain

Point a reverse proxy at the app’s port and terminate TLS there. Then set Public URL in Admin → Configuration to the address people will actually use: invitation links and the Stripe webhook URL are built from it, and it takes effect on the next request with nothing to restart. Setting the PUBLIC_URL environment variable as well is worth it only for the startup banner, which is where a fresh owner password gets printed. Left unset, the app falls back to the address each request came in on — right until something sits in front of it.