TS Observatory
Платформа авторских аудиогидов по городам
TS Observatory — PWA с авторскими аудиогидами: на фото собора или галереи стоят точки, тап открывает историю с текстом и аудио. Гид работает без интернета, продаётся через Stripe в евро и ЮKassa в рублях, а контент ведётся в собственной панели на трёх языках.
- Статус
- В продакшене, идёт третий этап
- Период
- Август — октябрь 2026
- Формат
- Заказ клиента, поэтапная разработка
- Роль
- Архитектура, бэкенд, фронтенд, платежи, DevOps

- роутов API
- ≈45роутов API
- страница Next.js
- 21страница Next.js
- языка контента
- 3языка контента
- коммитов
- 97коммитов


Задача
Автору гидов нужна была платформа, где турист покупает гид по городу или отдельному объекту, слушает историю у каждой точки и не зависит от мобильного интернета за границей.
Что сделано
- Интерактивные точки на фото объекта: координаты в процентах, не съезжают на любом экране
- Аудиоплеер работает при заблокированном экране и управляется кнопками наушников
- Офлайн-режим: Service Worker хранит интерфейс, аудио и тайлы карты, весь город скачивается одной кнопкой с докачкой
- Покупка без регистрации: сначала оплата, потом аккаунт; первая точка объекта бесплатно
- Stripe Checkout в евро и ЮKassa в рублях (Мир, СБП, карты) с чеком по 54-ФЗ
- Панель управления: роли, черновики и публикация, журнал действий, редактор точек мышью по фото
- Дашборд владельца: выручка, воронка, глубина прохождения гидов
- Три языка (RU, EN, IT) в интерфейсе, контенте и аудиодорожках
- Карта на MapLibre и OpenStreetMap с маршрутом прогулки и геолокацией
Инженерные решения
- Вебхук Stripe проверяется по HMAC-подписи с окном времени, доступ выдаётся только по оплаченной сессии
- Уведомлениям ЮKassa не верим: платёж перечитывается через API, запросы принимаются только из её подсетей
- Идемпотентность платежей через уникальный ключ «провайдер + внешний ID»
- Платное аудио отдаётся по подписанным ссылкам MinIO с ограниченным сроком жизни
- Собственная аналитика воронки включается только после согласия пользователя (152-ФЗ)
Инфраструктура и DevOps
- CI: gofmt, go vet, go test -race, накат и откат миграций на PostgreSQL 17; для фронтенда typecheck, lint, build
- Матричная сборка образов API и web в GHCR, деплой с ожиданием /healthz
- Миграции на staging и production запускаются отдельным ручным workflow
- Журнал инцидентов в базе с уведомлениями в Telegram
- Cloudflare в режиме Full (strict), редиректы с .ru и .online на основной домен
Стек
- Go
- PostgreSQL
- MinIO
- Next.js 16
- React 19
- TypeScript
- MapLibre
- Stripe
- ЮKassa
- Cloudflare


