Operational deep-dive
When the register goes offline — what survives, what doesn’t
Internet drops happen — Comcast outage, router reboot, ISP migration, the building’s power blip that took the modem with it. A cannabis dispensary running cash sales should not stop selling because the link to the cloud went dark. The honest write-up of what a POS can survive offline, what synthesizes back when the link returns, and what staff should say when the spinner appears.
Why offline mode is a cannabis-specific problem
Most retail POS vendors built around card-present transactions. When the internet drops, the card terminal can’t auth — the sale can’t happen — the register stops being useful. That model leaks straight into how cannabis POS is built, even though the cannabis register doesn’t need card auth at all (cash-only by design in WA + OR + MI). The register is doing inventory decrement + tax math + receipt print + audit log + traceability sync. Three of those five can run on the local register without ever touching the cloud.
What survives offline (and how)
The register is local-first. Local means ‘the SQLite database lives on the iPad / Mac mini next to the till, and writes happen there before they sync.’ Concretely:
- **Inventory lookup.** The product catalog (every SKU + price + tax category + on-hand qty) is mirrored locally on every register. Lookup is instant; no network round-trip.
- **Cart build.** Add product → cart updates. Apply discount (loyalty / heroes / first-visit) → math runs locally against rules cached at start-of-shift. The cart never waits on the cloud.
- **Tax math.** State-by-state rates baked in (WA 37% / OR 17%-20% / MI 10%) — not pulled per-transaction.
- **ID scan + age verification.** Local scanner + local rule (21+ recreational / patient lookup against locally cached endorsement list). Sale-to-minor block enforced offline.
- **Receipt print.** Receipt printer is USB to the register, not networked. Prints regardless of upstream link.
- **Cash drawer open.** Drawer trigger is wired to the register, not to the cloud. Open / close / balance happen locally.
- **Audit log row write.** The transaction commits to local SQLite. Nothing is lost.
What does NOT survive offline
Honest list. These all wait for the link to come back.
- **WSLCB-CCRS / METRC traceability submit.** State traceability requires a real-time sync. Transactions queue locally; they push to CCRS / METRC the moment the link returns. The state doesn’t know whether the row arrived in 2 seconds or 47 minutes — the receive timestamp is what matters, not whether it crossed the wire instantly. (Per WAC 314-55-083 + the 2026 CCRS technical guide, end-of-day reconciliation is the bar.)
- **Cross-store inventory transfer.** Same-licensee inventory transfer to a sibling store needs both sides online for the manifest to commit. If one side is offline, the transfer queues; the manifest commits when both are reachable.
- **Loyalty point accrual via cloud rules engine.** If the loyalty rules are cloud-side only, the customer earns the points retroactively when the link returns. Better: rules-cache locally so the receipt shows the point earn in real-time. (CannAgent caches; many vendors don’t.)
- **Online order claim.** Customer ordered ahead via the public site? The pickup pre-reservation lives in the cloud. Offline registers can still complete a walk-in cash sale of the same product, but the ‘mark online order picked up’ sync waits.
- **Vendor portal sibling-store hop.** A vendor logging in to look at the other store from this register’s screen is a cross-store auth flow — needs the cloud.
- **Real-time dashboard for the owner phone.** Doug’s phone refresh of /admin/today shows whatever the cloud knew at last sync. Lag is the price.
What synthesizes back when the link returns
The order matters. Sync isn’t one batch — it’s a priority queue.
- **Audit-log rows first.** Compliance writes are the highest-priority sync target. The state doesn’t care about the timing within reason; it cares that the row exists.
- **Inventory decrement reconciliation.** If two registers were offline simultaneously and both sold the last unit of a SKU, the sync detects + flags the conflict for the inventory team to resolve manually. Better than silently double-selling.
- **Cash-drawer close + variance.** The till count for the offline window flows up the moment the link returns. Variance > $10 triggers the standard amber-flag review (per Kat’s till-count policy).
- **Loyalty point accruals.** Customer’s account updates retroactively. Customer-facing communication: ‘Your points from earlier today have posted’ — never ‘our system was down.’
- **Online-order pickup status.** Last to sync. The customer who walked in for an online order while the link was down already left with the product; the marker just catches up.
What staff should say to a customer while offline
Tone matters. The customer doesn’t need to hear ‘our system is down.’ They need to hear that the sale is going through.
- **Right:** ‘Cash sale, easy — register handles this locally.’ (For the cash-only customer, internet is irrelevant. Don’t make them anxious about something that doesn’t affect their purchase.)
- **Right (loyalty member):** ‘Points will post in a few minutes — receipt shows what you earned.’ (Honest + reassuring; the receipt math is local + trustworthy.)
- **Right (online order):** ‘Your online order is in our local system. We can hand it to you now; the “picked up” flag updates when our connection comes back.’ (Honest about the queue without making it the customer’s problem.)
- **Wrong:** ‘Our system is down — I’m not sure if I can ring you up.’ (Telegraphs panic; loses the sale.)
- **Wrong:** ‘Sorry, can’t do anything until our internet comes back.’ (False — the register can almost certainly do this transaction.)
What this replaces
- Cloud-only POS that locks the register on a network blip. (Several vendors still ship this; ask before signing.)
- Manual paper-tracking of offline sales. (Some shops keep a notebook for outages — recipe for variance + audit trouble.)
- ‘Sorry, our system is down’ sign on the door. (Walks customers to a competitor.)
- Owner phone calls to the IT vendor mid-outage. (The register architecture should make this irrelevant.)
Takeaways
- Cash-only cannabis register doesn’t need internet for the transaction itself — only for the state traceability submit + cross-store sync
- Local SQLite mirror of catalog + tax rules + age verification + audit-log lets the register clear sales offline; cloud sync is a queue, not a blocker
- Average two-lane shop loses $1,200/hour of revenue when the register stops — the architecture choice compounds across every outage of the year
- Sync priority order: audit-log first / inventory reconciliation / cash variance / loyalty accruals / online-order pickup status
- Staff script during an outage frames the local-resilience as routine — never ‘our system is down’
Ready to talk through your migration?
30-minute demo. We end by quoting the cutover from your current setup — fixed scope, no hourly games.