Platform·MMXXV — MMXXVI
waydot
An operating system for field-service companies
- Year
- MMXXV — MMXXVI
- Role
- Founder · sole engineer
- Live
- waydot.mx
I·Context
Field-service companies run on WhatsApp, spreadsheets and phone calls. A visit gets logged three times, payroll is worked out from memory and nobody can prove what happened on site.
II·What I did
- I
Designed and built all seven services: API, web console, Android app, optimisation engine, website, documentation and infrastructure.
- II
Documented every architecture decision, and each one names the files that implement it.
- III
Tests against real Postgres in CI; known bugs get their own tagged test until they're fixed.
Modules
- I
Operations & dispatch
A live map of tickets, technicians and SLA clocks.
- II
Field execution
Checklists, evidence and signatures that work without signal.
- III
Workforce & finance
Clock-ins, visits and mileage straight into payroll.
- IV
Assets & service networks
Who has every unit, where, and since when.
- V
Quality, safety & trust
A SHA-256 chained audit log nobody can rewrite.
How it is built
- Row-level isolation
- One database with forced row-level security in Postgres. The active company travels with every connection and every queued job; without it, a query returns nothing rather than someone else's data.
- Offline sync
- The app stores each change with its own id and the version it saw. The server locks the record, compares versions and keeps the outcome: a retry gets the same answer and is never applied twice. On a conflict it sends back its copy so the phone can catch up.
- Chained audit log
- Each entry carries the SHA-256 of its content and of the previous hash, per company, written inside the same transaction as the change and serialised with a Postgres lock. A verifier walks the chain and names the first broken link.
- Routing and risk
- A Rust engine calls OR-Tools through a C++ bridge to build routes with time and capacity per technician. Two LightGBM models trained in Rust, no Python: one calibrates the risk of missing an SLA, the other gives a job's duration as a range, not a guess.
- AI that asks
- Tools that write pause on the exact call, arguments and all, until a person approves it. Asking the model to confirm is something it can skip; this isn't. And they act with the user's permissions, never more.
- Payroll
- It only reads what was approved: signed hours, granted leave, claims and raises in force. Every line names the record it came from; a mid-period raise splits the period, and income tax is withheld.
- Evidence that doesn't change
- Task lists are copied when assigned, so editing a template never rewrites past jobs. Answers are append-only: a correction is a new answer.
- Infrastructure
- Terraform on DigitalOcean and Cloudflare. The server only accepts traffic from Cloudflare's network; files in R2, deploys by image tag with a one-command rollback.
III·What I learned
“Everything ten years taught me, in one platform.”
Tools
Laravel 13·
Next work
Compusof Tools
A field log that works without signal