← Blog

Reference design

Agent-run portable toilet & dumpster routes: a ZenSched reference design

• ZenSched Team

The superintendent calls Tuesday. “Were you at Lot 12, and did you hit all four loos?” You call Luis. He is on the next stop. The route sheet might say 25 units, one is overflowing, and ServiceCore is $450–750 whether the dumpster haul happened or not. What if an AI assistant could roll next week’s due units, put a GPS check-in on the driver’s phone at 8800 Washington Ave, capture serviced yes/no, issues, and a photo of each unit on a Service Proof form, and answer “who missed a weekly this week” — without putting gate codes, job-box combos, or customer contact detail into a vendor cloud, and without pretending to be ServiceCore, WasteTrack, or your official POTW / waste transfer ticket?

This reference design shows how a 1–5 truck portable-toilet and dumpster route shop can deploy an AI agent using ZenSched as the live schedule of record (with a Service Proof form on the phone) and a local SQLite database for customers, units, cadence, service-log extracts, and invoices.

Honest framing: proof-of-service, not a waste ticket or yard inventory system

Read this before you clone the kit.

  • The Service Proof is not your official septage / POTW trip ticket, UK waste transfer note, or AU EPA docket. US 40 CFR 503, UK duty-of-care WTNs (and Digital Waste Tracking from 2026/2027), and AU state EPA conditions specify fields, authorised facilities, retention, and inspector access on their forms. The kit collects what the driver already writes — serviced, issues, notes, unit photo — useful proof for a GC or event client, not the system of record an EPA or Environment Agency auditor expects.
  • It is not ServiceCore, WasteTrack, Docket, or SiteRento. No unit-inventory map, no barcode yard count, no route optimizer, no QuickBooks billing engine, no customer portal. Keep those where they are.
  • Gate codes, job-box combos, superintendent cell numbers, and dogs stay only in local SQLite (units.access_notes). ZenSched locations are labeled by street address — 8800 FM 1826, Austin — not by customer name or access detail.
  • Unit photos can carry a burned-in stamp (opt-in). Set "stamp_photos": true on the photo field in form_create / form_update. The kit enables this on the Service Proof unit photo field.
  • There is no signature field on purpose. On ZenSched a signature replaces Submit — submitting the form must not look like the driver or customer signed a legal waste document.
  • Android on Google Play; iOS on the App Store.

The kit’s SKILL.md makes that split a hard rule the AI will refuse to break.

The problem: “were you there?” and “did you hit every unit?”

Small porta-potty and roll-off shops already have a stack: ServiceCore or WasteTrack if they bought the office suite; otherwise paper route sheets, a yard whiteboard of serials, “serviced” texts with a blurry photo, and a landfill ticket in the truck visor. When a GC, event client, or slip-and-fall attorney asks for proof, the evidence is a text thread and a binder.

The weekly loop is the same whether you drive the vacuum truck or dispatch three techs:

  1. Did Luis service all four loos at Rio Grande Tuesday?
  2. Which units tipped, leaked, or need an extra pump?
  3. Dumpster haul on the same jobsite — same proof, same form.
  4. Paying drivers without reconstructing paper route sheets every Friday.
  5. Coverage when a truck is down mid-week.

Not on that list: consumer booking widgets, 40-truck routing, or door-to-door funnels.

The solution: split responsibility between ZenSched and local data

This architecture divides work cleanly:

  • ZenSched: Live site pin (one per place — several units at the same address share one pin), GPS-verified check-in and check-out (geofence enforced via policy, not per location), driver app + push, one Service Proof form per stop (serviced yes/no, up to 2 unit photos, issues, notes). ZenSched never stores gate codes or customer billing notes.
  • Local SQLite database: Customers, units (toilet / dumpster), service schedules (weekly / biweekly / monthly / on-demand), drivers, completed jobs with proof summaries, service-log extract, invoices. Links to ZenSched location, event, and shift IDs. After one metered form read, punches and proof summaries are cached locally.

The agent orchestrates both: it reads which units are due from units_due, creates shifts on ZenSched labeled by site, and writes verified arrival plus Service Proof answers back into SQLite for billing and the owner’s extract.

Split responsibility architecture diagram showing ZenSched on the left managing the live site visit and GPS verification, SQLite on the right managing units and service schedules, with the AI agent orchestrating both

Privacy: gate codes never cross

Everything sensitive lives only in local tables: customers.billing_notes, units.access_notes (gate code, job-box combo, superintendent cell, dogs on the west fence). ZenSched receives the street address for the GPS pin and the Service Proof answers — never a gate code in a location title, never a customer surname in an event name. If you ask the agent to put access notes into ZenSched, it should refuse.

The site address is geocoded (required for geofencing). Unit photos live on ZenSched as part of the form.

Day-to-day workflow

