Danil Makarov разработчикdeveloper
Кейс-стади · Платформа бронированияCase study · Booking platform

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.

Роль:Role: Full-stack (соло)Full-stack (solo) Год:Year: 2025–2026 Платформы:Platforms: Android (RuStore) · Web (PWA)
01

О проекте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.

2
приложения
клиент + админка
apps
client + admin
30+
SQL-миграцийSQL migrations
13
функций на PL/pgSQLPL/pgSQL functions
3
роли доступа · RLSaccess roles · RLS
02

ПродуктThe product

Клиентское приложение — путь от выбора мастерской до активной сессии.The client app — the journey from picking a studio to a live session.

Экран активной сессии с обратным отсчётом
Ключевой экранKey screen
Активная сессия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.

Карточка мастерской с фото и описанием
01 · ГлавнаяHome
Карточка мастерскойWorkshop overview
Фото пространства, оснащение и описание; отсюда клиент пишет мастерской.Photos, equipment, and description — with a direct message button.
Выбор даты и рабочего комплекта
02 · БронированиеBooking
Дата и комплектDate & kit
Календарь и список комплектов с ценой за 30-минутный слот.A calendar and the kits, priced per 30-minute slot.
Выбор свободных слотов времени
03 · БронированиеBooking
Выбор слотовTime slots
Свободные слоты по 30 минут; выбранные подсвечиваются.Free 30-minute slots; selected ones highlight.
Подтверждение брони с итоговой суммой
04 · БронированиеBooking
Подтверждение брониConfirmation
Детали, итог и заметка: списание — после подтверждения админом.Details, total, and a note: charging happens after admin approval.
Профиль пользователя с балансом
05 · АккаунтAccount
Профиль и балансProfile & balance
Внутренний кошелёк, история броней и пополнений.The internal wallet with booking and top-up history.
03

Инженерные решенияEngineering highlights

Самое важное — то, чего не видно на экранах.The part that matters most lives behind the screens.

01

Два приложения — один бэкендTwo apps, one backend

Разделённые клиентское и админское приложения работают поверх единой базы Supabase с доступом по ролям.Separate client and admin apps run on a single Supabase backend with role-aware data access.

02

Безопасность на уровне строкRow-level security

Политики RLS для трёх ролей, устойчивые к рекурсии за счёт SECURITY DEFINER-функции для проверки роли.RLS policies for three roles, made recursion-safe with a SECURITY DEFINER role-check function.

03

Бизнес-логика в базе данных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.

04

Оплата и кошелёкPayments & wallet

Внутренний баланс с онлайн-пополнением через YooKassa (Edge Function + webhook) и полным журналом операций.An internal balance with online top-ups via YooKassa (Edge Function + webhook) and a full operations log.

05

Вход без пароляPasswordless sign-in

Email Magic Link для клиентов и защищённый email-password для администраторов.Email Magic Link for customers and secure email-password for admins.

06

Многоканальные уведомленияMulti-channel notifications

Единая система триггеров через Telegram, почту и in-app по всем событиям брони.A single trigger system across Telegram, email, and in-app for every booking event.

04

Технологический стекTechnology stack

ПриложенияApplications
FlutterFlow
Визуальная сборка Flutter-приложений: клиент и админкаVisually built Flutter apps: client and admin
Flutter · Dart
Кастомные действия, функции и виджетыCustom actions, functions, and widgets
Android (RuStore) · Web (PWA)
Две целевые платформы из одной кодовой базыTwo target platforms from one codebase
Бэкенд и данныеBackend & data
Supabase
Backend-as-a-Service на PostgreSQLBackend-as-a-service on PostgreSQL
PostgreSQL
Схема, представления и бизнес-логика на PL/pgSQLSchema, views, and business logic in PL/pgSQL
Row Level Security
Разграничение доступа на уровне строк по ролямRow-level, role-based access control
Supabase Auth
Passwordless Magic Link и email-passwordPasswordless Magic Link and email-password
Edge Functions · Deno
Серверная логика на Deno и TypeScriptServer-side logic in Deno and TypeScript
Supabase Storage
Хранилище файлов и фотографийFile and photo storage
ИнтеграцииIntegrations
YooKassa
Приём онлайн-платежей и пополнение балансаOnline payments and balance top-ups
Telegram Bot
Уведомления и поддержкаNotifications and support
Resend
Транзакционные письмаTransactional email
Инфраструктура и процессInfrastructure & workflow
Cloudflare
DNS и доменDNS and domain
RuStore
Дистрибуция Android-приложенияAndroid app distribution
Claude Code · YouGile
AI-ассистированная разработка и трекинг задачAI-assisted development and task tracking
05

Моя роль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.