Time, projects, and invoices for consultancies.

Consultainer tracks the hours your team works for each client and turns them into invoices — on your own server, from a single docker compose file. Open source, no per-seat pricing, no data leaving your network.

Consultainer dashboard showing hours this week, unbilled time, and outstanding invoices

Running in a few minutes

Postgres, the app, and a small scheduler for recurring invoices, reminders and syncs — all in one compose file.

  • Open it in a browser and create your organization and admin account. No email setup required.
  • Sign in with your own identity provider — Authentik, Okta, Entra ID, Keycloak, any OIDC.
  • Multi-arch images for amd64 and arm64. Upgrades are docker compose pull.
  • Nightly database backups built in, optionally copied to your S3 bucket. The self-hosting guide covers HTTPS, upgrades and restore.
# grab the compose file and example settings
curl -O https://raw.githubusercontent.com/Armistice-Group/retainer/main/docker-compose.yml
curl -o .env https://raw.githubusercontent.com/Armistice-Group/retainer/main/.env.example

# fill in the Required section of .env, then
docker compose up -d

What it does

Built for engineering, security, and design consultancies billing by the hour, flat fee, or milestone.

Track time against real work

Log hours by hand, run a timer on any task, or turn your calendar's meetings into time — each with a suggested project. See your week at a glance, or the whole team's, with optional weekly approval.

Weekly time log grouped by day

Projects that know their budget

Per-person bill rates, hour budgets that alert you at 80%, tasks synced both ways with Linear, milestones, and expenses — with invoiced-to-date and profit always in view.

Project page with billing summary, hours budget, and team rates

Invoices from unbilled work, or a set amount

Pull unbilled time, completed milestones, and expenses into an invoice in a few clicks, or bill a set fee or deposit. Email clients a link to view and pay it, with the PDF and timesheet attached if they want them — and know when they open it. Take payment through Stripe or Mercury, push to QuickBooks.

Invoice list with paid, sent, overdue, and draft invoices

Billing on a schedule

Put a client on a weekly, bi-weekly, or monthly cycle and their invoice drafts itself. Retainers bill a fixed amount on their own schedule, and overdue reminders go out on their own.

Client page with projects, invoices, and a bi-weekly billing cycle

A month at a small consultancy

Northwind Labs is made up: four people, five clients, a mix of hourly, flat-fee and retainer work. Here's how a month of it goes in Consultainer. Every screen is the real app on the demo data that ships in the repo, so you can load it and click around yourself.

Email settings panel with SMTP chosen and Postmark's server filled in
Day 1 · Setup

Email in two minutes, from the browser

Maya, the owner, picks Resend or any SMTP server (Postmark, SES, Google Workspace…), pastes the settings and sends herself a test, or a sample of the invoice email clients get. No config files, no restart.

New invoice form billing a set amount as a deposit
Day 2 · Kickoff

Bill the deposit before any work is logged

Atlas Robotics signs phase 2. Maya bills 50% up front: one line, $9,000, a note saying what it covers. Ticked as a deposit, the payment becomes Atlas's credit for the phase 2 invoices.

Email invoice dialog with the PDF attached and the timesheet included
Day 30 · Invoicing

Their accounts team wants the PDF and a timesheet

Atlas's AP team files PDFs and checks hours. Maya attaches the PDF and includes the timesheet: every entry's date, start and end time, who did it and what. Ken still gets the link to pay online.

Client-facing invoice page with payment details and a time detail table
Day 31 · The client's side

What Atlas sees when they open it

No login: the invoice, how to pay, and the timesheet, with any screenshots the team marked as evidence. Maya sees under Activity that Ken opened the email, the page and the PDF.

Phone view with today's hours, a timer and recent entries
Every day

Log time from your phone

Sam, a contractor, installs the phone app from Chrome, starts a timer on Fleet Dashboard, and shares a screenshot straight into a time entry as evidence.

Reports page with revenue and hours
Month end

See where the month landed

Hours, invoiced, received and outstanding, utilization by person and profit by project, with each table a CSV away, for Maya's monthly review.

Works with your agent, too

A REST API and a built-in MCP server let Claude, Cursor, or any agent log time and draft invoices with a personal API key — the same permissions as the person it acts for.