The register your budtender actually rings on.
Built ground-up for cannabis retail. 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, one system.
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.
What CannAgent does at the register.
Every row is a shipped surface — see it on the demo.
| Capability | CannAgent |
|---|---|
| Cash-first design | Day-one default |
| Manager-PIN gates | Configurable per role |
| Vertical-ID at cart | Cart-blocking with audit |
| Audit-log shape | Actor + reason + before/after |
| Source available to your team | Yes (source-shareable) |
| Monthly pricing | Flat monthly, no transaction % |
Want to see it ring?
30-minute walkthrough on the real product, seeded with the shape of your inventory. No deck, no pre-call qualifier email — just the register.
Request a demo