Мы сталкивались с типичной болью: гость сканирует QR, листает меню, добавляет блюда, нажимает «Заказать» — и ничего не происходит. Wi-Fi упал, заказ потерян. Наш опыт в создании ресторанных решений подсказывает: надёжная real-time синхронизация и корректная обработка сбоев — ключ к успеху.
За годы работы (свыше 10 проектов в HoReCa) мы выработали архитектуру, которая экономит до 20% ФОТ и увеличивает средний чек на 15–30% за счёт сокращения времени обслуживания и upsell-подсказок. Технологический стек: Flutter 3.x для клиента, Laravel 10 с Broadcasting для сервера, PostgreSQL 15 и Redis 7 для хранения и кэширования. Используем WebSocket для мгновенной передачи данных.
Бесшовная синхронизация заказов через WebSocket
Заказ из приложения должен мгновенно появиться на кухонном дисплее (KDS). Мы используем WebSocket-соединение: приложение отправляет заказ → Laravel Broadcasting публикует событие в канал кухни → KDS получает событие и показывает новую позицию. Если за одним столом несколько устройств (планшеты и телефоны большой компании), заказы агрегируются в единый kitchen ticket. Идентификатор сессии стола — ключ агрегации. WebSocket обеспечивает задержку менее 100 мс, что в 5 раз быстрее HTTP-опроса.
| Компонент | Технология | Версия |
|---|---|---|
| Клиент | Flutter (или PWA для QR-режима) | 3.x |
| Сервер | Laravel + Broadcasting | 10 |
| БД | PostgreSQL + Redis | 15, 7 |
| Push | FCM | последняя |
| Касса | iiko / r_keeper / Poster | REST API |
Что делать при потере соединения?
Критичный момент: гость нажал «Заказать», ответа нет (Wi-Fi упал). Приложение должно показать состояние «Заказ отправляется» с повторными попытками через экспоненциальный backoff, а не молча потерять заказ или выдать «Ошибка, попробуйте снова». Мы реализуем Retry с увеличивающимся интервалом (1с, 2с, 4с…) до 30 секунд — этого достаточно для восстановления связи. Если два гостя одновременно добавляют одно и то же блюдо, сервер использует оптимистичную блокировку — последняя операция побеждает, и клиент получает обновлённое состояние.
Синхронизация корзины между устройствами стола
Если несколько человек за столом делают заказ с разных устройств, корзина — это общее состояние на сервере, а не локальный список. При добавлении позиции любым участником — все устройства стола получают обновление через WebSocket. Архитектура меняется: вместо локального HydratedBloc — серверная корзина с WebSocket-подпиской, optimistic update на клиенте и подтверждение с сервера. Данные шифруются, канал защищён сертификатом.
Идентификация стола
QR-код на каждом столе содержит URL с table_id или зашифрованным токеном сессии. При сканировании открывается либо веб-версия в браузере (без установки), либо Universal Link в установленное приложение. Для планшетного режима — kiosk mode (Android Task Locking / iOS Guided Access), всегда открытый на нужном столе.
Интеграция с кассой
Готовый заказ попадает в кассовую систему через адаптер на Laravel: трансформация под формат кассы → POST в API (обычно REST). Обратный поток — статус «блюдо готово» из KDS → push на устройство гостя через FCM.
Процесс работы
- Аналитика — изучаем процессы, количество столов, тип устройств (планшеты/личные телефоны), кассовую систему.
- Проектирование — архитектура real-time: WebSocket vs SSE, выбор стека, схема данных.
- Разработка — реализация клиента (Flutter/PWA) и сервера (Laravel).
- Тестирование — нагрузочное (500+ одновременных заказов), сценарии разрыва связи.
- Деплой — App Store / Google Play, настройка push, KDS, кассы.
Сравнение клиентских решений
| Характеристика | PWA | Нативное (Flutter) |
|---|---|---|
| Установка | Не требуется | Требуется |
| Push-уведомления | Ограниченно (только Android) | Полная поддержка |
| Доступ к API устройства | Ограничен | Полный |
| Скорость разработки | Быстрее | Дольше |
| Рекомендуется | Для быстрого старта | Для сложных сценариев |
Что входит в работу
- Исходный код приложения (клиент + сервер).
- Настройка CI/CD, деплой в магазины.
- Интеграция с кассовой системой (до 2 адаптеров).
- Документация по архитектуре и API.
- Обучение персонала (2–3 часа).
- Гарантия 6 месяцев на критические баги.
Сроки и стоимость
Базовая версия (QR, меню, корзина, отправка на кухню) — от 12 недель. Полный комплект с мультиустройственной корзиной и интеграцией кассы — до 18 недель. Стоимость рассчитывается индивидуально — напишите нам, и мы оценим проект за 2 дня. Свяжитесь с нами для детального обсуждения вашего проекта — мы подготовим предложение с учётом ваших особенностей.
Почему выбирают нас?
На рынке 5+ лет, реализовано 10+ решений для HoReCa. Гарантируем соблюдение App Store Review Guidelines (Section 4.2, 5.1) и требований Google Play. Предоставляем сертификаты code signing, настраиваем push-уведомления (APNs / FCM). Наш опыт гарантирует надёжную работу под нагрузкой.







