Forward-only migrations
Customer app, POS, kitchen display, door scanner, lobby signage, and a distributor-grade ledger — all running on one source of truth, in three languages, on ten payment rails. Battle-tested at City Cinema Sulaymaniyah and Mall of Kirkuk. Now licensable to your chain.
From the marketing site your customers browse to the thermal printer at counter 3 — every screen at your venue runs on the same domain core, the same auth, the same ledger. Add a branch in an afternoon, not a quarter.
Discovery, booking, gift cards, signage. Server-rendered for speed, ISR-cached for Iraq's connectivity profile.
LiveTicket QR with re-entry state, offline cache, secure-store tokens, and a custom aperture splash.
Cashier sells tickets + F&B in one flow. Switch IQD↔USD on a locked daily rate. Drives printer, drawer, scanner.
Camera-driven QR reader with HMAC-SHA256 verification on every scan. Re-entry tracked: unused → inside → stepped_out → inside.
Live order queue grouped by prep state. Recipe-as-data deducts ingredients as orders move. In-seat F&B routing in.
Programming, scheduling, distributor settlement, ledger, reports, promotions, corporate accounts, feature flags.
Six surfaces, one Postgres. Every booking, every refund, every cup of popcorn flows into a double-entry ledger that reconciles nightly. No spreadsheet shadow ledger. No "we'll fix it Monday." No reconciliation fights with distributors.
Redis holds the live state. Postgres records it durably. Live state fans out to every client in under a second. Three customers can't book D-7 at the same instant. Nobody calls support angry.
Iraqi customers don't all use Visa. Some use FIB, some ZainCash, some QiCard, and some hand the cashier a stack of dinars. CinemaOS speaks all of them — including a 2-hour cash-pickup flow with WhatsApp/SMS confirmation.
Single payment-provider interface. New rail = one adapter + webhook route. Idempotency keys on every attempt. Forensic attempt log written before each gateway call.
CinemaOS produces Comscore-format CSVs and per-distributor Excel templates straight out of the ledger. Rental %, house nut, escalators — all encoded as data. Settlement that used to take a finance team a week, now runs nightly.
A bare-metal HTTP service binds to localhost:4000 on every POS terminal. Print a ticket, print a receipt, kick the cash drawer, beep the scanner — one HTTP call. Driver-isolated. Locked to loopback. Survives a browser refresh.
Every venue runs an edge-node on a mini-PC. F&B orders queue locally, kitchen displays keep printing, the cash drawer keeps kicking. When the WAN comes back, the queue flushes upstream — idempotency keys mean nothing double-posts.
The boring things, done right. Argon2id password hashes (not bcrypt). HMAC-SHA256 ticket signatures (forge-proof). Per-app session cookies (no cross-app contamination). 2FA via TOTP or WhatsApp OTP — user picks. RTL throughout, in the script your patrons read.
No login, no demo data setup. Open the live admin and actually use it — schedule a film, add a promotion, edit the FX rate, toggle a feature flag. Changes persist in your browser; reset anytime.
DEMO PREVIEW — six pages out of the full HQ console (overview · scheduler · movies · promotions · FX · flags). Seeded data; not a real production instance. Some flows are stubs.
Tell us about your screens, your distributor mix, and your current stack. We'll set up a 30-minute walkthrough — POS, ledger, scheduler, scanner, and the bits that matter to you.