Loyalty without plastic. Phone is the key.
Phone-number lookup at the register. Tiers earn through visits, not points-game arithmetic. Best-deal-wins by default — defensible against margin creep and WSLCB scrutiny both. Loyalty-reminder SMS leads with relationship, not points. Built into the POS as audit_log first-class — not a third-party plug-in.
Four ways loyalty programs leak margin.
‘What’s your phone number?’ is faster than ‘do you have your card?’
Plastic cards get lost. Phone numbers don’t. Lookup at the register is one keystroke. New customers enroll mid-transaction with phone + opt-in checkbox — no separate signup flow, no gift-card holdup. Existing customers earn on the cart they’re ringing right now.
Discount stacking is a regulatory and margin landmine.
Two 20% off coupons + a Veterans 10% + Sunday Senior 15% = 65% off and a margin hole. WSLCB doesn’t love that math either. Our default is best-deal-wins: best applicable discount applies, the rest don’t. EARNING continues, REDEMPTION doesn’t stack — defensible and per-Doug 2026-05-07.
Tier math should be visible, not a black box.
Bronze / Silver / Gold / Platinum tiers earned through visit count + 30/60/90-day spend windows. Each customer’s tier and points are visible at the register in one glance. Tier benefits stay where they belong — in the redemption picker, not in a hidden discount engine.
SMS that nudges, doesn’t spam.
Loyalty-reminder SMS leads with relationship (‘been a few weeks’), not pure points (‘you have $5 waiting’). Why: pushing redemption converts soft repeat-customers into hard discount-driven shoppers. The relational nudge keeps margin intact and the door open. Cadence + opt-out per WAC 314-55 / TCPA / WAC 314-55-155 safe.
Eight surfaces, no plug-ins.
Phone-keyed lookup at the register
10-digit phone + tap-to-select. Auto-creates new profile inline mid-transaction. No separate enrollment flow, no plastic card holdup.
Tier system — Bronze / Silver / Gold / Platinum
Visit count + 30/60/90-day spend windows drive tier. Tier-aware redemption picker at checkout. Tier benefits visible at register in one glance.
Best-deal-wins, no stacking
Best applicable discount applies; others don’t. EARNING continues; REDEMPTION doesn’t stack. Defensible against margin-creep + WSLCB scrutiny.
SpringBig replacement at cutover
Two-track migration plan (Wenatchee 5/25, Seattle ~6/25). Existing SpringBig profile data imports + carries balances forward. Loyalty-reminder SMS reaches customers who never opted into SMS in the first place — a real reach win.
Loyalty-reminder SMS, relational not transactional
Cadence-aware nudge leads with ‘been a few weeks’ not ‘$X waiting.’ Margin protection — converts soft → hard discount-shoppers if you lead with the points.
Birthday SMS + first-time-buyer welcome
Per-customer birthday loyalty bonus (configurable). First-time-buyer welcome with deal text per store + map link. All passes through the brand-voice gate (no efficacy claims).
At-risk + win-back automations
Customers past their visit cadence threshold land on /admin/customers?filter=at_risk_winback. Auto-PO-style audit on every win-back outreach so the SMS ledger is full.
POS register integration, not a plug-in
Loyalty earns + redemptions write to the same audit_log as the transaction itself. No third-party SaaS dependency, no monthly per-location fee, no off-site customer data.
CannAgent vs. SpringBig & the plug-in stack.
Operator-reported. SpringBig is the dominant cannabis-loyalty plug-in; Dutchie + Flowhub bolt similar plug-ins. We’re native.
| Capability | CannAgent | Dutchie | SpringBig | Flowhub |
|---|---|---|---|---|
| Phone-keyed lookup (no cards) | Default | Available | Available (paid plug-in) | Available |
| Tier system with visible math | Built-in 4-tier | Plug-in (paid) | Plug-in (paid) | Plug-in (paid) |
| Best-deal-wins (no-stacking) | Default + audit-logged | Configurable | Configurable | Configurable |
| Loyalty-reminder relational SMS | Built-in cadence | Plug-in | Built-in (paid) | Plug-in |
| POS-native, not bolted-on | Yes (audit-traceable) | External plug-in | External (the plug-in) | External plug-in |
| Per-location monthly fee | $0 (operator-negotiated) | $$ + transaction % | $$$/location | $$/location |
| Source available to your team | Yes | No | No | No |
Want to see the cutover plan?
30-minute walkthrough including the SpringBig migration two-track. Existing balances import, customer phone numbers carry over, the loyalty layer goes live without losing tier history.
Request a demo