BumiLu
The backend and infrastructure of a Saint Petersburg guide app for Chinese tourists. A map, routes and an AI assistant in three languages, a final at SPbPU's contest and about 50 beta testers.
- Role
- Backend & infrastructure
- Period
- 2026
- Status
- MVP
- Code
- Open ↗
The mobile app, admin panel and landing page were built by other team members. Mine are the backend and the server: everything these screens search, route and answer.
The task
Up to half of foreign hotel bookings in Saint Petersburg come from Chinese tourists, and most of them travel on their own, without Russian or English. Yandex Maps, Google Maps and AMap each cover part of it, but none combines Chinese content, a tourist scenario and AI recommendations.
BumiLu is an MVP that brings it together in one app. About 50 users beta-tested it, and the project reached the final of SPbPU’s “Basics of Project Activity” contest.
What I did
- 01
About 90 endpoints in 10 modules
Places, routes, reviews, favourites, chat, stats. Each module has separate routers for the app and the admin panel.
- 02
DDD and CQRS in every module
A framework-free domain, commands and queries kept apart, the database and Redis behind ports, dependencies wired by Dishka.
- 03
Passwordless sign-in
Device-bound guest sessions and one-time email codes for tourists; separate sign-in and permissions for staff.
- 04
Own maps and routing
PostGIS for nearby search, Valhalla for walking and driving routes, tiles from a self-hosted TileServer GL. No paid APIs.
- 05
Server and monitoring
Traefik, Kong as the API gateway, metrics in Prometheus and Grafana, all in Docker Compose.
- 06
Tests and CI
pytest with testcontainers on a real PostgreSQL, ruff and mypy, build and deploy via GitHub Actions.
Stack
- FastAPI
- PostGIS
- Valhalla
- Redis
- Python
- SQLAlchemy
- Alembic
- Taskiq
- Dishka
- Docker
- Traefik
- GitHub Actions
- pytest
- testcontainers
- ruff
- mypy
- Prometheus
- Grafana