All work

Platform·MMXXV — MMXXVI

waydot

An operating system for field-service companies

Year
MMXXV — MMXXVI
Role
Founder · sole engineer

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

  1. I

    Designed and built all seven services: API, web console, Android app, optimisation engine, website, documentation and infrastructure.

  2. II

    Documented every architecture decision, and each one names the files that implement it.

  3. III

    Tests against real Postgres in CI; known bugs get their own tagged test until they're fixed.

Modules

  1. I

    Operations & dispatch

    A live map of tickets, technicians and SLA clocks.

  2. II

    Field execution

    Checklists, evidence and signatures that work without signal.

  3. III

    Workforce & finance

    Clock-ins, visits and mileage straight into payroll.

  4. IV

    Assets & service networks

    Who has every unit, where, and since when.

  5. 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·Vue 3·Rust·Capacitor·PostgreSQL·Terraform

Next work

Compusof Tools

A field log that works without signal

Contact

Your details are only used to reply to you. Read the privacy notice.