Розроблення мобільного додатку для замовлення з-за столика у ресторані
Гість сідає, сканує QR-код або бере планшет, листає меню, додає блюда в кошик та надсилає замовлення на кухню — без виклику офіціанта. На виході — економія на персоналі та зростання середнього чека (люди легше додають позиції, коли не треба нікого чекати). Але за цією простотою ховається real-time синхронізація між кількома пристроями та кухонним дисплеєм.
Архітектура real-time замовлень
Замовлення з додатку має мгновенно з'явитися на кухонному дисплеї (KDS — Kitchen Display System). Це WebSocket-соединение: додаток надсилає замовлення → Laravel Broadcasting публікує подію в канал кухні → KDS отримує подію та показує нову позицію.
Якщо стіл розбитий на кілька пристроїв (велика компанія, у кожного свій планшет або телефон) — замовлення зі столу агрегуються в один kitchen ticket. Ідентифікатор сесії столу — це ключ агрегації.
Критичний момент: що робити при втраті соединения. Гість додав блюда, натиснув "Замовити" — відповіді немає (Wi-Fi на планшеті впав). Додаток має показати стан "Замовлення відправляється" з повторними спробами через exponential backoff, а не мовчки втратити замовлення або вивести "Помилка, повторіть спробу".
Синхронізація кошика між пристроями столу
Якщо кілька людей за столом роблять замовлення з різних пристроїв, кошик столу — це загальний стан на сервері, а не локальний список у додатку. При додаванні позиції будь-ким з учасників — всі пристрої столу отримують оновлення через WebSocket.
Це змінює архітектуру: замість HydratedBloc (локальний стан кошика) — серверний кошик з WebSocket-підпискою. Кожна зміна — optimistic update на клієнті + підтвердження з сервера.
Ідентифікація столу
QR-код на кожному столі — це URL з параметром table_id або зашифрованим токеном сесії. При сканування відкривається або веб-версія в браузері (без встановлення), або deep link у встановлений додаток.
Для планшетного режиму (планшет закріплений за столом) — додаток запускається в kiosk mode (Android Task Locking / iOS Guided Access), завжди відкритий на потрібному столі, не потребує авторизації гостя.
Інтеграція з касою
Готове замовлення має попасти в касову систему — iiko, r_keeper, Poster. Більшість мають REST API або webhook. Реалізуємо адаптер на Laravel: замовлення з мобільного додатку → трансформація під формат касси → POST в API касси. Зворотний потік — статус "блюдо готово" з KDS → push на пристрій гостя.
Стек: Flutter 3.x (або PWA для QR-режиму без встановлення), Laravel 10 + WebSocket, PostgreSQL, Redis, FCM, інтеграція з касою через REST API.
Терміни
Додаток з замовленням з-за столика, real-time синхронізацією та KDS — від 12 до 18 тижнів. З інтеграцією касової системи та мультиустройственною кошиком — ближче до 18 тижнів.
Вартість розраховується індивідуально після аналізу вимог.







