Бумилу

Бэкенд и инфраструктура мобильного гида по Петербургу для туристов из Китая. Карта, маршруты и AI-помощник на трёх языках, финал конкурса СПбПУ и около 50 человек на бета-тесте.

Открыть bumilu.ru
Роль
Бэкенд и инфраструктура
Период
2026
Статус
MVP

Мобильное приложение, админку и лендинг делали другие участники команды. Моё — бэкенд и сервер: всё, что эти экраны ищут, строят и отвечают.

Места и категории приходят из API, поиск рядом — на PostGIS.

Задача

До половины иностранных бронирований в петербургских отелях — туристы из Китая, и большинство путешествует само, без русского и английского. Яндекс Карты, Google Maps и AMap закрывают задачу по кусочкам, но ни один не сочетает контент на китайском, туристический сценарий и рекомендации от AI.

Бумилу — MVP, который собирает это в одно приложение. Его проверили примерно на 50 пользователях, а проект вышел в финал конкурса «Основы проектной деятельности» СПбПУ.

Что я сделал

  1. 01

    Около 90 эндпоинтов в 10 модулях

    Места, маршруты, отзывы, избранное, чат, статистика. У каждого модуля отдельный роутер для приложения и для админки.

  2. 02

    DDD и CQRS в каждом модуле

    Домен не зависит от фреймворка, команды и запросы разделены, база и Redis спрятаны за портами, зависимости собирает Dishka.

  3. 03

    Вход без пароля

    Для туриста: гостевой вход на устройстве и код на почту. Для сотрудников: отдельный вход и права.

  4. 04

    Свои карты и маршруты

    PostGIS ищет места рядом, Valhalla строит пешие и автомобильные маршруты, тайлы раздаёт свой TileServer GL. Платных API нет.

  5. 05

    Сервер и мониторинг

    Traefik, Kong как API-шлюз, метрики в Prometheus и Grafana, всё в Docker Compose.

  6. 06

    Тесты и CI

    pytest с testcontainers на настоящем PostgreSQL, ruff и mypy, сборка и деплой через GitHub Actions.

Стек

  • FastAPI
  • PostGIS
  • Valhalla
  • Redis
  • Python
  • SQLAlchemy
  • Alembic
  • Taskiq
  • Dishka
  • Docker
  • Traefik
  • GitHub Actions
  • pytest
  • testcontainers
  • ruff
  • mypy
  • Prometheus
  • Grafana