Now licensable · Built in Sulaymaniyah

The cinema
operating system.

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.

6
Surfaces, one source of truth
10
Payment rails wired
3
Languages — EN · AR · CKB
99.99%
Edge node uptime SLO
WEB · CUSTOMER
MOBILE · IOS+ANDROID
POS · COUNTER
SCANNER · DOOR
KITCHEN · KDS
SIGNAGE · LOBBY
FIB·ZAINCASH·QICARD·FASTPAY·ASIAHAWALA·PAYTABS·GEIDEA·VISA / MASTERCARD·STRIPE·CASH··POSTGRES·REDIS·DOUBLE-ENTRY LEDGER·HMAC-SIGNED TICKETS·EDGE-NODE F&B QUEUE·TWO-FACTOR AUTH·RTL-NATIVE·· FIB·ZAINCASH·QICARD·FASTPAY·ASIAHAWALA·PAYTABS·GEIDEA·VISA / MASTERCARD·STRIPE·CASH··POSTGRES·REDIS·DOUBLE-ENTRY LEDGER·HMAC-SIGNED TICKETS·EDGE-NODE F&B QUEUE·TWO-FACTOR AUTH·RTL-NATIVE··
28 tables
One Postgres source of truth
Forward-only migrations
Σ debits
= Σ credits
Reconciles every night
Every dinar accounted for
5 min
Two-layer seat lock
Redis-fast, Postgres-durable
9 roles
RBAC + per-app session isolation
Manager-PIN gates above threshold
The Six Surfaces

One platform.
Six screens at the cinema.

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.

01 / 06
WEB · NEXT.JS · ISR

Customer storefront

Discovery, booking, gift cards, signage. Server-rendered for speed, ISR-cached for Iraq's connectivity profile.

  • 3D alcove hero · scroll-driven canvas
  • Promo codes · Anti-bot challenge
  • Cash-at-counter pickup flow
CinemaOS web landing screenshot
02 / 06
MOBILE · EXPO SDK 54 · iOS+ANDROID

Native mobile

LiveTicket QR with re-entry state, offline cache, secure-store tokens, and a custom aperture splash.

  • Pulses gold when patron is inside
  • MMKV offline cache · banner on outage
  • Universal QR scanner (kiosk + gift-card)
CinemaOS mobile seat selection screenshot
03 / 06
POS · ISOLATED · IPAD / ALL-IN-ONE

Counter terminal

Cashier sells tickets + F&B in one flow. Switch IQD↔USD on a locked daily rate. Drives printer, drawer, scanner.

  • Combined ticket+F&B (CFS) flow
  • Kiosk-link: customer pays from their phone
  • Manager-PIN refunds + voids
CinemaOS POS concession screenshot
04 / 06
SCANNER · PWA · USHER PHONE

Door scanner

Camera-driven QR reader with HMAC-SHA256 verification on every scan. Re-entry tracked: unused → inside → stepped_out → inside.

  • Forge-proof signed tickets
  • Six result states with color codes
  • VIP in-seat order panel
CinemaOS usher scanner valid scan screenshot
05 / 06
KITCHEN · KDS · WALL-MOUNT

Kitchen display

Live order queue grouped by prep state. Recipe-as-data deducts ingredients as orders move. In-seat F&B routing in.

  • submitted → preparing → ready → delivered
  • Variance-tracked stocktakes
  • Per-shift kitchen finance
CinemaOS kitchen display screenshot
06 / 06
ADMIN · HQ CONSOLE · CHAIN-WIDE

HQ console

Programming, scheduling, distributor settlement, ledger, reports, promotions, corporate accounts, feature flags.

  • Drag-drop scheduler · auto-balance
  • Comscore CSV + per-distributor Excel
  • 25 feature flags · global or per-branch
CinemaOS HQ admin console screenshot
One Source of Truth

Every dinar
accounted for.

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.

