- 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
5.9 KiB
5.9 KiB
type, phase_id, title, version, status, created_at, authors
| type | phase_id | title | version | status | created_at | authors | ||
|---|---|---|---|---|---|---|---|---|
| phase-brd | pilot | Enduro Trails — пилотный проект мультиагентной разработки | 1 | approved | 2026-05-15 |
|
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м недостаточно для крутых склонов | Достаточно для ЦФО (равнина) |