r/NoCodeCreators • u/SuitCute4798 • 6d ago
Пів року писав систему бронювання для салонів краси — вирішив показати, що вийшло
Почалось з того, що знайома власниця салону краси попросила зробити їй сайт із записом, бо все, що вона знайшла на ринку, або коштувало як підписка щомісяця назавжди, або було перевантажено функціями, які їй ніколи не знадобляться. Я погодився зробити «просто сайт з формою запису» — а через кілька місяців це переросло в повноцінну систему, яку тепер використовує вже кілька салонів. Ділюсь не для реклами (продукту немає в публічному доступі, це не SaaS), а тому що самому цікаво
почути думку інших розробників — особливо щодо архітектурних рішень, деякі з яких свідомо «неідеальні».
Стек — навмисно старомодний
_______________________________
PHP + MySQL, без фреймворку. Адмін-панель — це один величезний index.html на vanilla JS (без React/Vue, без збірки, без npm build-кроку). Причина проста: клієнти — це маленькі салони на дешевому shared-хостингу, де часто немає ні SSH, ні можливості поставити Node. Закинув файли по FTP — і воно просто працює. Так, я знаю, що один файл на кілька тисяч рядків — це технічний борг, і рано чи пізно доведеться це розрізати. Але для одного розробника, який сам підтримує кілька інсталяцій, простота деплою переважила архітектурну красу.
Що вміє клієнтська частина
_____________________________
- Покрокове бронювання: послуга → опції послуги (наприклад «довжина волосся», які змінюють ціну й час) → майстер (або без вибору — тоді призначає адміністратор) → дата й вільний слот → контакти.
- Готові пакети послуг зі знижкою замість окремого запису.
- Керування власною бронею за посиланням з кодом — перенести або скасувати без реєстрації, з обмеженнями по годинах «до візиту», які налаштовує салон
- Депозит при бронюванні через LiqPay, Fondy, WayForPay, Monobank, Stripe або PayPal — або просто оплата на місці.
- Окремий інтернет-магазин ( shop.html ) для продажу товарів — кошик, Нова Пошта з живим пошуком відділень через їхнє API, або самовивіз.
- Telegram-бот для клієнтів: нагадування за 24 і за 2 години до візиту, свої записи, статті салону, кнопка «питання майстру».
Адмінка
______________________________
Тут основна вага функціоналу:
- Заявки — статуси, зміна статусу на «виконано» автоматично списує розхідники зі складу, можна прикріпити фото до/після.
- Послуги з опціями (групи з обов'язковим/множинним вибором) і прив'язкою розхідників — скільки грамів/мілілітрів товару йде на послугу.
- Майстри — графік по днях тижня, винятки (відпустка, лікарняний, додатковий робочий день), і гнучкі правила зарплати у відсотках: базовий відсоток + перевизначення для конкретної послуги чи опції.
- Клієнти — історія візитів, галерея фото, кастомні поля анкети (тип волосся, алергії — що завгодно налаштовується адміном).
- Склад/товари — це те, над чим я найбільше морочився останнім часом. Спочатку був простий облік: одиниця виміру, залишок, поріг. Потім клієнти почали просити дві речі: (1) розновидності товару — наприклад фарба існує в 10 кольорах, і в кожного свій залишок; (2) «заводська фасовка» — товар закуповується в штуках (тюбиках), а витрачається на послугу в мілілітрах/міліметрах, тож потрібен автоперерахунок при закупівлі. Обидві фічі довелось вплести одночасно в закупівлю, списання на послугу і продаж у магазині, не зламавши старі товари без варіантів — це був непростий тиждень тестування.
- Витрати — і салону загалом, і окремо кожного майстра через його особистий кабінет.
- Звіти — виручка, топ майстрів/послуг, готовий зарплатний розрахунок за період.
Особистий кабінет майстра
_______________________________
Окремий вхід ( master.html ), де майстер бачить тільки свої записи, може вести особисті витрати і дивитись свою статистику й «до виплати», порахований автоматично за правилами, які задав адміністратор. Це прибрало велику частину ручної роботи з рахування зарплат в кінці місяця.
Інтеграції
_______________________________
Email (Brevo або будь-який SMTP), SMS через Brevo, Google Calendar (з окремим календарем на кожного майстра, якщо треба), Telegram-бот окремо для клієнтів і окремо для сповіщень адміністратора. Плюс мультимовність — інтерфейс перекладається інлайн-редактором, нову мову можна додати одним кліком як копію англійської й перекласти вручну.
Механізм оновлень
_______________________________
Оскільки кожен салон — це окрема інсталяція на своєму хостингу, я зробив просту систему
самооновлення: адмінка перевіряє реліз-сервер, качає zip, бекапить критичні файли, підміняє решту і прогонює SQL-міграції автоматично. Захищені файли (конфіг БД, ліцензія, завантажені фото) не чіпаються. Без цього довелось би вручну заходити на кожен хостинг при кожному фіксі.
Про мінуси
_______________________________
Автотестів немає — покладаюсь на ручне тестування перед кожним релізом, і зрідка щось таки проскакує (наприклад нещодавно знайшов баг, де вкладка історії руху товару мовчки показувала порожній список через банальну помилку в розпаковці відповіді API. Один розробник, один величезний файл адмінки — масштабується так собі. Але для задачі «дати маленькому бізнесу робочий інструмент за розумні гроші без місячної підписки» — поки що це працює, і салони, які цим користуються, задоволені.
Якщо є питання по архітектурі, чи як я підійшов до якоїсь конкретної фічі — питайте, з радістю відповім.