Mobile App Development for Cinemas: From Hall Maps to QR Tickets
We develop mobile apps for cinemas that handle peak loads on premiere day. When a customer tries to buy a ticket for a blockbuster at the box office, they won't wait 5 seconds for the hall map to load — our solutions ensure instant rendering and stable performance even with thousands of concurrent requests. Our experience: 10+ years in mobile development, dozens of cinema projects.
Why Seat Selection is the Most Critical Part
An interactive hall map with 200+ seats is not just "drawing circles in Flutter". We encounter three key problems:
Race conditions during simultaneous purchases. Two users select seat A7 and click "buy" at the same time. Without temporary locking, both will pay — and two people will arrive with identical tickets. Solution: SELECT FOR UPDATE SKIP LOCKED on PostgreSQL during reservation; seat transitions to reserved status for 10 minutes, then confirmed after payment or available on timeout.
Real-time occupancy updates. While one user selects a seat, others are viewing the map. Polling every 5 seconds is brutal for the server under high load. Use WebSocket or Server-Sent Events: when a seat status changes, the server pushes an event to all clients viewing that session's map. WebSocket is 10x more efficient than polling under high load.
| Method | Latency | Server Load | Recommendation |
|---|---|---|---|
| Polling | 5 s | High | For testing |
| WebSocket | <100 ms | Low | Production |
Map rendering. On Flutter: CustomPainter for drawing the hall with zoom support (InteractiveViewer) and tap detection of specific seats via hit-testing. For large halls (IMAX, 500+ seats) — Canvas rendering with virtualization of visible rows, otherwise FPS drops when scrolling.
How Offline QR Validation Works
The QR ticket must work offline. The user buys a ticket — the QR is saved locally in Hive. QR validation at the entrance: the cinema scanner checks the signature (HMAC-SHA256 or JWT), no internet required for each check. This is crucial: if the internet goes down at the entrance during a premiere, hundreds of people shouldn't be stuck.
PKpass / Google Wallet: adding the ticket to Apple Wallet or Google Wallet is a competitive advantage. The PKpass file is generated on the server, signed with an Apple Certificate, and passed via url_launcher to open in Wallet. Convenience: the ticket appears in notifications when approaching the cinema via geofencing.
Loyalty Program and Monetization
Accumulative points for purchases — standard. Server logic: 1 ruble = 1 point, payment by points up to 50% of ticket cost. On the client: display balance and apply during payment via promo_code or loyalty_points parameter in the payment request. Additionally: push notifications about new promotions, reminders about the session 2 hours before via FCM.
Stack and Optimizations
Flutter + BLoC. cached_network_image for posters (no reloading each time). Payment: Stripe / YooKassa with Apple Pay and Google Pay support — native sheet, no browser redirect. Firebase Analytics for funnel: session selected → seat selected → payment started → payment completed. Pushes: FCM for session reminder 2 hours before.
| Component | Technology |
|---|---|
| UI | Flutter + BLoC |
| Network | Dio, GraphQL |
| Database | Hive (cache), PostgreSQL |
| Push | Firebase Cloud Messaging |
How Box Office Integration Prevents Double Sales
Real cinemas work with KINOPLAN, 1С:Cinema, Cinema3000. Each has its own API for synchronizing schedules and seat states. Without this integration — double sales between the box office and the app. Specify the system used at the project start.
What the Work Includes
- Project documentation (database schema, architecture, API contracts)
- Access to App Store Connect and Google Play Console
- Training of cinema staff (administration, session moderation)
- Technical support for 3 months after release
- Full source code is transferred
Timelines and Guarantees
MVP (schedule, hall map, payment, QR tickets): 12–16 weeks. With loyalty, Apple/Google Wallet, real-time updates, and box office integration: 18–24 weeks. The code is covered by a 12-month warranty. Contact us to evaluate your project — we'll provide accurate timelines and cost.
Get a consultation right now — we'll discuss your needs and propose a solution.







