The dispensary operating system. Not just the register.
Stop stitching five systems together by hand. POS, inventory, compliance, payroll, and books run on one login — your state’s rules coded into the cart, no per-transaction fees.
we provision here (2)audit package built (21)the rest, regulatory coverage
Don’t take our word for it. Ring a sale.
Change the product, the city, the card. The paper on the left is what your customer takes home. The panel on the right is the row that goes to the state — the same fields, built by the same code. Set the customer under 21 and watch what happens to both.
Total $53.06. Files as RecreationalRetail.
THANK YOU · KEEP THIS RECEIPT
- Quantity
- 3.5
- UnitPrice
- 35.00
- SalesTax
- 4.99
- OtherTax
- 12.95
- SaleType
- RecreationalRetail
- Operation
- Insert
- RCW 69.50.535 — 37% cannabis excise, applied at retail
- Seattle — Seattle (DOR loc 1734) 10.40% = 6.50% state + 2.90% local; B&O retailing 0.342% (2026–2032)
Computed by src/lib/receipt-demo.ts, which emits the same CcrsSaleRow the WSLCB submission is built from and is pinned against the real CCRS validator in CI. Statutory rates shown; a live store computes from its own configured local tables.
The register and the books are the same system — not a nightly sync.
Most stacks bolt a POS onto separate tools for compliance, inventory, payroll, and books, then reconcile the gaps by hand. Here the sale that rings at the register is the same row that lands in the §280E books, the same data that builds your regulator’s file, the same number on the manager’s morning board. One database under all of it — the part you can only check by watching it move. That’s what the demo shows.
Our own stores run on it — outcomes measured, licenses on lcb.wa.gov →
Every cannabis POS rings a sale. These are the parts that don’t.
Books, payroll, and HR are where every other system punts you to a third party. Here they run on the same login as the till — the half nobody else automates natively.
None of it is a bolt-on. See the full feature set →
POs that draft themselves.
The reorder model reads the same shelf your budtender does and drafts the PO off real sell-through, fill-rate, and a vendor-reliability score — so the vendor who keeps shorting you stops getting the big order. You approve or adjust; you don’t rebuild it from a spreadsheet at midnight.
A co-pilot that knows your shop.
Marcus runs the day-to-day vendor desk, ordering, and the §280E push from one place — reading your real numbers, not a generic playbook. It surfaces what needs a decision and leaves the decision to you.
Call the line and ask it anything.
Ask about your current POS, pricing, or the cutover and our AI assistant walks you through it — no form, no wait. The call’s recorded, and it tells you it’s an AI up front.
Call +1 855-695-CANNToll-free · +1 855-695-2266
Compliance is the wedge — and it’s checkable
Every state files differently — the regulator, the statutes, the tax stack and the track-and-trace system all change at the line. We write out what applies in each state we cover, and the compliance record is built from your real sales and reconciled against the register before you submit. Read how your state is written up →
If we go down, your register doesn’t
The question every operator asks before switching: what happens to my store if your system has an issue? Written plainly, no bravado.
Per-store database
Your Postgres is yours alone — not multi-tenant. An issue on another customer’s data never reaches yours.
Offline-mode register
The POS caches the day’s pricing + catalog on each terminal. If sync breaks during open hours, the budtender keeps ringing — sales queue locally and post when connectivity returns.
You hear it from us first
Your admin contacts get an email from us the moment we detect a critical-path issue, backed by the live 5-minute probe rollup on /status and a written postmortem — not a status-page color you have to refresh. SMS escalation is in build; we’ll say so here the day it ships.
Cannabis rules stop at the state line. So we wrote them out.
For 24 states we have written out the regulator, the statutes that govern the retail floor, the tax stack, and the track-and-trace system that state runs — so you can read what applies where you operate before you ever talk to us.
Each page carries that state’s regulator, rule citations and tax stack. See all 24 states →
And it runs the rest of the shop on the same login.
POS, loyalty, inventory, the vendor desk, the green-board — the lines every shop needs, on one login. Pick the door that matches today’s problem.
Every tile is its own deep module, and there are more underneath. Browse the full module catalog →
Moving off your current POS?
It replaces the register you run today — whether that’s Dutchie, Treez, or a stack you’ve stitched together. The switching fear is real: loyalty balances vanishing and day-one numbers that don’t tie out. The cutover workspace answers both — a readiness board, a loyalty-balance snapshot taken before the flip, and a reconciliation dry-run that proves the numbers match before you commit. You move in phases — shadow first, then flip — not all at once on a Friday.
See it from the budtender’s screen, the manager’s phone, and the owner’s laptop.
30-minute demo. A register transaction, a manager write-up, a Form 941 — on the real product. We scope it, or tell you what fits better.
What we refuse to do.
Anyone can publish a promise. These are the ones with a script behind them — each line names the gate in our codebase that fails the build if we break it. That is a harder thing to say than a feature list, which is why it is here.
- 01
We don't put a number on this site that our code doesn't agree with.
Our published price is bound to the pricing constant the quote is built from. If someone edits the copy and not the constant — or the constant and not the copy — the build fails before it deploys. That is how a stale $299 stops being possible rather than being promised against.
scripts/check-price-claims.mjssee it → - 02
We don't use our own store count as a credential.
We could tell you how many dispensaries run this today. We don't, and a gate strips the number from customer copy if anyone tries. A small count invites you to pattern-match on scale, which is the wrong question — what you should weigh is whether the thing works on your floor. When the number is worth citing, it will be cited.
scripts/check-no-store-count-framing.mjs - 03
We don't invent a review, a rating, or a customer.
No AggregateRating markup, no testimonial we didn't receive, no logo wall. We are pre-revenue and say so; a fabricated star rating is both a Google policy violation and the cheapest possible way to lose an operator who checks.
scripts/check-fabricated-review-schema.mjs - 04
We don't claim a state we can't turn your store on in.
We publish regulatory coverage for 24 states and built audit packages for 21. We provision in Washington and Arizona. Those are three different numbers and the site is not allowed to blur them into one — the traceability claims on every state page are checked against the registry that backs them.
scripts/check-state-traceability-consistency.mjssee it → - 05
We don't show a compliance filing that didn't happen.
Anything produced in a sandbox is fenced from anything that reports a real submission to a regulator. A confirmation number a customer could mistake for a filed report is the one bug in this product that could cost someone their licence.
scripts/check-simulated-confirmation-fence.mjs - 06
We don't write like a software company.
Streamline, empower, unlock, revolutionize, seamless, cutting-edge, best-in-class, enterprise-grade — struck, permanently, by a gate that fails the build on any of them. No exclamation marks. If a sentence would not survive being read aloud to another operator across a table, it does not ship.
scripts/check-strike-list.mjs
These run on every push, before anything reaches this site. If you find a line we have broken, tell us and we will either fix it or delete the line — those are the only two honest options.