Розробка мобільного додатку для кінотеатру
Додаток кінотеатру — це білетний сервіс з жорсткими вимогами до надійності: коли користувач у черзі у касира вибирає місце на блокбастер у день премьєри, він не буде чекати завантаження схеми залу 5 секунд та терпіти «помилку мережі».
Схема залу та вибір місць — найнавантажена частина
Інтерактивна схема залу з 200+ місцями — це не «намалювати кружочки у Flutter». Проблеми:
Race condition при одночасній покупці. Два користувачи вибрали місце A7 та одночасно натиснули «купити». Якщо не реалізувати тимчасову блокування місця, обидва платять — у двох людей однакові квитки. Рішення: SELECT FOR UPDATE SKIP LOCKED на PostgreSQL при бронюванні, місце переходить у статус reserved на 10 хвилин, потім — confirmed після оплати або available при таймауті.
Реалтайм оновлення займеності. Поки один користувач вибирає місце, інші теж дивляться схему. Оновлювати через polling кожні 5 секунд — жестоко для сервера при високій навантаженості. WebSocket або Server-Sent Events: при зміні статусу місця сервер пушить подію всім клієнтам, що дивляться цей сеанс.
Рендеринг схеми. На Flutter: CustomPainter для відрисування залу з підтримкою zoom (InteractiveViewer) та tap-визначення конкретного місця через hit-testing. Для великих залів (IMAX, 500+ місць) — Canvas-рендеринг з віртуалізацією видимих рядів, інакше FPS падає при скролі.
Квитки та офлайн
QR-код квитка повинен працювати офлайн. Користувач купив квиток — QR зберігається локально в Hive. Валідація QR на вході: сканер на вході перевіряє підпис (HMAC-SHA256 або JWT), не вимагає інтернету для кожного проходу. Це важливо: якщо на вході впаде інтернет у момент премьєри — сотні людей не повинні застрягти.
PKpass / Google Wallet: додавання квитка в Apple Wallet або Google Wallet — конкурентне переваги. PKpass-файл генерується сервером, підписується Apple Certificate, передається через url_launcher для відкриття у Wallet. Зручність: квиток з'являється у сповіщеннях при приближенні до кінотеатру через геофенс.
Програма лояльності
Накопичувальні бали за покупки — стандарт. Серверна логіка: 1 рубль = 1 балл, оплата балами до 50% вартості квитка. На клієнті: відображення баланса та застосування при оплаті через promo_code або loyalty_points параметр у payment request.
Стек
Flutter + BLoC. cached_network_image для постерів фільмів (не грузити кожен раз). Оплата: Stripe / YooKassa з підтримкою Apple Pay та Google Pay — нативний sheet, без редиректу в браузер. Firebase Analytics для воронки: сеанс вибраний → місце вибрано → оплата розпочата → завершена. Pushes: FCM для напоминання про сеанс за 2 години.
Інтеграції з кассовим ПО
Реальні кінотеатри працюють з КИНОПЛАН, 1С:Кінотеатр, Cinema3000. У кожного своя API для синхронізації розписання та стану місць. Без цієї інтеграції — подвійна продаж між касою та додатком. Уточніть використовуване систему на старті проекту.
Часова шкала
MVP (розписання, схема залу, оплата, QR-квитки): 12–16 тижнів. З лояльністю, Apple/Google Wallet, реалтайм оновленням місць та інтеграцією з кассовим ПО: 18–24 тижні. Вартість залежить від складності інтеграції з існуючою касовою системою.







