I developed the customer ordering flow and the staff workflows behind it,
connecting tablet menus, table-specific orders, Stripe payments, and kitchen
dispatch while keeping payment and preparation states separate.
Internal-test product. Ordering, Stripe, CloudPRNT, and tablet caching were part of my Circle POS work. These captures show the October 2026 demo refresh with test orders, not live restaurant usage.
Working Product
One paid order, from customer to staff.
Table-aware ordering, Stripe test checkout, and kitchen fulfillment in 44 seconds.
Test order #35 ($8.79), from Stripe sandbox checkout to staff completion. Edited for pacing, with synthetic English narration and optional captions. A print job was queued; no physical printer was connected.
Order review and paymentQuantity changes, kitchen notes, and itemized totals lead into Stripe Checkout.
Staff fulfillmentActual application capture with stored test orders. New, preparing, ready, and completed tickets share one operational view.
Operating Flow
One order, carried across five connected steps.
01
Discover
Guests browse a bilingual menu on a portrait Android tablet.
02
Order
A table-specific QR opens the mobile menu, cart, and order notes.
03
Pay
Stripe checkout records payment separately from kitchen preparation.
04
Fulfill
Staff move tickets from new to preparing, ready, and completed with table context.
05
Print
Accepted orders create CloudPRNT jobs for compatible kitchen printers.
Source Code
Ordering service and tablet app.
Two public repositories cover the full workflow: the TypeScript ordering service and the React/Capacitor tablet app. Implementation links below pair current code with its checks.
My Circle POS work covered the customer order flow, staff tools, and the tablet app. These are the implementation decisions behind them.
01
Keep payment and preparation as separate states
A paid order can still be waiting for the kitchen. I integrated Stripe Checkout with PostgreSQL-backed orders, preserving table details and customer notes while tracking payment separately from preparation. Staff can follow kitchen progress without treating a completed ticket as proof of payment.
Connect accepted orders to printer-retrievable jobs
I implemented CloudPRNT dispatch records, polling, and ticket-retrieval endpoints. Compatible printers can retrieve formatted orders with table details and kitchen notes, without relying on a staff browser's print dialog.
I separated local layout and media caching from remote refresh, using user-scoped cache keys. Previously cached tablet content remains available when refresh fails; content that has never been cached still needs a connection.
A saved menu layout needs to outlast its media links. I persist asset paths in the layout and resolve signed URLs at runtime, keeping temporary access URLs out of the saved layout data.
Added during the October 2026 AI-assisted engineering review, separately from the original Circle POS work. The ordering repository has 113 application checks, 14 dependency-policy tests, and deployed integration evidence.
01
The browser cannot choose the price
The server resolves active catalog items and option membership, calculates integer-cent totals, and rejects stale or manipulated quotes before saving an order. Stripe receives the same canonical snapshot. The deployed test rejected a one-cent quote without creating an order.
Raw-body Stripe signatures are verified, then the server checks the current session's order binding, amount, currency, and test mode. Eleven deployed checks cover pricing and expiry delivery without a redirect. A separate $8.79 test-card checkout succeeded, its completed webhook returned 200, and eight follow-up checks confirmed matching payment records and unchanged state after duplicate delivery.
The paid test visited the return page; the no-return deployment check used an expiry event. Neither establishes production readiness.
Server-verified sessions, store-scoped queries, and guarded state changes have 64 policy tests. Seventeen deployed access checks passed, including denied anonymous reads, rejection of editable role metadata, and blocked access to another store's orders. The customer menu remains public.
Reproducible builds and explicit dependency review
Ordering CI runs zero-warning lint, 113 application tests, 14 audit-policy tests, source-pattern checks, dependency audits, and a build. The selector-parser advisory is patched; one unpatched development-only advisory remains under a dated exception. Policy tests verify that new or runtime findings, expiry, and audit failures block the build. The tablet's static build and production dependency audit also pass after the Capacitor update.
The narrated demo verifies one paid test order through staff completion; this is not live store adoption or an automated full-lifecycle suite. Automated lifecycle coverage, transactional order creation and print dispatch, checkout retry protection, refunds, rate limiting, and physical-printer recovery remain open. Tax is a fixed demo rate. Patched native dependencies need a fresh device build; CI checks the web export only. Full-tree audit still reports seven development-only findings from the unpatched braces advisory; runtime audit reports zero. Full verification scope →