Edition 01 · Volume 1
The Retail Operating System — An Almanac for Operators
MMXXVI · 2026
AiPOS Deploy in 60s
A retail operating system

The cash register just got an operating system.

AiPOS is a modern, production-ready point of sale that runs from a single docker compose up command. JWT auth, real-time inventory, a checkout screen your cashiers will actually like. No per-seat fees. No cloud lock-in. No bloat.

16Database tables
3Pre-built roles
100%Self-hosted
↳ Live preview Sale #00427
PAID
The Corner Store.
14 Marigold Lane · Brooklyn NY
Tel · (347) 555-0117
14 Jun 2026 10:42 AM Cashier: M. Rivera
Sourdough Boule$12.00
Single-Origin Ethiopia$22.00
Heirloom Tomato$15.00
House Granola 16oz$11.00
Sparkling Yuzu$8.00
Subtotal$68.00
Tax (8.875%)$6.04
Total$74.04
Visa ••4427Approved
Auth024187
Thank you, come again. rewards · loyalty #88-2241 · 74 pts earned
aipos · printed in 0.3s
— A Note from the Team —
The best software for retail shouldn't feel like software at all. It should feel like the floor itself — quiet, fast, and there when you reach for it. That's what we built.
— The AiPOS Team · Brooklyn & Lisbon

01 Chapter One
The state of the register

The retail software market is broken.

Three forces have shaped point-of-sale software for the last decade — and all three push against the operator. We've met hundreds of independent retailers, and the same complaints come up, every time, in different words.

PROBLEM · I

Pricing scales like punishment.

Per-seat fees, per-transaction surcharges, "starter" tiers that exclude reporting, enterprise quotes that arrive behind NDAs. The cost of running a register rises faster than the revenue it helps you earn. Software should make money easier, not more expensive.

"The bill went up, the service went down."
PROBLEM · II

The cloud owns your data.

When the vendor's network drops, your register drops. When the vendor changes pricing, you change vendors. When the vendor sunsets a feature, you scramble. Your most valuable asset — your sales history, your customer relationships, your inventory truth — lives on someone else's hard drive.

"We don't rent pencils. Why rent a register?"
PROBLEM · III

Integrations are an afterthought.

The terminal can't talk to your accounting, your loyalty, your online store. Spreadsheets become the source of truth, and your team becomes the integration layer. A point of sale should be the spine of operations, not a screen that stands alone.

"The till is honest. The software isn't."
§ § §
02 Chapter Two
Our approach

Ship the whole stack. Skip the middleware.

AiPOS is a self-hosted retail operating system. The whole thing — frontend, backend, database, migrations — runs from one docker-compose.yml. Your data lives on your hardware. Your upgrades ship as Docker images. Your cashiers log in to a checkout screen that doesn't take eight seconds to load.

a.

One command, fully provisioned.

Postgres, FastAPI, Next.js, the migrations, the seed data — all wired up. The backend's entrypoint runs Alembic on every container start, idempotently. You bring Docker. We bring the rest.

  • postgres 16
  • fastapi
  • alembic
  • seed.py
b.

Your hardware, your data, your call.

No telemetry leaves the box. No third-party analytics. No "we may share anonymized data with partners" in the fine print. The database is yours, the backups are yours, the failure modes are ones you can see and debug.

  • self-hosted
  • local-first
  • backup-friendly
c.

Roles that match how retail actually works.

Three pre-seeded roles, scoped at the API level. A cashier can't reach user management. A manager can't touch global settings. The boundaries are real — not just UI hiding.

  • admin
  • manager
  • cashier
d.

Built on the boring, durable stuff.

FastAPI. PostgreSQL. Next.js. Tailwind. shadcn/ui. The same libraries that run a generation of production apps, with nothing experimental in the mix. If you know the stack, you own the stack.

  • no redis
  • no workers
  • no surprises
§ § §
03 Chapter Three
Six pillars of the system

What you actually get, on day one.

No upsells. No "available in the Pro plan." No "contact us for an enterprise demo." The full feature set ships in the open-source repository, and the default install unlocks all of it.

