Кейс: Сайт + CRM

Сайт і CRM для комплексу «Ладомир»

Повний цикл для банно-готельного комплексу під Києвом: публічний сайт на Next.js із бронюванням і custom CRM для керування ресурсами, фінансами й персоналом. Одна кодова база, один деплой.

Головна сторінка сайту банно-готельного комплексу Ладомир — приватна лазня на дровах під Києвом ↗ Відкрити ladomyr.kiev.ua
30+
таблиць БД
18+
модулів CRM
Next.js 16
App Router
MFA + RBAC
безпека доступу

Задача

Діючому банно-готельному комплексу «Ладомир» під Києвом потрібні були одразу дві речі: сучасний публічний сайт, що приймає бронювання, і внутрішня система керування операціями — розкладом ресурсів, гостьовими рахунками, фінансами та персоналом. Це не запуск з нуля, а оцифрування бізнесу, що вже працює.

Специфіка ускладнює готові рішення: баня на дровах, купіль, альтанки та номери бронюються погодинно, з буфером між сеансами на прибирання й протоп, з пакетами й цінами, що залежать від дня та часу. Типовий booking-віджет цього не покриває.

Ціль: сайт, що перетворює відвідувача на бронювання, і система, у якій адміністратор веде весь операційний день — без Excel, паперових журналів і розрізнених чатів.

Чому custom CRM, а не готова SaaS

Коротка відповідь: жодна готова платформа не описує ресурси комплексу так, як вони працюють у реальності. Погодинні слоти з буфером, блокування ресурсів, пакети «баня + купіль + альтанка», динамічне ціноутворення, гостьові рахунки з дозамовленням — це доменна логіка, яку SaaS або не має, або дає ціною місячної підписки й вендор-лок-іну.

Рішення — одна кодова база на Next.js, де публічний сайт і CRM ділять типи, схему БД і деплой. Це дешевше в підтримці, узгоджене за даними й повністю належить бізнесу. Технологічний бік — у послузі розробки на Next.js.

Публічний сайт

Сайт на Next.js (App Router, SSR) показує послуги комплексу й веде до бронювання. Кожна сторінка рендериться на сервері — швидка й одразу індексована.

🔥

Послуги та номери

Окремі сторінки для лазні, басейнів, чану, купелі, альтанок і номерів — зі структурою під пошук і зрозумілою навігацією.

📅

Бронювання

Онлайн-бронювання з вибором ресурсу, дати й тривалості. Заявка потрапляє прямо в CRM, не в пошту.

🎁

Пакети та меню

Готові пакети відпочинку й меню кухні/бару — з цінами, що керуються з адмінки, без правок коду.

🔎

SEO та IndexNow

Мета-теги, structured data, миттєве повідомлення пошуковиків про оновлення через IndexNow.

CRM: операційний центр

Адмінка `/admin` — це повноцінна система керування комплексом, а не «панель налаштувань». Понад 18 робочих модулів навколо одного операційного дня.

🗓️

Календар ресурсів

Денна таймлайн-сітка по кожному ресурсу: видно завантаження, вільні слоти, накладки й блокування в одному екрані.

🧾

POS гостьових рахунків

Гостьовий чек із позиціями, дозамовленням і закриттям — облік того, що спожито на місці.

💳

Фінанси

Доходи, витрати, касові рухи й документи витрат — фінансова картина комплексу без Excel.

📦

Склад

Inventory з рухами залишків — від дров і трав до бару. Видно, що закінчується.

👥

Персонал і payroll

Працівники, зміни та виплати — облік роботи команди й нарахувань.

🏷️

Динамічний pricing

Ціни за правилами (день/час/сезон) + підписки та відгуки з керованими токенами запиту.

Виклик: рахувати доступність

Найскладніша частина — не інтерфейс, а рушій доступності. Кожен ресурс має місткість і буфер між сеансами (прибирання, протоп), може бути заблокований (ремонт або приватна подія), а ціна залежить від дня й часу. Наївний календар тут швидко дає накладки й помилкові вільні слоти.

Рішення — чиста доменна модель у Postgres через Drizzle: ресурси (місткість, буфер), блокування (діапазони недоступності), цінові правила та дозамовлення до броні. Календар рахує вільні слоти з урахуванням буфера й блокувань, а не просто «зайнято/вільно». Це дає адміністратору чесну картину дня й прибирає ручні звірки.

AI-асистент

У CRM вбудований AI-асистент на Anthropic SDK, який працює за принципом «сканує → пропонує → людина підтверджує». Він допомагає з рутинними операційними діями, але фінальне рішення завжди за адміністратором — human-in-the-loop, без автономних змін даних. Такий підхід до AI-інтеграцій лишає контроль у людини.

Безпека та надійність

CRM працює з персональними даними гостей і фінансами, тож безпека — не опція:

  • RBAC — рольовий доступ: хто що бачить і може змінювати
  • MFA — двофакторний вхід для адміністративних акаунтів
  • Audit log — журнал дій для відстеження змін
  • Мережева межа — авторизація на рівні `proxy.ts` (Next.js 16), а не лише в компонентах
  • Фоновий воркер — Vercel Cron смикає джоби кожні 5 хв (нагадування, службові задачі) з авторизацією через секрет

Технічний стек

  • Framework: Next.js 16 (App Router, `proxy.ts`), React 19, TypeScript strict
  • Дані: Supabase (auth + Postgres), Drizzle ORM (30+ таблиць), Zod на межах
  • AI: Anthropic SDK (асистент scan/confirm)
  • UI: Radix UI primitives, self-hosted шрифти, sharp для зображень
  • Інфраструктура: Vercel + Vercel Cron, Resend (email), IndexNow
  • Архітектура: monorepo (pnpm + turbo) — сайт, CRM і воркер в одному застосунку
Стан: проєкт live на ladomyr.kiev.ua. Проєкт свіжий, тож замість вигаданих метрик — чесно: впроваджено аналітику й систему обліку як базову лінію, від якої вимірюватиметься зростання бронювань і операційна ефективність. Далі — ітерації за реальними даними.

Схожі послуги