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