A field service management platform for an IT services company — tickets, technician dispatch, on-site documentation and billing preparation on a single surface, so the paperwork is a by-product of the work instead of a second job after it.
A field technician finishes a job and the evidence of it lives in their head, their phone and a paper form. By the time it reaches billing it has been re-keyed twice and lost its detail. Dispatchers cannot see current state, finance cannot see what is billable, and the customer gets an invoice nobody can substantiate.
A ten-status ticket workflow that carries a job from New through Assigned, In Progress and Completed to Ready for Billing, with on-site documentation captured against the ticket itself and promoted into a signed work order. A four-role security matrix — admin, dispatcher, technician, finance — means each seat sees exactly its own slice: technicians log materials without ever seeing their cost, dispatchers and finance see the money.
Next.js 14 and TypeScript on Supabase, with row-level security enforcing the role matrix at the database rather than in the UI. Multi-channel notifications in-app, push and email. Support for multi-day projects on a single ticket. 587 tests passing at the pre-launch validation gate.
Field service software usually fails in the same place: it models the office and treats the van as an afterthought. The technician gets a form to fill in after the fact, so the record is always a reconstruction.
This inverts it. The ticket is the unit of work and the unit of evidence at the same time — what the technician captures on site is what dispatch sees live and what finance bills from. Nothing is re-entered, so nothing drifts.
The dispatcher's morning in one screen. Four counters carry the state of the business: 61 open, 5 in progress, 4 awaiting validation, 2 ready for billing. Below them the unassigned queue lists every job nobody owns yet, with its number, priority badge, client and age, and a single Assign action.
The ten-status workflow drives every count and badge, so the dashboard is never edited by hand. A job moves state and the numbers move with it.
One hundred and three tickets in a dense table: number, title with site, client, status pill, priority pill, technician, scheduled slot. Filters for client, technician, status, priority and a date range sit above it, with CSV export and a New Ticket action in the corner.
A dispatcher reads the whole day without opening a ticket. A technician's name, a client's site and a time slot are enough to spot the conflict before it happens.
Fourteen technicians with their contact details, employment type, skills, zones, availability and rate per hour. Search by name or email, filter by type and availability. Employees and internal staff share the list, since dispatch does not care about payroll.
The four-role permission matrix decides who sees the rate column. A technician sees the roster; only admin and management see money.
Six tiles: total tickets, completed, average resolution, total hours, total revenue, average utilisation. Two breakdowns underneath, tickets by status and tickets by service type, each a ranked bar list with counts and percentages. Presets for this week, this month, last month, last three months, or a custom range.
The report is a query over the same tickets, not a second data set. Export CSV hands the raw rows to whoever wants a spreadsheet.
Tickets that reached the billing state, one row each: client, technician, status, labour at the technician's rate, materials, total before tax, VAT at 20 percent, total with tax, and a Mark billed action. The export button speaks Chorus Pro, the French public-sector invoicing platform.
Hours come from the ticket, the rate from the roster, materials from the parts list. The invoice is a view over facts the job already recorded.
Sector: IT field services · Role: Architecture · Design · Build · Stack: Next.js 14 · TypeScript · Supabase with row-level security
Designed, engineered & shipped by Roderic Andrews — Product Designer & Design Engineer
Everything on this page — the engineering, the design, the positioning — was built by one operator. That's the offer: a product designer who writes the code and wires the growth. No hand-offs, no telephone game, no agency margin.
Design · Engineering · Marketing · Intelligence · Video · Growth
I'll walk you through how it was built — live, with your questions.
Thirty minutes. The build, end to end. Replies same day.