Restaurant Operations Platform
iPad restaurant system -- floor plans, payments, and receipt printing over Bluetooth
Restaurant Operations Platform
A full-stack restaurant management platform distributed to restaurant operators. Led iOS development across the MVVM codebase. The iPad app handles floor plan visualization, table management, guest reservations, messaging, and receipt printing over BLE. A companion web platform provides the API and admin dashboard.
iOS (iPad-first) + Web
Platform
Lead iOS Engineer
Role
From Floor Plan to Service
Codebase Onboarding & Feature Ownership
Joined a large, mature MVVM codebase and quickly took ownership of iOS development. Established patterns for new feature development, coordinated with the web team on API contracts, and maintained consistency across the Swift project.
Floor Plan & Table Management
The core of the app is a visual floor plan where staff drag, assign, and manage tables in real time. Guests get seated, courses tracked, and checks managed from an interactive canvas. iPad-first design means the UI needs to work for quick taps during a dinner rush.
Receipt Printing over BLE
Integrated a third-party printer SDK for thermal receipt printing over Bluetooth. The printer package handles discovery, connection management, receipt formatting, and print queuing. Network and BLE printing paths are both supported since restaurants use both.
Payments & Reservations
Stripe handles payment processing. The reservation system manages booking, waitlists, guest profiles, and messaging. Supabase backs the real-time data layer. Three environment schemes (Local, Staging, Production) keep everything cleanly separated.
Speed Meets Precision
iPad-First Interactive Floor Plans
Restaurant staff manage their dining room from a visual floor plan. Tables show status at a glance: available, seated, ordering, dessert, check requested. Drag to rearrange, tap to seat, long-press for details. The interface is optimized for speed because servers are using it mid-service, not sitting at a desk.
BLE Receipt Printing
Thermal receipt printers connect over Bluetooth Low Energy using a third-party printer SDK. A dedicated Printer package handles device discovery, connection lifecycle, receipt template formatting, and a print queue for when multiple checks close simultaneously. Falls back to network printing when BLE is unavailable.
Multi-Environment MVVM at Scale
A large, mature MVVM codebase organized across SPM packages with strict dependency boundaries. Three environment schemes (Local, Staging, Production) with Arkana-managed secrets. SwiftLint and SwiftFormat enforce consistency across the team. The architecture scales because every package owns one concern and the boundaries are enforced at compile time.
Under the Hood
Key Technical Decisions
BLE Printing
Receipt printers are finicky. The printer SDK wraps CoreBluetooth with printer-specific commands for text formatting, barcode rendering, and paper cutting. I built a queue system because closing three tables at once sends three print jobs simultaneously, and the printer handles one at a time. Failed prints retry automatically.
iPad-First Design Constraints
iPad apps have more screen real estate but different interaction patterns. The floor plan needs to be usable one-handed while carrying plates. Buttons are larger, touch targets are generous, and critical actions (seat, check, print) are always one tap away. iPhone support is secondary and adapts the layout rather than redesigning it.
MVVM at Scale
Managing a large Swift MVVM codebase requires discipline. View models stay thin, coordinators handle navigation, and service layers are protocol-based for testability. Each SPM package enforces its own dependency boundaries. The codebase works because the patterns are consistent, not because the architecture is clever.
What I Learned
Receipt printers will humble you
They disconnect randomly, have tiny buffers, and every model has quirks. The print queue was an afterthought that became essential the first time three tables closed at once and only one receipt came out. Hardware integration is never as simple as the SDK docs suggest.
iPad-first is a different design discipline
More screen space doesn't mean more features visible. It means bigger touch targets, one-hand-friendly layouts, and interfaces that work when you're standing and moving. I redesigned the floor plan interaction model twice before it felt right during actual service.
MVVM scales when you enforce boundaries
A large Swift codebase sounds unmanageable, but the SPM package structure keeps each module focused. The key is consistency -- same patterns everywhere, strict dependency rules, and no shortcuts. When the whole team follows the same conventions, a large codebase stays navigable.
Enterprise AI Platform
Production AI platform routing across 6 LLM providers with built-in safety