Field services
Route and shift scheduling for a cleaning company
A cleaning company schedules staff across recurring client sites. Cleaners see today's sites in order on a phone, check in and out at each one, and report problems with a photo. The office sees who is late and which site is uncovered right now.
Automatically generated draft
Written by machine against our own engineering playbook. The company is invented; the decisions are the ones we would make on a real build. A reviewed blueprint goes further — nine sections, agreed line by line, and it is what the build is tested against.
Section 01 · What has to work
The office must have real-time visibility into which sites are currently being cleaned, which are uncovered, and which staff are running late.
Section 03 · Screens
Every screen, and what it is for.
- ›Today's Schedule — Cleaner sees assigned sites for the day in order. Must load instantly even with patchy signal.
- ›Site Visit Details — Cleaner views notes and checks in/out. Check-in action must feel instantaneous.
- ›Problem Report — Cleaner takes a photo and adds a note for a visit. Photo upload must work in the background.
- ›Live Operations Dashboard — Office sees all today's visits, their status, and alerts. Status updates must be real-time.
- ›Schedule Management — Office staff creates and assigns visits for clients and staff. Saving a weekly schedule must be instant.
Anything not on this list is not in version one. That is what keeps a fixed price fixed.
Section 04 · The data model
What it stores, and who can read a row.
User
uuid, name text, phone_number text, role enum(cleaner, office)
Access · Office staff read all users; cleaners read only their own profile.
ClientSite
uuid, name text, address text, entry_instructions text
Access · Office staff read all; cleaners read sites assigned to them.
Visit
uuid, client_site_id uuid, user_id uuid, scheduled_start timestamptz, actual_check_in timestamptz, actual_check_out timestamptz, status enum(scheduled, in_progress, completed, missed)
Access · Office staff read all; cleaners read their assigned visits.
ProblemReport
uuid, visit_id uuid, notes text, photo_url text, reported_at timestamptz
Access · Office staff read all; cleaners read reports they submitted.
Those access rules belong in the database, not in the screens. Someone who edits the address bar still cannot read a row that is not theirs — and the test that proves it blocks delivery if it fails.
Section 05 · States
scheduled → in_progress → completed | missed
Most scope arguments three weeks into a build are really arguments about a state nobody named at the start.
Section 06 · Where this breaks
What bites products like this one.
Poor connectivity at client sites prevents real-time check-ins and reports from cleaners.
App must queue actions offline and sync when connected, preserving original timestamps.
Large photo uploads from cleaner phones fail or consume too much mobile data.
Compress photos on the device before uploading; attempt background uploads over Wi-Fi first.
Time zone differences or daylight saving changes cause incorrect 'late' alerts.
Store all times in UTC. Capture device timezone on timestamps. Display in user's local zone.
Section 08 · Deliberately left out
What version one does not do.
- ×Automated recurring schedule generation. V1 requires office to manually create visits each week, confirming the core field workflow first.
- ×Historical performance reporting. V1 focuses on the live dashboard; analytics can be built after collecting several weeks of real data.
This is the section that protects the date, and the only place in the document where somebody says no. It is also why clients trust the rest of it.
Still open
What we would ask before quoting.
- By how many minutes must a cleaner be delayed for a visit to be flagged as 'late'?
- When a site is 'uncovered', what immediate action or notification should the system trigger for office staff?
- Does check-in/out data feed into payroll, requiring it to be tamper-resistant?
Half of this already exists
Fieldline
The field half of this is a solved problem: routes assigned, work captured with no signal and synced later, and an alert when nobody shows up.
It is one of our pre-built products: the code is handed over to you, adapted to your own wording and rules, and the rest of the specification above is built on top of it rather than from scratch.
Your product, not this one
Get this written for what you are actually building.
Describe it in a sentence and the generator returns the same sections for your own product. Free, no email, nothing saved to a list.
Next step
Find out if your idea fits in 10 working days.
Tell us what you want to build. We reply the same day with a straight yes, no, or here is what we would cut.