01

Authentication & RBAC

JWT-based auth with refresh tokens — access tokens expire in 60 minutes, refresh tokens let you re-authenticate without re-login. Three pre-seeded roles, scoped at the API level, not just hidden in the UI.

  • jwt
  • refresh tokens
  • api-scoped rbac
02

Dashboard & Live KPIs

Sales totals, recent activity, low-stock alerts — the things a manager checks first thing in the morning, before the doors open. The numbers are pulled from the same source of truth as the till.

  • realtime
  • low-stock
  • activity feed
03

Product & Inventory

Categories, variants, SKU and barcode, multi-tier pricing, per-product tax. Stock tracking with reorder levels and an append-only stock-movement history. Every adjustment, return, and write-off is on the record.

  • variants
  • barcode
  • movements
  • reorder
04

Customer & Loyalty

Customer database with purchase history and a built-in loyalty-points engine. Repeat buyers earn points on every transaction. No third-party CRM needed, no "loyalty add-on module" upsell — it ships.

  • profiles
  • history
  • points
05

Point of Sale Checkout

A fast checkout screen with a product grid, persistent cart, and multiple payment methods. Designed for one-handed operation at the counter — barcode scan, weight entry, split tenders, cash back, all reachable in two taps.

  • grid
  • multi-pay
  • receipts
06

Sales, Refunds & Reports

Complete transaction flow with receipt generation. Refund line-by-line, no exceptions. Daily sales trends, product performance rankings, inventory status — the kind of reports that used to require a separate BI subscription.

  • refunds
  • reports
  • audit log

04 Chapter Four
A day in the life

From the first scan to the last reconciliation.

What does a working day actually feel like, for a cashier and a manager, on a register that respects their time? Here is one.

07:58
OPEN
Cashier · M. Rivera

Open the till, take the float.

Sign in with PIN. The system reconciles the cash drawer with yesterday's close. Three taps and the float is entered. M. is ready for the first customer by 8:00 sharp — no twelve-second boot screen, no "loading your dashboard".

10:14
SALE
Customer · A. Chen

Scan, pay, print.

Barcode scan picks up the item. Quantity, modifiers, weight — entered in under three seconds. Card tapped, terminal approved, receipt printed, loyalty points added. The whole transaction takes 14 seconds. The customer is out the door with a printed receipt and a thank-you.

13:02
SHIFT
Manager · S. Okafor

Mid-day check-in.

S. opens the manager dashboard on a tablet in the back office. Sales today: $2,847. Top sellers: Sourdough, Single-Origin, Heirloom Tomato. Low-stock alert: Sparkling Yuzu at 3 units. S. fires off a quick PO from the supplier portal — back to the floor in 90 seconds.

17:48
EXCEPTION
Cashier · M. Rivera

Refund a damaged item.

Customer returns a dented tin. M. pulls up the original sale from the customer's loyalty number, selects the line, processes a partial refund to the original card. Receipt is printed, stock is auto-restored, the audit log gets a new entry. No manager override needed.

20:15
CLOSE
Manager · S. Okafor

End-of-day reconciliation.

S. closes the till. The system reconciles the cash drawer against the card totals, prints the Z-report, and archives the day's audit log. The database is auto-backed up via cron. Total time to close: four minutes. M. goes home. The shop is closed. The system waits.

§ § §
05 Chapter Five
On the shoulders of giants

Built on a stack that will outlive the hype cycle.

No experimental frameworks. No "the next big thing" dependencies. Every piece of the stack has been in production at scale, somewhere, for years. That's the whole point — software you can run for a decade, not a quarter.

Frontend
Next.js 14
App Router
Frontend
TypeScript
strict mode
Frontend
Tailwind CSS
utility-first
Frontend
shadcn/ui
inlined
Frontend
TanStack Query
server state
Frontend
Zustand
client state
Backend
FastAPI
async · py 3.12
Backend
SQLAlchemy 2.0
async ORM
Backend
Pydantic v2
validation
Backend
Alembic
migrations
Database
PostgreSQL 16
production
Container
Docker Compose
orchestration

