Cannabis POS + back office · one system

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

brapp · morning board
Good morning
Sample shop · Sun, 8:04a
One login · all of it
Yesterday
$4,820
12%
Tickets
218
vs 4-wk avg
Avg basket
$22.11
3%
Ran overnight
AIDrafted 2 POs · vendor-ranked
§280E week classified · CPA-ready
Payroll staged · 941 + WA L&I
Traceability reconciled · before you file
Needs you today
Low stock3 SKUs below par
POs to approve2 drafts ready
Birthdays5 loyalty members
Daily briefing · your shop at a glance
Ring one

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.

GREEN LIFE CANNABIS
LIC 412345 · SEATTLE, WA
BLUE DREAM 3.5G$35.00
CANNABIS EXCISE 37%$12.95
SALES/USE 10.40%$4.99
SEATTLE B&O 0.342%$0.12
TOTAL$53.06
21+ VERIFIED AT CART
THANK YOU · KEEP THIS RECEIPT
1
The CCRS row this sale files
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.

One system, not five integrations

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 →

brapp · receive board
Retail floor · receiving bench
The uncopyable middle

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 →

AI reorder

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.

AI reorder · draft purchase order
Marcus · Co-Pilot

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.

Marcus · vendor desk
See how the Co-Pilot tier runs your desk
Prefer to talk?

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-CANN

Toll-free · +1 855-695-2266

Compliance is the wedge — and it’s checkable

Traceability file — automated build + reconcileCompliance rules coded into the cartImmutable audit log, kept indefinitely

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.

Read the full continuity + trust posture →

Written state by state

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 →

The everyday counter, too

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 →

Switching POS

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.

Cutover · readiness board

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.

The rules

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.

  1. 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 →
  2. 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
  3. 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
  4. 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 →
  5. 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
  6. 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.

30 minutes on the working product. An operator replies.