Files
enduro-trails/docs/phases/pilot/00-phase-brd.md
Slava 0480be2539
Some checks failed
CI / test (push) Failing after 25s
CI / lint (pull_request) Failing after 23s
CI / lint (push) Failing after 54s
CI / test (pull_request) Failing after 6s
CI / build (pull_request) Has been skipped
CI / build (push) Has been skipped
docs: add project README, phase BRD and plan
- README.md with project overview, features, stack
- docs/phases/pilot/00-phase-brd.md — full project BRD
- docs/phases/pilot/01-phase-plan.md — current phase plan

Refs: multi-agent F0-3
2026-05-15 15:59:44 +03:00

123 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
type: phase-brd
phase_id: pilot
title: "Enduro Trails — пилотный проект мультиагентной разработки"
version: 1
status: approved
created_at: 2026-05-15
authors:
- "agent:stream"
- "human:slava"
---
# BRD — Enduro Trails (пилотный проект)
## 1. Цель и метрика успеха
**Цель:** Создать веб-приложение для планирования эндуро-маршрутов с визуализацией грунтовых дорог, рельефа и навигацией — как пилотный проект мультиагентной системы разработки.
**Метрики успеха:**
- Рабочее приложение доступно по URL (https://openclaw.mva154.duckdns.org/enduro/)
- Покрытие региона: ЦФО + Чувашия (1.1M треков, 14K POI)
- Построение маршрута < 5 секунд
- Мобильный UI (PWA-ready)
- Агентный конвейер: фича от постановки до деплоя ≤ 4 часа
## 2. Стейкхолдеры
| Роль | Кто | Интерес |
|------|-----|---------|
| Заказчик / Owner | Слава | Использует для планирования поездок |
| Analyst | Стрим (OpenClaw) | BRD, ТЗ, координация |
| Разработка | Claude Code CLI агенты | Architect, Developer, Reviewer, Tester, Deployer |
## 3. Scope
### В скоупе
- Карта грунтовых дорог (MapLibre GL JS, кастомный стиль)
- Роутинг «Дикий путь» (OSRM, кастомный профиль enduro.lua)
- Альтернативные маршруты (до 5 вариантов)
- Промежуточные точки (до 8)
- Статистика покрытия (% грунт/асфальт по типам)
- «Красивый маршрут» (замкнутый круг через POI)
- «Связка» (соединить два трека)
- «Разведка» (грунтовки в радиусе)
- Рельеф (гипсометрия + hillshade, SRTM 30м)
- TRI (Terrain Ruggedness Index)
- Линейка, метки, GPX экспорт
- Тёмная/светлая тема (авто по SunCalc)
- Мобильный UI (bottom sheets, toolbar, touch)
- Поиск (Nominatim geocoding)
### Вне скоупа (v1)
- PWA офлайн режим
- GPS-трекинг в реальном времени
- Народные треки (Wikiloc, Komoot)
- Профиль высот на маршруте
- Мультирегион (вся Россия)
- Нативное мобильное приложение
## 4. Архитектура
### Компоненты
- **Frontend** — MapLibre GL JS, vanilla JS (ES modules), CSS custom properties
- **Backend API** — FastAPI (Python 3.12), uvicorn (4 workers)
- **Tile Server** — статические raster tiles через nginx
- **Vector Tiles** — MVT из SQLite (self-hosted, FastAPI)
- **Routing Engine** — OSRM с кастомным профилем `enduro.lua`
- **Database** — SQLite + Spatialite (431 MB)
- **Reverse Proxy** — nginx (`/enduro/` → контейнер)
### Инфраструктура
- Один сервер: mva154 (82.22.50.71)
- Docker Compose
- Gitea (git + CI)
- Plane (управление задачами)
### Данные
- OSM PBF (Geofabrik, ЦФО + Чувашия)
- SRTM 30м (NASA, public domain)
- OSRM граф (~5.2 GB)
## 5. Реализованные фазы
| Фаза | Описание | Статус | Дата |
|------|----------|--------|------|
| 1 | MVP: карта + MVT тайлы | ✅ | 02.05.2026 |
| 2 | Роутинг + базовый UI | ✅ | 03.05.2026 |
| 3 | Умный маршрут (альтернативы, статистика, GPX) | ✅ | 04.05.2026 |
| 4 | Продвинутый роутинг (красивый, связка, разведка) | ✅ | 04.05.2026 |
| 5 | Редизайн (тёмная тема, mobile UI, UX) | ✅ | 05-06.05.2026 |
| 5.4 | Рельеф (hillshade + гипсометрия + TRI) | ✅ | 12-14.05.2026 |
## 6. Бэклог
| Фаза | Описание | Приоритет |
|------|----------|-----------|
| 3.1 | Улучшение роутинга (шлагбаумы, тротуары, слой препятствий) | Высокий |
| 6 | SRTM продвинутый (профиль высот, «Горка») | Средний |
| 7 | PWA + офлайн | Средний |
| 8 | Народные треки | Низкий |
## 7. Ключевые решения
| Решение | Причина |
|---------|---------|
| MapLibre GL JS (не Leaflet) | WebGL, производительность, vector tiles |
| Vanilla JS (не React) | Простота, нет build step, быстрый старт |
| FastAPI (не Django) | Лёгкий, async, минимум зависимостей |
| SQLite/Spatialite (не PostGIS) | Портативность, zero-config, достаточно для 1 региона |
| OSRM (не GraphHopper) | Быстрый, проверенный, кастомный lua-профиль |
| Self-hosted MVT (не TileServer GL) | Меньше зависимостей, контроль над фильтрацией |
| Raster tiles для terrain (не Mapbox Terrain RGB) | Простота генерации, nginx отдаёт статику |
| Docker Compose | Один файл — весь стек |
## 8. Риски
| Риск | Митигация |
|------|-----------|
| OSRM граф большой (5.2 GB RAM) | Swap 6 GB настроен |
| SQLite не масштабируется | Миграция на PostGIS при необходимости |
| Один сервер — single point of failure | Бэкапы, Docker restart policy |
| SRTM 30м недостаточно для крутых склонов | Достаточно для ЦФО (равнина) |