01Problem
Small and mid-size contractors already pay for cost-estimating software, but almost nothing covers what happens after the estimate: showing the client real progress and keeping evidence that cannot be quietly edited later.
02What I built
A multi-tenant SaaS grown from the evidence engine of CivMon, my owner-side platform: daily evidence, a hash-chained proof log with a head anchor, payment-milestone gates, red flags and a read-only view for the client.
03How it works
- Tenant isolation in the database itself. An organisation key on 105 tables and 135 row-level security policies with FORCE ROW LEVEL SECURITY. The tenant context is chosen on the server, set per connection at a single choke point and cleared before the connection returns to the pool; without a context the query fails closed.
- Tested as it runs. Runtime checks run the application as a database role with no superuser or RLS-bypass rights. PostgreSQL is used in development, CI and production, because earlier defects came from differences between SQLite test runs and PostgreSQL.
- CI on every pull request. API tests and a web build, with a PostgreSQL service.
- Cut to what contractors use. The admin menu went from 16 items to 7, other roles likewise.
04Results and scale
- End-to-end runtime check passed 18 of 18 steps: a trial organisation is created, its admin completes setup, isolation holds over HTTP and the proof log verifies.
- 52 commits and 27 merged pull requests between July and mid-September 2026; not deployed yet — being prepared for a first trial.
05Stack
- Node.js (Express)
- Next.js 16
- PostgreSQL (row-level security)
- Jest
- GitHub Actions
06Gallery
Screens come from a throwaway local database seeded with demo projects, running as a database role without superuser or RLS-bypass rights. Nothing here is customer data.