06 Chapter Six
Trust, but verify

Built by people who hate surprises in production logs.

The default install is intentionally insecure — that's so it boots on a fresh laptop without you hunting for secrets. Before you expose it to a network, the things below are what you should care about.

§ I

JWT with refresh tokens

Access tokens expire in 60 minutes. Refresh tokens let the client re-auth silently. No "session expired, log in again" interruptions in the middle of a transaction. The signing key is yours to rotate.

§ II

RBAC enforced at the API

Roles are checked server-side, on every protected route. Hiding a button in the UI is not the security model — the security model is the API. A cashier who crafts a request to delete a user will get a 403.

§ III

Append-only audit log

Critical actions — sales, refunds, user changes, settings edits — are written to an immutable audit log. If something goes sideways, the trail is intact. The schema also supports multi-store rollouts without a redesign.

§ IV

Self-hosted means self-controlled

The database is on your hardware. The backups are your cron job. The failure modes are visible. There is no vendor who can change pricing, change terms, or sunset a feature without warning. You own the system.


Permissions, scoped

Three roles. Zero ambiguity.

Every account on the system is one of these three. The boundaries are real, not cosmetic — a cashier physically cannot perform a manager action, even if they type the URL by hand.

AdminFull access
User CRUD, role assignment, global settings, all reports, all stores. One per organization, ideally.
user · admin pass · admin123
ManagerOperational
Inventory, products, customers, reports, and day-to-day operations. No user management, no global settings.
user · manager pass · manager123
CashierFront-line
POS checkout, product lookup, basic customer search. Cannot reach reports, inventory, or settings.
user · cashier pass · cashier123
§ § §
07 Chapter Seven
From the floor

What operators actually say.

We don't have a logo wall. We have receipts, conversations, and cashiers who don't dread the morning open.

We replaced a $480/month subscription with AiPOS in a weekend. The first thing I noticed wasn't the cost — it was that my cashiers stopped asking me to fix the register.
Naomi P. Owner · Two Locations · Coffee & Provisions
The fact that I can read the source code changed how I think about this software. When something breaks, I can fix it. When the vendor is silent, I don't have to wait.
David A. Operations Lead · Independent Bookstore
Checkout takes fourteen seconds. Our old system took forty. Over a day, that's the difference between a queue and a conversation.
Lia K. Floor Manager · Neighborhood Grocer

08 Chapter Eight
Questions, answered

The things people ask before they commit.

If your question isn't here, open an issue on the repository. We answer every one.

No. The whole stack ships in Docker containers. You need Docker (and Docker Compose) on whatever machine is going to run the system — a laptop, a NUC, a server in a closet. Nothing else.
Yes. Once the containers are running, no external network connection is required. You could pull the network cable and the register would keep ringing. Updates are an explicit docker compose pull operation.
The schema is ready for it. The stores table and per-store inventory rows are baked in. Multi-store coordination across instances is a roadmap item.
No. The stack is yours. Run it forever, on as many machines as you want. There is no metering, no per-seat, no "professional plan" with the good features.
Pull the new image and restart. Pull the latest docker compose pull, restart with docker compose up -d, and the entrypoint script runs Alembic migrations automatically. Idempotent, every time.
Yes, with the standard caveat: rotate the default SECRET_KEY and the default database password before exposing the service to a network. The defaults are committed for local-dev convenience — they are not safe for production.
Yes. Receipt header, receipt footer, tax rate, and store settings are all configurable from the admin panel. For deeper changes — loyalty rules, custom fields — the codebase is small enough to fork.
Standard HID input works out of the box. USB barcode scanners, HID-keyboard cash drawers, and ESC/POS-compatible receipt printers all integrate through the browser as standard input devices. No driver layer, no proprietary daemon.
— The Last Page —

Deploy in sixty seconds.
Ring up your first sale before the kettle boils.

One git clone. One docker compose up -d. One open browser tab. The full stack is yours, forever.

Free · forever Self-hosted · your data MIT · open source Docker · one command