Платформа операцій спортзалу — Управління змінами й задачами з AI-валідацією фото
Огляд
Платформа для управління змінами та задачами клінінг-команд у спортзалах. Менеджери планують зміни на кількох брендах і локаціях та перевіряють фото задач; клінери проходять свою зміну через мобільний чат-подібний інтерфейс, надсилаючи фотодокази для кожної задачі. ШІ валідує фото, позначає аномалії та генерує звіти по змінах для менеджерів.
Роль: Freelance full-stack інженер / AI-інтеграція Термін: 3 місяці, соло Домен: SaaS для операцій виїзних сервісних команд
Платформа почалася як no-code MVP. Я перебрав частково побудовану кодову базу і суттєво переписав її в production-grade систему — 991 коміт за три місяці, охоплюючи React/TypeScript фронтенд, Supabase/Deno бекенд та шар AI-інтеграції наскрізно.
Рішення
Дві дуже різні UX-цілі ділять одну модель даних:
- Адмін / Менеджер — desktop-first, навігація через sidebar. Планування змін, перевірка фото задач, моніторинг живого статусу змін по спортзалах і брендах, читання AI-звітів.
- Клінер — mobile-first, повноекранний розмовний воркфлоу. Взяти зміну, пройти призначені задачі одну за одною, надіслати фото на кожну, отримати миттєвий AI-фідбек.
Кожне фото задачі проходить автоматичну AI-валідацію перш ніж його побачить менеджер — це ловить очевидно неправильну чи відсутню роботу рано, тож менеджери витрачають час рев’ю на судження, а не на скринінг.
Ключові технічні рішення
Автоматизована ескалація замість ручного моніторингу
Три типи тригерів працюють безперервно й сповіщають менеджерів у момент, коли щось потребує уваги, замість покладатись на те, що хтось помітить застряглу зміну:
| Тригер | Умова | Дія |
|---|---|---|
| Немає чек-іну | Поетапна ескалація 10 хв → 30 хв | Спочатку нагадування клінеру, потім сповіщення менеджера |
| Фото відхилено | Та сама задача відхилена двічі | Сповіщення менеджера, зміна позначається |
| Прострочена зміна | 30+ хв після запланованого кінця | Сповіщення менеджера, зміна позначається |
Мультипровайдерний LLM failover
Валідація фото та генерація звітів проходять через основний/резервний ланцюжок LLM з п’яти провайдерів. Якщо основний провайдер деградує чи впирається в rate limit, система автоматично перемикається — AI-валідація продовжує працювати навіть під час збоїв провайдера, не блокуючи роботу клінера.
Триrівнева модель даних
Факти → Обчислення → Інтерпретація, закладено на рівні схеми. Сирі операційні дані (зміни, подання задач) незмінні після запису; обчислений/похідний стан живе у власному шарі; ШІ-згенерована інтерпретація (оцінки, звіти) append-only і ніколи не перезаписує факти, з яких вона виведена. Row-level security захищає кожну таблицю за цією моделлю, з прив’язкою до бренду й ролі.
Розробка через мультиагентний ШІ-воркфлоу
З огляду на масштаб переписування (270+ файлів, без наявної тестової бази для опори), розробка проходила через структурований мультиагентний конвеєр, а не через довільний промптинг: планувальний прохід дає специфікацію, tech-lead прохід перетворює її на план реалізації, генеративний і спрощувальний проходи створюють і чистять код, а незалежні проходи рев’ю коду, рев’ю безпеки й генерації тестів виконуються перед будь-яким merge. Це вберегло соло, швидкоплинне переписування від накопичення того типу недокументованого «племінного знання», яке зазвичай виникає при переписуванні з нуля за допомогою ШІ.
Результати
| Метрика | Значення |
|---|---|
| Розмір кодової бази | ~42K рядків у 270+ файлах |
| Коміти (цей контракт) | 991 за 3 місяці |
| Тести | 474 проходять, 52 test-файли |
| Співвідношення тест/джерело | 30% |
Вразливості npm audit |
0 |
| Типи тригерів ескалації | 3, повністю автоматизовані |
| LLM-провайдери (failover-ланцюжок) | 5 |
Стек
| Шар | Технологія |
|---|---|
| Фронтенд | React 19, TypeScript 5, Vite, Tailwind CSS |
| Бекенд | Supabase (PostgreSQL, Auth, Row-Level Security) |
| Edge-функції | Deno |
| AI / LLM | Мультипровайдерний failover-ланцюжок (5 провайдерів) |
| Моніторинг | Sentry |
| Тестування | Vitest (unit), Playwright (E2E) |
| CI/CD | GitHub Actions |
| Інфраструктура | VPS + Nginx + Let’s Encrypt |