The register your budtender actually rings on.
Built and dogfooded by a cannabis operator across two Washington stores. Vertical-ID is caught at the cart — not on a poster, not in a training deck. Manager-PIN gates voids, returns, manual prices, discount overrides. Cash-first by design with customer display, barcode scanner, QZ Tray printing, SMS receipt fallback, and WSLCB-grade audit on every keystroke.
Four things that bleed money on a cannabis floor.
ID checks fail at the door, not the register.
A poster doesn’t catch the 19-year-old. A training deck doesn’t catch the 19-year-old. The cart catches the 19-year-old. Vertical-ID stop fires on the cart screen with DOB-mismatch + under-21 logging written to audit before the cart can post.
Voids and price-overrides leak money.
Floor-level discount overrides without manager-PIN are how a $500 cart turns into a $250 cart that nobody flagged. CannAgent gates voids, returns, manual prices, and discount overrides behind manager-PIN — the floor moves fast, the giveaway doesn’t.
Cash-first stores need cash-first registers.
Cannabis is cash-first under federal banking rules. We built around it from day one — change calculator, till-variance SMS over $5, safe drop / payout flow, double-tap soft-confirm on $200+ carts to catch register-finger mistakes before they post.
WSLCB audit writes happen at write-time, not at the end of the day.
Every transaction, every void, every override, every age-verification result lands in audit_log at write-time with the actor + reason + before/after delta. When the inspector knocks, you don’t go reconstruct — you grep.
Eight surfaces, ringing live across two stores.
Vertical-ID stop at the cart
DOB-mismatch + under-21 + missing-document blocks fire on the cart screen, not the door. Logged to audit_log per attempt, surfaced on /admin/age-verification.
Manager-PIN on voids, returns, prices, overrides
Configurable per role. Budtenders ring, leads handle voids, GMs handle returns + override-stack. PIN attempts and lockouts logged.
Cash payment + change calculator
Built for the cash-first floor. Customer display on the second screen broadcasts current cart total via BroadcastChannel — no PII, no inventory state.
Till open / close + variance SMS
Daily till open with starting bank, close with declared cash, system-computed variance. Manager SMS auto-fires on >$5 variance, escalates above $50.
QZ Tray printing + SMS receipt fallback
Thermal receipt prints from QZ Tray. SMS receipt offered as paperless fallback — cannabis customers preferring no paper trail get one.
Soft-confirm on $200+ carts or 7+ items
Double-tap requirement (4-second window) before Charge fires on heavy carts. Catches register-finger double-clicks before the transaction posts.
Loyalty earn at the register
Phone-lookup or scan; points earn on subtotal post-discount. Tier-aware redemptions (Bronze/Silver/Gold/Platinum) with discount-stacking guardrails (best-deal-wins, no stacking — WSLCB-defensible).
Online-order pickup queue
Customer-placed online orders surface in a budtender-side queue. Verify ID, scan items, charge. The queue lives next to walk-in cart, not in a different app.
CannAgent vs. the alternatives.
Operator-reported. Full deep-dives at /vs/dutchie, /vs/blaze, /vs/treez.
| Capability | CannAgent | Dutchie | BLAZE | Treez |
|---|---|---|---|---|
| Built by an operator | Two WA stores | VC-owned platform | Vendor-built | Vendor-built |
| Cash-first design | Day-one default | Bolted-on | Bolted-on | Bolted-on |
| Manager-PIN gates | Configurable per role | Available | Available | Available |
| Vertical-ID at cart | Cart-blocking with audit | Available | Available | Available |
| Audit-log shape | Actor + reason + before/after | Limited | Limited | Limited |
| Source available to your team | Yes (operator-shareable) | No | No | No |
| Monthly pricing | Operator-negotiated | $$$ + transaction % | $$ + per-location | $$ + per-location |
Want to see it ring?
30-minute walkthrough on a real Washington-store deployment. No deck, no pre-call qualifier email — just the register.
Request a demo