A typical route week looks like this:

  1. You to agent (plain English): “Schedule Luis at 8800 Washington every Tuesday 6:30–7:30 through September.”
  2. Agent reads SQLite: units_due for the next 7 days by driver and route.
  3. Agent creates shifts on ZenSched: One location_create per new place ($0.03 geocode; second unit at same address reuses the pin), rolling event (≤60 days, renewed automatically), form_create once for the Service Proof form, form_assign, shift_create per scheduled stop. Luis gets a push.
  4. The driver does the work: Open the ZenSched app, GPS check-in at the pin, fill the Service Proof (serviced, unit photo, issues, notes), check-out. Repeat per unit or per site visit depending on how you schedule.
  5. Operations: “Which units tipped this week?” “Who missed a weekly?” “Was Luis at 8800 Washington Tuesday?” Agent answers from SQLite after one metered read.
  6. Money: Invoices from local job summaries. Plain-text invoices under customer terms. Official landfill / POTW / WTN filing stays in your binder or ServiceCore / WasteTrack.

No dashboards. No asking you to run SQL. Talk to the agent.

Portable toilet and dumpster route workflow from units-due list through GPS check-in, Service Proof form, and customer invoice

Service Proof form on the phone

The driver opens the ZenSched mobile app, checks in at the drop site, then fills the Service Proof before leaving:

  • Serviced (Yes / No)
  • Unit photo (up to 2, with optional "stamp_photos": true)
  • Issues (None / Tip / Leak / Needs pump / Other)
  • Notes

Dumpster hauls reuse the same form — not a separate haul ticket. Extra pumps and one-off event drops follow the same pattern.

Setup summary

Getting started takes about 15 minutes:

  1. Install an MCP client: Claude Desktop, Cursor, or Muse Code.
  2. Connect ZenSched MCP: Add https://mcp.zensched.com/mcp to your MCP config.
  3. Connect easy-sqlite-mcp: Point SQLITE_PATH at a local portables-ops.db on an encrypted, backed-up folder.
  4. Paste the reference skill: The zensched-portables-kit includes SKILL.md, schema.sql, and a quickstart. Load the schema once (one statement per execute). Unit photo fields set "stamp_photos": true so exported JPEGs carry readable date, time, and GPS when captured in-app.
  5. Create your ZenSched account: Call zensched_guide, then account_create for a zsc_ key. Invite drivers at $0.25 each once.
  6. Fund when needed: Metered GPS, geocode, and form reads draw from prepaid balance. The $5 activation deposit is credited to your account.

Large construction pads and sprawling event fields need a wider policy radius (policy_update), not org-wide remote_checkin — that turns GPS proof off for every drop. Events cap at 60 days; the kit rolls a new event per place automatically when the window expires. Several units at the same address share one pin — no second geocode charge.

Worker app: Android on Google Play and iOS on the App Store.

For step-by-step details, see the ZenSched quickstart and the portables kit.

Metering: what you pay for

ZenSched uses transparent per-action pricing (see pricing):

  • GPS check-in/check-out: $0.10 each
  • Address geocoding: $0.03 per new place (once; same-site units reuse the pin)
  • Worker invite: $0.25 per driver (once)
  • Form submission reads: $0.05 basic / $0.15 with photos — read once, cache locally
  • Processed timesheet export: $0.10 per worker per pay period

Worked example from the vertical pitch: 3 techs × 25 units/day × 21 days ≈ 1,575 unit services/month with a unit photo every service.

PatternApprox. monthlyPer unit
Site punch + Service Proof per unit (kit default)~$337~$0.21
Punch in/out on every unit + photo read~$551~$0.35
GPS-only proof per unit~$315~$0.20

Read the incumbent comparison honestly. Punch-per-unit with photos ($551) is above ServiceCore’s reported $200 floor and **inside or a little above a typical 3-truck low quote ($450)**. Site punch + per-unit form (~$337) undercuts most 3-truck ServiceCore and WasteTrack quotes at the same volume. Reservety, Bin Boss, and Loo Tracker ($49–99) win on price — the sell there is enforced GPS proof, not a discount. Do not tell an EPA or Environment Agency auditor “it’s in ZenSched” instead of your official waste ticket.

What you get

  • Geofenced check-in and check-out at the drop site, with distance from the pin
  • A Service Proof form on the phone: serviced, issues, unit photos (optional burned-in stamp)
  • “Was Luis at 8800 Washington Tuesday?” from the agent in plain English
  • Service-log extract and tipped/leaking flags from local job summaries
  • Customer invoices from the same stops
  • About 15 minutes to stand up; the agent is the dispatcher

What you don’t get (be blunt)

  • No official septage / POTW trip ticket, UK WTN, or AU EPA docket
  • No unit-inventory map, barcode yard count, or RFID asset tracking
  • No route optimizer or turn-by-turn dispatch
  • No quoting engine, online booking widget, or card payments
  • Not a replacement for ServiceCore or WasteTrack if routing and yard inventory are your daily work

Who this is for (and who it’s not for)

Ideal for:

  • 1–5 truck owner-operators and independents on paper route sheets + group text
  • United Site Services / regional skip alumni going independent with a yard of serials
  • Operators who already talk to Claude, Cursor, or Muse and want unit proof without another $200–750/month per-truck seat

Not a replacement for:

  • Shops whose daily work is yard inventory, route optimisation, and recurring card billing in ServiceCore
  • Franchisees locked to WasteTrack or a franchisor ERP as system of record
  • Nationals running 20+ trucks with a full compliance team — a listening post, not a rip-out target

This is agent-first infrastructure. The operator talks to the agent, and the agent talks to ZenSched.

Get started

Ready to build your own workflow?

Clone the reference kit and connect ZenSched to your AI agent.