DEMO · Свой проект

Дровяная

«Дровяная» — мой демо-проект: сайт пиццерии, где заказ можно написать словами, как другу. Фраза «две пепперони большие без лука и колу к семи на Ленина 5» превращается в чек, уходит на кухню и возвращается статусом клиенту — на страницу заказа и в Telegram. Внутри разбор текста, бот, панель кухни и админка с CRM.

Дровяная — демо-сайт пиццерии с заказом словами и панелью кухни
Сайт Дровяная с прокруткой

Задача

Показать, что заказ в общепите не обязан быть двадцатью тапами по карточкам: человек уже знает, чего хочет, и быстрее всего написать это одной фразой.

Собрать не витрину, а рабочий контур: заказ с сайта и из Telegram, кухня, статусы клиенту, управление меню и база клиентов — всё то, чем заведение пользуется каждый день.

Что сделано

  • Заказ обычной фразой: количество, размер, «без лука», добавки, время («к семи», «полдевятого», «через час»), адрес и самовывоз
  • Разбор понимает опечатки и текст, набранный в латинской раскладке
  • Черновик заказа собирается сразу под строкой: состав, цены, доставка, итог и вопросы, если чего-то не хватает
  • Меню из 24 позиций: пиццы, закуски, десерты и напитки, три размера, добавки — цена пересчитывается на лету
  • Колесо вкусов и карточки, где при выборе размера меняется сама пицца, а не масштаб фотографии
  • Корзина и оформление: доставка или самовывоз, время, комментарий курьеру
  • Страница заказа с живым статусом: «принят — готовим — готово — курьер выехал», без перезагрузки
  • Кнопка «получать статусы в Telegram» — дальше клиент не держит вкладку открытой
  • Повтор прошлого заказа одной кнопкой, с пересчётом по актуальным ценам
  • Telegram-бот: тот же разбор в чате, карточка заказа, подтверждение и уведомления о статусах
  • Мини-приложение в Telegram открывает сайт с той же корзиной
  • Панель кухни: колонки по статусам, новые заказы прилетают сами, звук на новый заказ, вход по паролю
  • Админка: редактор меню (цены по размерам, состав, синонимы для разбора, наличие, порядок, архив)
  • Админка: заказы с поиском и фильтрами, ручная смена статуса, настройки заведения — часы, зоны и цена доставки, минимальный заказ
  • CRM: карточки клиентов, сегменты «новые / постоянные / спящие», сумма и средний чек, заметки, выгрузка в csv
  • Сводка: выручка и средний чек за день и неделю, что заказывают, в какие часы приходят заказы
  • Карта доставки на Яндексе с зонами и ценой по каждой
  • Ограничения на разбор: лимиты по ip и на пользователя Telegram, отсев мусорных фраз до обращения к модели

Детали

Разбор устроен в два слоя. Сначала работают правила: они читают числа, размеры, время, адрес и сверяют слова с меню — включая опечатки и раскладку. Сверху подключается GigaChat через function calling. Если модель молчит, тормозит или выдумывает позицию, которой в тексте не было, заказ всё равно соберётся по правилам, а выдуманное отсеется.

На разбор навешаны лимиты: мусорные фразы до модели вообще не доходят, у каждого ip и каждого пользователя Telegram свой счётчик в час и в сутки. Демо открыто всему интернету, и оплачивать чужие развлечения я не собирался.

Кухня и страница заказа обновляются по SSE: сервер сам присылает изменение статуса, клиент ничего не опрашивает. Заказ, оформленный на сайте, появляется на кухне за долю секунды.

Меню лежит в базе, а не в коде: правки в админке сразу меняют витрину, корзину, разбор текста и ответы бота. Синонимы к позициям тоже правятся в админке — «ббк» или «острая с колбасой» начинают пониматься без релиза.

База — sqlite в режиме WAL: для заведения с сотней заказов в день этого хватает с большим запасом, а обслуживать нечего.

Деплой одной командой: сборка, выкладка по ssh в отдельный релиз, переключение симлинка, рестарт, health-check и автоматический откат, если новая версия не поднялась. 250 тестов на разбор текста гоняются до сборки.

Открыть Дровяная

Как это выглядит внутри

Строка заказа и собранный черновик: две пепперони без лука, кола, доставка на Ленина 5
Фраза словами превращается в чек. Если чего-то не хватает, сайт спрашивает.
Панель кухни: колонки «Новые», «Готовим», «Готово», «В пути» с карточками заказов
Панель кухни: заказы прилетают сами, статус двигается одной кнопкой.
Редактор меню в админке: список позиций с ценами по размерам и наличием
Админка: цены, состав, синонимы и наличие правятся без разработчика.
Страница заказа: номер, лента статусов и кнопка получать статусы в Telegram
Страница заказа: живой статус и переход в Telegram, чтобы не держать вкладку.

Услуги в этом проекте

Другие работы

Нужен такой же?

Расскажи задачу — отвечу в течение часа, назову срок и вилку цены. Если задачу лучше решить иначе, скажу об этом сразу.

Беру проекты в работу · отвечаю в течение часа