Web booking
B_X9F2 · IQD 24,000
POS counter
CASH · IQD 18,000
Mobile app
FIB · IQD 36,000
Kitchen F&B
IN-SEAT · D-7
Refund · with PIN
REVERSAL · IQD 8,000
LEDGER
DOUBLE-ENTRY · IMMUTABLE
DAILY RECONCILIATION
Σdebits = Σcredits ✓
DISTRIBUTOR SETTLEMENT
Comscore CSV · Excel · auto
TILL CLOSE
Z-report per cashier
FX AUDIT
Every IQD↔USD logged
27 · Tables wired in 26 · Standardized audit actions 0 · Manual reconciliation steps
Live Seat Sync

Two-layer locking.
Three browsers. One truth.

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.

citycinema.iq/showtime/dune-3-2130 erbil · 21:14:08
SCREEN
D-7, D-8 · LOCKED · 04:42 LEFT
citycinema.iq/showtime/dune-3-2130 sulay · 21:14:09
SCREEN
E-6, E-7 · LOCKED · 04:41 LEFT
app · pos.kirkuk.cinemaos.local pos · 21:14:09
SCREEN
C-2, C-3, C-4 · CASHIER A. K.
YOUR SELECTION HELD BY ANOTHER CLIENT AVAILABLE SOLD
Built for the Region

Ten payment rails.
Three languages. Cash-aware.

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.

FIB
FIRST IRAQI BANK
● LIVE · IQD
ZainCash
WALLET
● LIVE · IQD/USD
QiCard
PROCESSOR
● LIVE · IQD
Visa / Mastercard
INTERNATIONAL
● LIVE · IQD/USD
NassWallet
WALLET
● LIVE · IQD
Stripe
FOR INTL. VISITORS
● LIVE · USD
Cash
2-HOUR PICKUP CODE
● LIVE · IQD
FastPay
WALLET
◇ V1.1 · IQD
AsiaHawala
REMITTANCE
◇ V1.1 · IQD
PayTabs · Geidea
+ YOUR PROCESSOR
◇ ADAPTER PATTERN

Single payment-provider interface. New rail = one adapter + webhook route. Idempotency keys on every attempt. Forensic attempt log written before each gateway call.

Distributor-Grade Financials

Your distributors
will love you.

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.

DUNE3_settlement_2026-05-08.csv EXPORTED · 03:14 IRT
film_id,distributor,branch,date,gross_iqd,house_nut_iqd,net_iqd,rental_bps,dist_share_iqd,exhibitor_share_iqd
DUNE3,Warner_MENA,SUL,2026-05-08,8420000,450000,7970000,5500,4383500,3586500
DUNE3,Warner_MENA,KIR,2026-05-08,3120000,200000,2920000,5500,1606000,1314000
MK17,WB_MENA,SUL,2026-05-08,2840000,300000,2540000,5000,1270000,1270000
ANRA,NEON,SUL,2026-05-08,1540000,200000,1340000,5000,670000,670000
BRUT,A24_MENA,KIR,2026-05-08,920000,120000,800000,5500,440000,360000
WICK,UPI_MENA,SUL,2026-05-08,3640000,400000,3240000,6000,1944000,1296000
-- TOTALS --
,,,,20480000,1670000,18810000,,10313500,8496500
FILM TERMS · DUNE 3
DISTRIBUTORWarner_MENA
RENTAL · WK 1–255%
RENTAL · WK 3+50%
HOUSE NUTIQD 450k / day
ESCALATOR+5% over 2M gross
RUN DATES22 MAY → 19 JUN
// per-day, per-branch
netBO = grossBO − houseNut
distShare = netBO × rentalBps ÷ 10000
exhibitor = netBO − distShare
Hardware-Aware

Plug it in.
It just works.

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.

  • ESC/POS thermal printer/print/ticket
  • Cash drawer kick/drawer/kick
  • Barcode scanner/scan/listen
  • X-report & Z-report/print/report
