- 5 min read
Six integration landings: the three-pattern template that fell out
Zapier, Slack, QuickBooks Online, Samsara, Geotab, John Deere — all six integration landing pages converged on the same three-pattern shape (minimal / middle / deep). Documenting the template so the next page is a 90-minute fill-in instead of a 4-hour invention.
engineeringops - 7 min read
50 iterations — what shipped, what we skipped, what's next
Fifty 5-minute iterations later: ~33 v1 routes, two machine specs (OpenAPI + AsyncAPI), three feed formats, 24 blog posts, 787 tests. The patterns that hardened, the non-choices gathered, what the cadence actually teaches.
engineering - 6 min read
The test architecture that fell out across 43 iterations
768 passing tests in two layers: contract tests next to every route that mock Prisma + auth, and DB-integration tests for the bugs unit tests structurally miss. What we deliberately don't have (browser E2E, snapshots, 100% coverage targets) and the one CI flake that taught us to dynamic-import route handlers inside test bodies.
engineering - 6 min read
How DirtFleet keeps your data separate from the next org's
Single Postgres, organizationId on every row, FK relations that respect tenancy, lib functions that take orgId first, and 404-not-403 on cross-tenant ids. The boring rules that actually keep multi-tenancy safe — plus the one bug that almost happened.
engineering - 7 min read
The five API conventions that stuck across 37 iterations (and three we let drift)
From one endpoint to 22 across 14 API iterations. The patterns that hardened by the third call: { ok } envelope, cursor pagination, cross-tenant 404, forgiving enums, idempotency keys. And what we deliberately let drift.
engineering - 5 min read
Why DirtFleet's rate limiter is 40 lines — and what we left for later
60 requests per minute per API key, sliding-window counter, in-memory, no Redis. Here's why each non-choice (token bucket, per-endpoint caps, burst quotas) was deliberate and what ships next when we scale.
engineering - 5 min read
Idempotency keys in practice: the four-line integrator pattern
Every write endpoint in DirtFleet's public API accepts an Idempotency-Key. Here's how we store the binding, why we don't expire it, what we deliberately skipped, and the four lines of integrator code that make distributed systems survivable.
engineeringops - 6 min read
The batch discipline: how DirtFleet ships a vertical slice per iteration
Schema + lib + REST + UI + tests, one commit, before the next iteration opens. The rule we don't break — and what it costs.
engineeringops - 5 min read
What shipped this sprint: an opinionated launch in 20 batches
A founder-facing meta-post: 20 batches over a single sprint shipped the maintenance + tools + work orders + OSHA prep + certified payroll + public API + webhooks + trust hub + the marketing site that wraps it. Here's the operating habit behind the cadence.
engineeringops - 5 min read
The 25-asset fleet: why this size is the sweet spot
Fleets of 5 don't need much software. Fleets of 500 need an ERP. Between them is the 25-asset fleet — the one DirtFleet was built for. Here's what changes at this size.
opsconstruction - 5 min read
What AI does (and doesn't do) in DirtFleet
We named 14 AI Modes in the framework doc and shipped 6 of them. Here's exactly what each one does, where the LLM is allowed to write to the database, and how we keep the system honest.
aiengineering - 5 min read
Integration-first: why DirtFleet leads with the API surface
Most fleet apps treat the public API as an afterthought. We treated it as the spine. Here's why every feature ships with REST endpoints + signed webhooks before the in-app UI is final.
engineeringops - 4 min read
What your accountant actually wants from a maintenance app
After two years sitting between fleet managers and their bookkeepers, here's what the accounting side wants when they ask for 'shop spend.' Spoiler: it's three CSV columns, not a dashboard.
opsconstruction - 4 min read
No data lock-in: every endpoint that lets you leave
We don't trap your data. Here's the full list of export endpoints — the GDPR archive, the per-asset CSV, the OSHA 300 export, certified payroll, work-order history — and what we promise post-cancellation.
engineeringops - 5 min read
Offline-first for the yard: how DirtFleet's outbox actually works
A 30-second hours log shouldn't fail because the cellular signal is missing. Here's the IndexedDB outbox + idempotency-key dedupe that makes drivers trust the app on the worst pour day.
engineeringops - 6 min read
Cost-per-hour is the only fleet metric most owners need
Asset utilization, MTBF, fuel efficiency — all useful. But cost-per-engine-hour is the one number that exposes the worst unit in the fleet at a glance. Here's how DirtFleet computes it and what to do with it.
opsconstruction - 5 min read
Spotting stuck meters and tool theft with hours-delta anomalies
After every hours log we z-score the delta against a 30-day rolling baseline. Most flags catch stuck meters; some catch unauthorized use. Here's the math + the false-positive guardrails.
aiopsengineering - 6 min read
The 7-state work-order playbook we shipped (and why)
OPEN → ASSIGNED → IN_PROGRESS → DONE with two side states for ON_HOLD and CANCELED. The state choice determines the whole shop's mental model — here's why we landed where we did.
opsengineering - 6 min read
Tool tracking without bloating the app: how the DirtFleet module works
Hand tools, power tools, kits, consumables — assigned to crews + trucks, scanned via QR/NFC for instant damage reports. Inside how we kept it simple.
opsengineering - 5 min read
Hour-based PM beats calendar PM in heavy-equipment fleets
Calendar reminders are easy to set up and easy to ignore. Engine-hour thresholds are harder to game and surface real risk. Here's the math.
opsconstruction