Mobile App Development for Cinema
A cinema app is a ticket service with strict reliability requirements: when user in ticket queue selects seat for a blockbuster on release day, they won't wait 5 seconds for hall scheme to load and tolerate "network error".
Hall Scheme and Seat Selection — Most Loaded Part
Interactive hall scheme with 200+ seats is not "draw circles in Flutter". Problems:
Race condition on simultaneous purchase. Two users select seat A7 and simultaneously hit "buy". Without temporary seat blocking, both pay — two people show up with identical tickets. Solution: SELECT FOR UPDATE SKIP LOCKED on PostgreSQL during reservation, seat moves to reserved status for 10 minutes, then — confirmed after payment or available on timeout.
Realtime occupancy update. While one user selects seat, others also view scheme. Polling every 5 seconds for updates is harsh on server under high load. WebSocket or Server-Sent Events: on seat status change, server pushes event to all clients viewing that session.
Scheme rendering. Flutter: CustomPainter for hall rendering with zoom support (InteractiveViewer) and tap-detection for specific seat via hit-testing. For large halls (IMAX, 500+ seats) — Canvas rendering with virtual scrolling of visible rows, otherwise FPS drops.
Tickets and Offline
Ticket QR must work offline. User bought ticket — QR saved locally in Hive. QR validation at entry: scanner checks signature (HMAC-SHA256 or JWT), doesn't require internet per pass. Important: if internet fails at entry moment on premiere night — hundreds stuck.
PKpass / Google Wallet: adding ticket to Apple Wallet or Google Wallet — competitive advantage. PKpass file generated server-side, signed with Apple Certificate, passed via url_launcher to open in Wallet. Convenience: ticket appears in notifications on geofence approach.
Loyalty Program
Accumulating points for purchases — standard. Server logic: 1 ruble = 1 point, pay with points up to 50% of ticket cost. On client: show balance and apply on payment via promo_code or loyalty_points parameter in payment request.
Tech Stack
Flutter + BLoC. cached_network_image for movie posters (don't load every time). Payment: Stripe / YooKassa with Apple Pay and Google Pay — native sheet, no browser redirect. Firebase Analytics for funnel: session selected → seat selected → payment started → completed. Pushes: FCM reminder 2 hours before.
Integrations with POS Systems
Real cinemas work with KINOPLAN, 1C:Cinema, Cinema3000. Each has own API for schedule and seat sync. Without this integration — double sales between register and app. Clarify which system on project start.
Timeline
MVP (schedule, hall scheme, payment, QR tickets): 12–16 weeks. With loyalty, Apple/Google Wallet, realtime seat updates, POS integration: 18–24 weeks. Cost depends on existing POS system integration complexity.







