M15 Catering — повний модуль бронювання кейтерингу для WordPress
Для ресторану M15 Sopot ми створили дедикований модуль кейтерингу для WordPress, який обробляє повний цикл бронювання — від першого кліку клієнта, через вибір меню в 12-16 панелях конфігуратора, калькулятор цін у реальному часі з ПДВ, інтеграцію з Paynow, автоматичні листи, до бронювання дати в календарі доступності. Три окремі конфігуратори: весілля, сімейні події, корпоративні події. У продакшні під /rezerwacja-cateringu/.
Клієнт та бізнес-контекст
M15 Sopot — гастро-рекреаційний комплекс на пляжі Сопота, який окрім ресторану та саун надає кейтерингові послуги для великих подій: весілля, дні народження, причастя, корпоративні події, поминки. Клієнт потребував системи онлайн-бронювання кейтерингу, що замінила б ручні розрахунки телефоном та email.
Раніше кожне бронювання виглядало так: клієнт телефонував, описував вимоги, працівник M15 рахував кошторис у Excel, надсилав email, клієнт надсилав корекції. Цикл тривав 2-5 днів. M15 хотів системи, що дозволяє клієнту самостійно сконфігурувати кейтеринг за 15-30 хвилин онлайн.
Додатково система мала інтегруватися з існуючим сайтом M15, обробляти GDPR, генерувати замовлення в WooCommerce та блокувати дні в календарі.
Виклик
Кейтеринг — не класичний продукт. Весілля вимагає рішень про тип меню, 3 тири закусок, супи, буфети, салати, десерти, Open Bar пакети, дитяче меню в 2 вікових групах. Загалом ~50 панелей рішень з 100+ полями.
Найскладніше: калькулятор цін у реальному часі — кожна зміна в одному з 50 панелей має миттєво перерахувати весь кошторис з урахуванням дітей, сервісу 10%, ПДВ 8%/23%, мінімум 10 000 PLN.
Третя вимога — GDPR та податкове право: 3 обов'язкові чекбокси, audit trail (IP, User-Agent, timestamp), валідація NIP, інтеграція з Paynow.
Конкретні вимоги
- 3 окремі конфігуратори: весілля (12 панелей), сімейні події (12), корпоративні події (16 з ПДВ)
- Калькулятор цін у реальному часі зі sticky sidebar
- Логіка дітей: 0-3 безкоштовно, 3-10 з 50% опцією
- Сервіс 10% з різним обсягом
- ПДВ 8%/23% з пропорційним сервісом
- Валідація NIP алгоритмом контрольної суми
- Календар доступності в адмін-панелі
- Paynow API з force_all_paynow_gateways фільтром
- Manual approval для corporate lunch
- Ідемпотентність листів
- GDPR audit trail
- Клікабельна навігація кроків + localStorage state
- WooCommerce HPOS
5-місячний процес реалізації
Розмір проєкту вимагав систематичного підходу в 5 фазах.
Discovery та аналіз цінових документів
3 тижніВоркшопи з M15, аналіз ~30 PDF-сторінок з цінами пакетів, визначення конфігураторів та flow.
UX/UI дизайн + інтерактивний прототип
4 тижніДизайн 3 конфігураторів з панеллю навігації, sticky sidebar з калькулятором.
Core розробка: 3 конфігуратори + калькулятор
8 тижнівРеалізація в PHP 8 + JavaScript ES6+ на WordPress + WooCommerce. localStorage state manager.
Інтеграції: Paynow, WooCommerce, календар, листи
4 тижніPaynow API, WooCommerce замовлення, FullCalendar.js, система 2 листів.
GDPR, адмін-панель, тести, деплой
3 тижніGDPR audit trail, custom meta box, сторінка регламенту, повні E2E тести, продакшн-деплой.
Технічне рішення
Стек: WordPress + WooCommerce HPOS + custom plagin (PHP 8) + JavaScript ES6+ + FullCalendar.js + flatpickr + Paynow API. Plagin вбудовується в WooCommerce без порушення роботи магазину — фільтри активні лише для замовлень з `_m15_catering_type` мета.
Архітектура калькулятора цін базується на reactive state manager в localStorage — кожна зміна оновлює state, що пропагується до sticky sidebar.
Найскладніший елемент: пропорційний розподіл сервісу 10% для ПДВ 8%/23% у корпоративних подіях. Їжа 8%, алкоголь 23%, сервіс 10% розподілений пропорційно.
Чому WordPress plagin, а не окремий додаток?
M15 вже має сайт на WordPress + WooCommerce. Plagin вбудовується нативно.
Чому лише Paynow PBL, а не BLIK і картки?
BLIK і картки мають ліміти сум, недостатні для весільного кейтерингу.
Чому state у localStorage, а не серверна сесія?
Клієнт заповнює 50 панелей 15-30 хвилин. localStorage працює на стороні клієнта.
Чому авто-блокування, але ручне має пріоритет?
Авто-блокування запобігає дубльованим бронюванням. Але іноді M15 потребує блокування з інших причин.
Ключові функції
Plagin покриває повний цикл життя замовлення кейтерингу.
3 дедиковані конфігуратори (весілля, сімейні, корпоративні)
Весілля: 12 панелей. Сімейні: 12 панелей. Корпоративні: 16 панелей з ПДВ-рахунком.
Калькулятор цін у реальному часі в sticky sidebar
Кожна зміна миттєво перераховує весь кошторис.
Логіка цін для дітей
Весілля: 0-3 безкоштовно або 170 PLN, 3-10 з 50% опцією. Корпоративні: 2 опції × 170 PLN.
ПДВ 8%/23% з пропорційним сервісом
Корпоративні події: їжа 8%, алкоголь 23%, сервіс 10% розподілений пропорційно.
Календар доступності (адмін + клієнт)
FullCalendar.js в адмін-панелі з ручним блокуванням + авто-блокуванням.
Інтеграція Paynow API (лише PBL)
Фільтр активний лише для кейтерингу. 10% передоплата або повна оплата.
Manual approval для corporate lunch
On-hold статус для замовлень, що потребують підтвердження.
Система листів (клієнт + ресторан)
Лист клієнту негайно + другий після оплати. Лист на marketing@m15.sopot.pl з повним розписом.
WooCommerce HPOS
Сумісність з найновішою архітектурою WooCommerce.
GDPR + audit trail
3 обов'язкові чекбокси з audit trail (IP, User-Agent, timestamp).
Клікабельна навігація + localStorage
Панель навігації кроків клікабельна в обох напрямках.
Додаткові послуги (DJ, намет, транспорт, меблі)
DJ, намет 4 розміри, транспорт 3 рівні, обслуговування, меблі 10 позицій.
Технологічний стек
Plagin базується на перевіреному стеку WordPress + WooCommerce.
Результати
Plagin впроваджено у продакшн на m15.sopot.pl/rezerwacja-cateringu/ і обробляє повний flow бронювання.
З перспективи M15 три ефекти найважливіші: (1) редукція циклу бронювання з 2-5 днів до 15-30 хвилин, (2) автоматизація бухгалтерії через WooCommerce замовлення, (3) усунення помилок ціноутворення.
Plagin обробляє і нетипові сценарії: поминки, корпоративна подія з ПДВ-рахунком, весілля з 50 дітьми. Всі сценарії E2E протестовані.
Що далі
Plagin активно розвивається — версія v5.53.3 — поточний продакшн. Плани: автоматичні пропозиції пакетів, POS-інтеграція, експорт календаря.
Архітектура plagina універсальна для адаптації до інших ресторанів. ByteWave розглядає реліз як комерційний продукт.