Your till · your ordering · your infra

Keep the 20% marketplaces take.
Run it yourself.

Stub is the counter till, online ordering, and payments for one shop — on your Cloudflare account or your own box, with your Stripe/Razorpay keys. Your money settles to you. Start at the counter, grow online when ready.

Deploy it yourself → See how it works

No commission · Your data stays in your account · Works offline

Stub counter till on a phone
1
deploy runs it all
$0
commission per order
~15min
from deploy to first order
100%
yours — D1 + R2 in your account

FEATURES

Everything a counter needs. Nothing rented.

Counter till

Quick-sell grid, search, coupons, split payments across cash, card, and mobile pay. Voids, reprints, invoice numbers never reused.

Online ordering

One link, no app, no login. Customers browse your live catalog — pickup, delivery, or dine-in — priced server-side on every submit.

Real payments

Stripe and Razorpay links, verified the second customers return. Paid orders approve themselves; declines refund in one tap.

Approve queue

Pending-first, oldest first, with age and PAID badges. Approve, then track preparing → ready → delivered — customers watch the same tracker. Stock warnings before you commit, reasons on every decline.

Fees you set

Flat online order charge plus a delivery-only fee. Server-priced, snapshotted per order, itemized everywhere the total shows.

Offline & print

Sales queue on-device and sync back. Bluetooth thermal receipts over BLE, with a system-print fallback. No network, no problem.

GROW AT YOUR PACE

One shop, three stages. Start at 1.

Stage 1 · start here

Just run the counter

Walk-ins, one cashier, bills that print. Twelve deep at lunch with flickering network — the till keeps billing from the quick-sell grid, queues what it can't sync, prints over Bluetooth. Nobody orders online yet, and that's fine.

Counter till on a phone
Cashier order queue

Stage 2 · when regulars ask

Take orders on a link — no gateway needed

Share your menu link. Customers submit pickup or delivery orders and pay your QR; you approve, track preparing → ready → delivered, and hand it over. No Stripe account, no paperwork — the phone just stops ringing.

Stage 3 · when volume justifies it

Plug in real payments

Add your Stripe or Razorpay keys and checkout links appear on every order — verified instantly, auto-approved into the queue, refunded in one tap on decline. Delivery fee plus online charge ride along, so every order carries its own margin. Still zero commission: the gateway settles straight to you.

Order status page

SELF-HOSTING

Your account. Your box. Your data. Fifteen minutes.

Same codebase, two targets. Cloudflare for zero-ops, your own hardware via celld for full control. No database of ours, no tokens kept, no commission ever. Updating later is one line, and migrations never touch your data.

Cloudflare

Worker + D1 + R2 in your account. Free tier covers a small shop.

$ pnpm deploy  # DB + migrate + secrets, one go
Deploy to Cloudflare

Your own box (celld)

A Durable-Objects node on your hardware, state in your S3 bucket. Supervised via Docker.

$ source .celld.env
$ pnpm run celld:deploy
$ ssh box 'celld d1 migrations apply …'

Needs an S3 bucket with conditional writes (R2, AWS, Tigris) and celld on the box. Secrets merge from .dev.vars at deploy time — never committed.

Full setup, update & troubleshooting guide →

Do customers need an app or login?

Neither. One link, name + phone + email, done.

Why not just list on a delivery app?

They take ~20% of every order and own your customer list. Stub costs you hosting only — the payment gateway settles 100% to your account, and the customer data sits in your database.

Where is my data, and what does it cost?

Cloudflare path: your account's D1 + R2 — we never see it, free tier covers a small shop. celld path: an SQLite-per-object store inside your own S3 bucket — you pay S3, nothing else.