FableVita
FableVita — AI-фитнес-тренер с лигами, квестами и защищённой от фрода экономикой наград.
Dev-storyЗадача
FableVita — один продукт на множестве поверхностей (web, инструменты тренера, iOS, Android, Apple Watch и десяток wearables), и он награждает реальную активность, а это провоцирует накрутку, если экономика наивна.
Что делали
Основная real-time платформа (наш бэкенд webedge-db) питает AI-коуча, маркетплейс тренеров и слой геймификации — уровни, стрики, квесты, сезонные лиги с повышением/понижением, командные челленджи и витрину трофеев — поверх экономики наград: независимая от провайдера выдача (скидка / кредит / спонсор), идемпотентные выплаты с возвратом в append-only аудит-леджере, детерминированные сигналы подозрительной активности и модерация, чтобы боты и накрутчики сегментов не выкачивали награды.
Результат
Каждая поверхность работает с одними данными атлета — от одной тренировки до сезона лиг — а сторона наград остаётся аудируемой и трудной для накрутки.
Dev-story статья
FableVita: как создавался проект
FableVita это один продукт на множестве поверхностей — web, инструменты тренера, iOS, Android, Apple Watch и десяток носимых — и он делает то, чего большинство фитнес-приложений не делают: платит реальные награды за реальную активность. Как только приложение награждает поведение, его пытаются накрутить, так что самое интересное в инженерии не тренер, а экономика, которая должна пережить атаки.
Разделы
05
Модули
05
Стек
Vue 3 + webedge-db
Почему появился проект
FableVita — один продукт на множестве поверхностей (web, инструменты тренера, iOS, Android, Apple Watch и десяток wearables), и он награждает реальную активность, а это провоцирует накрутку, если экономика наивна.
FableVita это один продукт на множестве поверхностей — web, инструменты тренера, iOS, Android, Apple Watch и десяток носимых — и он делает то, чего большинство фитнес-приложений не делают: платит реальные награды за реальную активность. Как только приложение награждает поведение, его пытаются накрутить, так что самое интересное в инженерии не тренер, а экономика, которая должна пережить атаки.
Что было создано
Основная real-time платформа (наш бэкенд webedge-db) питает AI-коуча, маркетплейс тренеров и слой геймификации — уровни, стрики, квесты, сезонные лиги с повышением/понижением, командные челленджи и витрину трофеев — поверх экономики наград: независимая от провайдера выдача (скидка / кредит / спонсор), идемпотентные выплаты с возвратом в append-only аудит-леджере, детерминированные сигналы подозрительной активности и модерация, чтобы боты и накрутчики сегментов не выкачивали награды.
Поверх основного real-time бэкенда FableVita добавляет AI-коуча, маркетплейс тренеров и геймификацию — уровни, стрики, квесты, сезонные лиги с повышением и понижением, командные челленджи и витрину трофеев — а под всем этим экономику наград: независимая от провайдера выдача (скидка, кредит или спонсор), идемпотентные выплаты с возвратом в append-only аудит-леджере и слой анти-фрода, решающий, какая активность реально засчитывается.
Основные модули и путь пользователя
Выдача наград независима от провайдера и идемпотентна: единый интерфейс выдаёт скидку, кредит или спонсорскую награду, стейт-машина ведёт локальную и ручную выдачу, а возвраты дописываются в аудит-леджер, а не меняют историю.
Анти-фрод детерминированный, а не на ощущениях: централизованные сигналы подозрительной активности (невозможные скорости, аномалии сегментов, квестов и лиг) питают очередь модерации, которая никогда не банит автоматически — подтверждает человек, а каждая активность несёт метку происхождения, почему засчиталась или нет.
Лиги ведут настоящий сезон: таблицы материализуются со стабильными правилами ранга и ничьих, закрытие сезона идемпотентно (можно безопасно перезапустить) и за один проход ведёт награды, повышение и понижение.
Челленджи защищены даже от самой модели: персонализированные черновики челленджей имеют детерминированные границы и поток preview-validate-confirm, так что текст модели никогда не переопределяет движки подсчёта.
Импорты безопасны по построению: путь, безопасный к частичному коммиту, означает, что вставка сессии никогда не переходит в failed на полпути, а тесты с инъекцией сбоев доказывают, что side-effects никогда не ломают основные записи.
Архитектура и технологические решения
Сделано на Vue 3, webedge-db, Swift, Kotlin, Wearables.
Основной real-time бэкенд питает отдельные приложения тренера, мобильные клиенты и адаптеры носимых (Apple Watch, Garmin, Polar, Whoop, Oura, Fitbit, Withings, Coros и др.); Wave-1 усиление закрыло root-авторизационные дыры и сделало секреты строгими для прода; даже лимит Cloudflare Pages 25MB заставил отказаться от работающей на устройстве ONNX-модели питания — реальное ограничение, обработанное честно.
Результат и выводы
Каждая поверхность работает с одними данными атлета — от одной тренировки до сезона лиг — а сторона наград остаётся аудируемой и трудной для накрутки.
Фитнес-суперапп, где сторона наград аудируема и трудна для накрутки: одна модель данных атлета от одной тренировки до целого сезона лиг, с экономикой, которая предполагает, что её будут атаковать, и построена это выдержать.
Связанные статьи
Читать дальше
Связанные истории проектов
Эти проекты близки по техническим или продуктовым решениям и показывают, как тот же принцип работает в другом контексте.
Dev-storyCMS
Динамический headless-CMS на webedge-db — типы контента, медиа, роли и публичный read-API, питающий наши сайты и статьи.
Dev-storyПлатформа календарных бронирований
Бронирование на Vue 3 — слоты, записи, письма и Meet-видеозвонки в один клик.
Dev-storyФорум сообщества ePokalbis
Публичный форум сообщества ePokalbis на webedge-db.
Есть похожая идея?
Обсудить проект