SaaS-платформа бронирования
BookUp
Мультитенантный SaaS для бронирования и управления клиентами — Telegram мини-приложение для владельцев, сайт бронирования на Next.js для клиентов и бэкенд на NestJS/PostgreSQL. Интегрированы платежи Payme и авто-ответы в Instagram.
Обзор
BookUp начался с простого раздражения: малый сервисный бизнес — барбершопы, салоны, бильярдные клубы — жонглировал бронированиями через Telegram-чаты и бумажные тетради. Я создал универсальную платформу, чтобы владелец мог управлять всем бизнесом с телефона, а клиенты бронировали онлайн в несколько касаний. Сейчас она обслуживает 20+ бизнесов.
Что я сделал
Довёл от пустого репозитория до 20+ платящих бизнесов — приложение для владельцев, сайт бронирования для клиентов и бэкенд за ними.
Разработал биллинг на основе кошелька, чтобы комиссии платформы списывались автоматически с предоплаченного баланса — никакой погони за счетами.
Создал Instagram-автоматизацию, превращающую комментарии и DM в бронирования — подключение аккаунта владельца одним OAuth-потоком.
Определил модель ценообразования и SaaS-биллинг — многоуровневые планы, цены за сотрудника, SMS-пакеты и калькулятор дополнений.
Архитектура
Каждый бизнес получает собственное изолированное пространство на общей платформе — мультитенантной — через свой поддомен. Владельцы управляют всем из Telegram мини-приложения, клиенты бронируют через быстрый сайт на Next.js, а бэкенд на NestJS/PostgreSQL связывает всё вместе. Cloudflare стоит впереди для безопасности на периметре.
Под капотом
Мультитенантность на периметре: каждый запрос сначала попадает в Next.js, который читает поддомен, проверяет его и внутренне маршрутизирует к нужному тенанту — ни один тенант никогда не попадёт в данные другого, а подключение нового бизнеса происходит мгновенно.
Биллинг предоплаченного кошелька смоделирован как журнал типизированных транзакций — списания комиссий, SMS-оплаты и возвраты происходят автоматически и остаются проверяемыми, так что владельцы всегда точно знают, куда ушли деньги.
Обработка обновления токена, выдерживающая нестабильные соединения и двойные нажатия без выхода пользователя — параллельные 401 объединяются в один цикл обновления, предотвращая гонку повторного использования токена, которая преследует мини-приложения.
Два режима ценообразования — фиксированный или почасовой с правилами пиковых окон — плюс типы ресурсов для персонала и активов вроде столов и кортов, так что одна схема моделирует барбершопы и бильярдные клубы без костылей.
Чему я научился
Управление собственным SaaS научило меня, что сложная часть — не код, а крайние случаи биллинга и поддержание довольных клиентов, когда что-то ломается.
Правильная изоляция тенантов с самого начала упростила каждую последующую функцию — одно архитектурное решение сэкономило недели переработки.
В Telegram Mini Apps есть нюансы, которые не встречаются в документации — крайние случаи аутентификации, всплывающие клавиатуры, ломающие вёрстку — это узнаёшь только при запуске.
Технологии
Фронтенд (публичный сайт)
- Next.js 16
- React 19
- TypeScript 5
- Tailwind CSS 4
- shadcn/ui
- Framer Motion
- GSAP
Фронтенд (Telegram Mini App)
- Vite
- React 18
- Zustand 5
- TanStack Query 5
- @tma.js/sdk-react
- i18next
Бэкенд
- NestJS
- PostgreSQL
- REST API
Инфраструктура и инструменты
- Docker
- Cloudflare
- Google Maps API
- Payme
- Vitest

