Field services
Patrol checkpoints for a security company
Guards scan NFC tags at checkpoints during a patrol to prove they were there at that time. Missed checkpoints alert the control room immediately. Clients get a monthly report of every patrol at their site.
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
Guards must scan NFC tags reliably in the field so missed checkpoints trigger instant control room alerts.
Section 03 · Screens
Every screen, and what it is for.
- ›Patrol Execution — Guard, scans NFC tags along the active route, instant tap registration.
- ›Active Route — Guard, views remaining checkpoints and countdown timer, instant sync.
- ›Control Room Live Map — Dispatcher, monitors ongoing patrols and missed check alerts, instant alert delivery.
- ›Client Portal — Site Client, views monthly PDF patrol reports, instant report generation.
- ›Checkpoint Manager — Admin, assigns NFC UIDs to physical locations, instant save.
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.
patrol
id uuid, site_id uuid, guard_id uuid, status enum(assigned, active, completed, missed), started_at timestamptz, completed_at timestamptz
Access · Guards read assigned rows; Dispatchers and Clients read site rows.
checkpoint_scan
id uuid, patrol_id uuid, checkpoint_id uuid, scanned_at timestamptz, status enum(verified, missed), device_gps jsonb
Access · Guards read own scans; Dispatchers and Clients read site scans.
checkpoint
id uuid, site_id uuid, nfc_tag_uid text, name text, sequence_order int, expected_interval_minutes int
Access · Guards read assigned site checkpoints; Admins read and write all.
alert
id uuid, patrol_id uuid, checkpoint_id uuid, triggered_at timestamptz, resolved_at timestamptz, status enum(active, acknowledged)
Access · Dispatchers read all active alerts; Guards read none.
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
assigned → active → 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.
Guards lose cellular data connection mid-patrol in basement levels or dead zones.
Queue NFC scans locally in SQLite and sync payload in batch upon reconnection with original timestamptz.
NFC tags are physically damaged, painted over, or peeled off by malicious actors.
Support manual GPS override pin drop in app with required supervisor audit log justification.
Section 08 · Deliberately left out
What version one does not do.
- ×What we would leave out of v1 — live GPS breadcrumb tracking between checkpoints, because it drains battery and NFC scans prove arrival.
- ×What we would leave out of v1 — two-way in-app guard messaging, because phone calls and SMS remain faster in emergencies.
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.
- What happens when a guard scans checkpoints out of sequence on purpose?
- Should missed checkpoint alerts fire based on elapsed patrol time or a strict calendar schedule?
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.