Why offline matters more than your software vendor admits
Most field-service apps work great in the office and pretend to work in the field. Push them onto a phone in a basement, a third-floor mechanical room, or a job site at the edge of cell coverage and they break in subtle, expensive ways. The closeout submit times out. The tech retries. Now there are two receipts in the system. The photo uploads silently fail and the only one who ever knows is the tech, who's now driving to the next job.
Jobber's offline mode shipped in January 2026 and only covers parts of the workflow. Housecall Pro buffers form data but loses photo uploads if the app crashes mid-sync. ServiceTitan has a real offline-first mobile app but charges $250+/month per technician for it.
How POG handles offline
POG ERP is a Progressive Web App (PWA). Every tech installs it from a browser — no App Store, no enterprise MDM. The app caches its UI shell via a Service Worker, and every write operation (closeout submit, photo upload) routes through an IndexedDB-backed queue with exponential backoff retry.
When a tech finalizes a closeout offline:
- The submit action fires immediately and gets a unique Idempotency-Key header.
- The request goes into the IndexedDB queue with all data (line items, signature, photos as base64-serialized blobs).
- An offline banner shows the queued count: "Offline — 2 items queued. Will sync when reconnected."
- When the device reconnects, the queue auto-flushes. 2xx and 409 responses (already-finalized) clear the row. 5xx responses retry with backoff (1s, 5s, 30s, 5m, 30m, daily). 401 surfaces an auth-expired banner.
- The server enforces idempotency via an idempotency_keys table. If the same Idempotency-Key shows up twice (because the network retried), the server returns the cached response without re-running the side effect. No double-charged cards. No duplicate receipts.
What's covered
- Closeouts — all three auth modes (token, session, admin) queue and survive reload.
- Photo uploads — blobs serialized to base64 in IndexedDB, reconstructed to FormData on flush.
- Offline banner — auto-installs on driver_share, my_jobs, and field_crew pages. Shows queued count + sync status.
- Auto-flush triggers — online event, visibilitychange (tab returns to foreground), 30-second background tick.
- Status-aware retries — 2xx done, 409 done (server already processed), 4xx surfaced as failed, 5xx + network retried with backoff.
- Idempotency-protected — server-side idempotency_keys table guarantees the same key returns the same response, no matter how many retries arrive.
- iOS-friendly — uses visibilitychange instead of BackgroundSync (which iOS doesn't support). Flushes when the tech opens the app or the screen wakes.
How it compares
Jobber: partial offline, released January 2026. Photos sometimes lose on app crash. Housecall Pro: form buffering only. ServiceTitan: full offline-first, but $250+/mo per tech with multi-month contract. POG ERP: PWA-based offline + IndexedDB queue + server-side idempotency on the $49/month plan.
"If your techs ever lose a closeout to a network drop in your first 90 days, we refund your setup fee in full."