
ФАС (Форум ассистентов и стоматологов) B2B-платформа
Перейти к продукту- Пользователей
- 46
- Сроки запуска
- 2 месяца
Задача
Профессиональный стоматологический рынок жил в разрозненных чатах и досках
объявлений: вакансии, срочные смены, аренда кабинетов и оборудования, продажа
инструмента — всё в разных каналах, без структуры, доверия и встроенного общения
или оплаты. Заказчику нужна была единая B2B-площадка, где специалисты и клиники
размещают и находят предложения нескольких типов, общаются в реальном времени и
монетизируются через подписки — и при этом всё работает как быстрый PWA на любом
устройстве, с управляемым бэкендом и инструментами модерации.
Решение
Мы спроектировали и собрали DentaHub как связку из трёх согласованных приложений:
асинхронный бэкенд на FastAPI (PostgreSQL/SQLAlchemy), клиент на Flutter (web/PWA,
устанавливается на устройство) и админ-панель на React + Vite + TypeScript для
модерации пользователей, групп, чатов и объявлений.
Ключевое:
• Маркетплейс пяти типов объявлений (вакансии, соискатели, срочные смены, аренда
кабинетов и оборудования, продажа инструмента) с откликами.
• Чат в реальном времени на WebSocket: группы, темы и личные диалоги, живые
бейджи непрочитанного и автосортировка, web-push (VAPID), индикаторы прочтения.
• Премиум-подписки с онлайн-оплатой через ЮKassa и платная публикация объявлений.
• Авторизация по номеру телефона через SMS-OTP (Prostor).
• Встроенный мониторинг: классификация сбоев на три класса (сервер / приложение /
клиент), health-пробы и устойчивое логирование аптайма.
• Прод-деплой через Docker Compose и Nginx (same-origin proxy), безопасные
миграции без drop-операций.
Результат
Рабочая платформа в проде на фас.online: один PWA и нативная админка вместо
разрозненных каналов. Real-time общение, структурированный маркетплейс нескольких
типов и замкнутый цикл «подписка → оплата». Бэкенд покрыт 56+ автотестами;
мониторинг точно показывает, на чьей стороне сбой — сервера, приложения или сети;
обновления выкатываются безопасными миграциями без потери данных.


Расскажите, что хотите запустить.
Отвечаем в течение 5–15 минут. Если задача не наша — честно скажем.