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.

CapabilityCannAgentDutchieBLAZETreez
Built by an operatorTwo WA storesVC-owned platformVendor-builtVendor-built
Cash-first designDay-one defaultBolted-onBolted-onBolted-on
Manager-PIN gatesConfigurable per roleAvailableAvailableAvailable
Vertical-ID at cartCart-blocking with auditAvailableAvailableAvailable
Audit-log shapeActor + reason + before/afterLimitedLimitedLimited
Source available to your teamYes (operator-shareable)NoNoNo
Monthly pricingOperator-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
Schedule a demo
30 minutes · register, write-up, Form 941