Operations platform · 2026 · in progress
Dark Horse Safety
An admin platform for a safety operations business — CRM, operations, safety, HR and fleet in one dark-themed dashboard over a NestJS API. Currently in progress.
Overview
Dark Horse runs safety operations, and the work currently lives across whatever tools each department picked. The platform pulls CRM, operations, safety, HR and fleet into one admin surface backed by a single API.
A Turborepo split along strict lines: `apps/` holds only deployable things (the Next.js dashboard and the NestJS API), `packages/` holds everything shared (`ui`, `theme`, `types`, `api-client`, `assets`), and `tooling/` holds config. Apps never import from other apps, so a shortcut between CRM and Fleet is not available even under deadline.
Role
Full-stack — dashboard and API
Timeline
2026 · in progress
Stack
The challenge
What made it hard
Five domains in one dashboard is how admin tools become five inconsistent apps sharing a sidebar. Keeping them one product means the shared layer has to be real, not aspirational.
It is an internal tool holding operational and personnel data, so the account lifecycle — activation, lockout, reset, verification — is part of the product rather than an afterthought bolted on at the end.
Approach
How it was built
The look is a single design token set in `@dark-horse-safety/theme` — a near-black surface stack with white primary actions and one red accent — imported once by Tailwind v4 rather than re-declared per app.
Auth is NestJS and Prisma over Postgres with the full account lifecycle built out: activation, email verification, password reset with its own check-inbox and set-new steps, and an explicit account-locked state.
Outcome
What shipped
In progress. The dashboard shell, design system and authentication are built; CRM, operations, safety, HR and fleet are being filled in.
Want something like this?
Tell me what you're building and I'll tell you honestly how I'd approach it. Replies within hours.
Prefer email? Write to me directly at — it reaches the same inbox.