DRIVER · /apps/pos
CinemaOS POS — Hall A
localhost:3002 · cco_pos_session
HTTP · LOOPBACK ONLY
Hardware service
127.0.0.1:4000 · isolated
ESC/POS · 80mm
Thermal printer
TICKET · DUNE: PART 3
HALL 03 · SEAT D-7
FRI 22 MAY · 21:30
••• QR ▢▢▢ █▓░ ▢▢▢ •••
sig: a91fe...c33d
DRAWER · OPEN ON SUCCESS
Cash drawer
RJ12 · 24V trigger
CLOUD · UNREACHABLE
Edge node · KIR-01
EDGE NODE · LOCAL FALLBACK · MINI-PC IN VENUE
● ONLINE
▢ FNB · 21:42:18 ▢ FNB · 21:42:31 ▢ FNB · 21:43:02 ▢ FNB · 21:43:14 ▢ FNB · 21:43:29 ▢ FNB · 21:43:51
LOCAL QUEUE · 6 PENDING WILL FLUSH ON RECONNECT
Resilient by Design

Fiber goes down.
The show goes on.

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.

  • 01 Per-branch edge node — health, queue, sale, status surfaces
  • 02 Local ring buffer for offline F&B sales
  • 03 SyncService flushes upstream every 30s — idempotent posts
  • 04 Hardware service runs entirely on loopback — survives WAN loss
Security · I18N · Proof

Argon2id, HMAC, 2FA,
RTL-native.

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.

EN · LTR
Aa
Buffalo '66 (1998) poster
Now showing
Buffalo ’66
FRI 22 MAY · 21:30 · 35MM
AR · RTL
أب
Buffalo '66 (1998) poster
تُعرض الآن
بَفلو ٦٦
الجمعة ٢٢ مايو · ٢١:٣٠ · ٣٥مم
CKB · RTL · KURDISH
ئە
Buffalo '66 (1998) poster
ئێستا نمایش دەکرێت
بەفەلۆی ٦٦
هەینی ٢٢ی ئایار · ٢١:٣٠ · ٣٥مم
PASSWORDS
Argon2id
Memory-hard, side-channel resistant. Not bcrypt.
TICKETS
HMAC-SHA256
Every QR signed. Screenshots can't reuse.
2FA
TOTP or WhatsApp
Staff choose at login. 8 backup codes. Audit logged.
RBAC
9 roles · isolated
POS rejects non-cashiers. Scanner rejects customers. Edge middleware enforced.
Try It Live · No login

Click around the
HQ console. Right now.

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.

  • 01 Click any showtime block to shift it ±1 hour or cancel
  • 02 Add or delete movies — the schedule updates live
  • 03 Author a promo code, set scope + limit, pause/activate
  • 04 Lock today's IQD↔USD rate — POS picks it up
Open the HQ console → Jump to scheduler
LIVE · DEMO PREVIEW
CINEMAOS · HQ CONSOLE
Hover and click anywhere →
Open in full ↗
→ OVERVIEW
KPIs · branches · map
→ MOVIES
Add · edit · delete
→ PROMOTIONS
Author a code
Proof, In Production
We replaced four vendors and a finance team's worth of spreadsheets. Reconciliation is now a button. Distributors stopped calling.
L
Lana Hassan
CFO · CITY CINEMA · SULAYMANIYAH
11 days
MONTHLY CLOSE TIME
+38%
F&B ATTACH (IN-SEAT)
0
DOUBLE-BOOKED SEATS · 18 MO
2 branches
SUL · KIR · ON ONE LEDGER
Book a Demo

Let's see if it
fits your chain.

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.

REPLIES WITHIN 24H · NDA AVAILABLE
OR REACH OUT DIRECTLY
LET'S TALK
Research, policy, operations & strategic communications professional based in Iraq. Open to new opportunities and collaborations.