- 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
123 lines
5.9 KiB
Markdown
123 lines
5.9 KiB
Markdown
---
|
||
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м недостаточно для крутых склонов | Достаточно для ЦФО (равнина) |
|