Master Classter
Бронирование рабочих комплектов для мастерских ручного труда.Booking workspace kits for hands-on craft studios.
Клиент бронирует оборудованное место с инструментами на удобные слоты, оплачивает с внутреннего баланса, а администратор ведёт сессии в отдельном приложении. Соло-разработка от схемы БД до релиза.A customer books an equipped, tooled-up spot in convenient time slots, pays from an internal balance, and an admin runs the sessions in a separate app. Built solo, from the database schema to release.
О проектеAbout the project
Заказчик — индивидуальный предприниматель, который проводит мастер-классы и предоставляет оборудованные рабочие места в мастерской ручного труда.The client is an individual entrepreneur who runs craft workshops and offers equipped workspaces in a hands-on makerspace.
Бизнес продаёт не аренду, а рабочие комплекты — место плюс стандартный набор инструментов.The business sells workspace kits, not rentals — a spot plus a standard set of tools.
Этот принцип заложен и в интерфейс, и в структуру данных. Клиент выбирает дату и комплект, бронирует свободные слоты по 30 минут и оплачивает их с внутреннего баланса. Администратор управляет бронированиями, сессиями, пересадками и возвратами через отдельное приложение.This principle is baked into both the interface and the data model. A customer picks a date and a kit, books free 30-minute slots, and pays from an internal balance. An admin manages bookings, sessions, transfers, and refunds through a separate app.
клиент + админкаapps
client + admin
ПродуктThe product
Клиентское приложение — путь от выбора мастерской до активной сессии.The client app — the journey from picking a studio to a live session.
Обратный отсчёт до конца оплаченного слота, прогресс-бар, номер брони, стоимость и прямой контакт мастерской — всё на одном экране.A countdown to the end of the paid slot, a progress bar, the booking number, the price, and a direct line to the studio — all on one screen.
Инженерные решенияEngineering highlights
Самое важное — то, чего не видно на экранах.The part that matters most lives behind the screens.
Два приложения — один бэкендTwo apps, one backend
Разделённые клиентское и админское приложения работают поверх единой базы Supabase с доступом по ролям.Separate client and admin apps run on a single Supabase backend with role-aware data access.
Безопасность на уровне строкRow-level security
Политики RLS для трёх ролей, устойчивые к рекурсии за счёт SECURITY DEFINER-функции для проверки роли.RLS policies for three roles, made recursion-safe with a SECURITY DEFINER role-check function.
Бизнес-логика в базе данныхBusiness logic in the database
Весь жизненный цикл брони — подтверждение, отмена, чек-ин/аут, пересадка, возврат — реализован атомарными функциями на PL/pgSQL, что держит деньги и слоты в согласованном состоянии.The entire booking lifecycle — confirm, cancel, check-in/out, transfer, refund — is implemented as atomic PL/pgSQL functions, keeping money and slot state consistent.
Оплата и кошелёкPayments & wallet
Внутренний баланс с онлайн-пополнением через YooKassa (Edge Function + webhook) и полным журналом операций.An internal balance with online top-ups via YooKassa (Edge Function + webhook) and a full operations log.
Вход без пароляPasswordless sign-in
Email Magic Link для клиентов и защищённый email-password для администраторов.Email Magic Link for customers and secure email-password for admins.
Многоканальные уведомленияMulti-channel notifications
Единая система триггеров через Telegram, почту и in-app по всем событиям брони.A single trigger system across Telegram, email, and in-app for every booking event.
Технологический стекTechnology stack
Моя рольMy role
Я вёл проект как единственный разработчик — от структуры данных и серверной логики до интерфейсов обоих приложений и интеграций. Бэкграунд — системная инженерия, и к разработке подхожу системно: послойными спринтами, с документацией и переносом архитектурных решений между задачами.I led the project as the sole developer — from the data model and server logic to the interfaces of both apps and the integrations. My background is in systems engineering, and I build accordingly: in layered sprints, with documentation and architecture decisions carried across tasks.