20 KiB
Цели Discovery MVP — Python-стек
Версия: 2.2 Дата: апрель 2026 Статус: Discovery MVP, месяцы 1–3 Изменение vs v2.1: переход с .NET на Python для backend, TypeScript для frontend
1. North Star Metric
К концу месяца 3 получить 3 платящих пилотных клиента (≥30 тыс. ₽/мес каждый) и подать заявку в реестр российского ПО — это даст право пройти в Раунд А на 20–25 млн ₽.
Этот критерий не зависит от стека и остаётся неизменным.
2. Технический стек MVP
Backend
- Язык: Python 3.12
- Web-фреймворк: FastAPI 0.115+
- ORM: SQLAlchemy 2.0 + GeoAlchemy2 (для PostGIS)
- Миграции: Alembic
- Валидация: Pydantic v2
- Background tasks: Celery + Redis (или RQ для простоты)
- HTTP-клиент: httpx (async)
Геометрия и геоданные
- Shapely 2.0 — основная геометрия (полигоны, отступы, пересечения)
- GeoPandas 1.0 — работа с табличными геоданными
- Pyproj — преобразования систем координат (WGS84 ↔ UTM ↔ МСК-66 для Свердловской обл.)
- Rasterio — если будем работать с растровыми данными (DEM, спутник)
ML
- XGBoost — основной алгоритм скоринга участков
- scikit-learn — препроцессинг, метрики, простые модели
- pandas — обработка табличных данных
- NumPy — численные расчёты
Экспорт документов
- ReportLab или WeasyPrint — PDF-отчёты (WeasyPrint удобнее для HTML-вёрстки)
- ezdxf — экспорт в DXF для архитекторов
- openpyxl — экспорт в Excel
База данных
- PostgreSQL 16 + PostGIS 3.4 — основная БД
- Redis 7 — кэш и очереди
Frontend
- Next.js 15 + React 19 + TypeScript 5
- Tailwind CSS 4 — стили
- shadcn/ui — базовые компоненты
- TanStack Query — работа с API
- Mapbox GL JS или Leaflet + OSM — карты
Инфраструктура
- Yandex Cloud или VK Cloud (российские)
- Docker + Docker Compose для разработки
- GitHub Actions для CI/CD
- Sentry для мониторинга ошибок
Dev tools
- uv или poetry — менеджер зависимостей (uv быстрее)
- ruff — линтер + форматтер (заменяет black + flake8 + isort)
- mypy — статическая типизация
- pytest — тесты
3. Цели по модулю A: Site Finder
Функциональные цели (Discovery MVP)
Загрузка данных
- Парсер Росреестра ПКК для Свердловской области
- Сохранение ≥ 1000 участков в PostgreSQL/PostGIS
- Атрибуты: кадастровый номер, ВРИ, площадь, границы (геометрия), адрес
- Скрипт ежесуточной синхронизации (Celery beat)
Фильтрация
- 3 базовых фильтра: ВРИ, площадь (от-до), регион/город
- Геопространственный фильтр: участки внутри произвольно нарисованного полигона
- Текстовый поиск по адресу/кадастровому номеру
Скоринг
- 3 критерия в Discovery: расстояние до центра города, наличие инфраструктуры в радиусе 1 км (POI из OSM), средняя цена жилья в районе (ДОМ.РФ)
- Веса критериев настраиваемые пользователем
- Итоговый рейтинг 0–100 с разбивкой по компонентам
Отображение
- Карта (Mapbox/Leaflet) с участками-полигонами
- Цветовая градация по рейтингу
- Табличный список с сортировкой по любому параметру
- Детальная карточка участка с обоснованием рейтинга
Интеграция с Generative Design
- Кнопка «Обсчитать концепцию» в детальной карточке
- Передача геометрии участка через внутренний API в модуль B
- Возврат результатов в карточку
Что НЕ делаем в Discovery MVP
- API ЕГРН с собственниками (требует платежей и юридического оформления — отложено на Фазу 1)
- Изохроны Яндекс.Карт (хорошо бы иметь, но не критично — Фаза 1)
- Скоринг по 15+ параметрам — Фаза 1
- Множественные регионы (только Свердловская обл.) — Фаза 1
- Алертинг на новые подходящие участки — Фаза 2
4. Цели по модулю B: Generative Design (пятно застройки)
Функциональные цели (Discovery MVP)
Вход
- Полигон участка (ручная отрисовка на карте или передача из Site Finder)
- Параметры пользователя: класс жилья (эконом/комфорт/бизнес), целевая этажность, тип застройки (точечная/средне-этажная/многоэтажная)
- Региональные нормативы (для Discovery — Свердловская обл., ПЗЗ Екатеринбурга)
Алгоритм генерации
- Расчёт нормативных отступов от границ участка (через Shapely buffer)
- Размещение прямоугольных корпусов МКД методом «жадного заполнения»: подбор сетки положений, проверка отступов между корпусами и от границ
- 3 варианта: «максимум площади», «максимум инсоляции дворов», «оптимальный микс»
- Время генерации одного варианта ≤ 10 секунд
Расчёт ТЭП
- Площадь застройки, общая площадь корпусов
- Жилая площадь по типам квартир (1/2/3-комн в задаваемых пропорциях)
- Количество квартир, средняя площадь
- КЭП (коэффициент использования территории), плотность застройки
- Площадь придомовой территории, парковка (упрощённо: норматив × количество квартир)
Финансовая модель
- Выручка: жилая площадь × средняя цена м² по району (из ДОМ.РФ)
- Себестоимость: квадратный метр × норматив (из ФАУ «Главгосэкспертиза»)
- Стоимость земли (вход параметром)
- Валовая маржа, чистая прибыль (упрощённая модель без налогов)
- Базовый IRR (без дисконтирования cash flow по периодам — это в Фазе 1)
Экспорт
- PDF-отчёт с тремя вариантами, графиками, ТЭП и финмоделью (WeasyPrint)
- Excel с расчётами (openpyxl)
- DXF упрощённой схемы участка (ezdxf) — для передачи архитектору
Что НЕ делаем в Discovery MVP
- Расчёт инсоляции по СП 52.13330 — Фаза 1, месяцы 7–9
- Произвольная форма корпусов (только прямоугольники) — Фаза 1
- Парковка по детальному нормативу — Фаза 1
- УДС (улично-дорожная сеть) — Фаза 1
- Социнфраструктура (школы, сады, поликлиники) — Фаза 1
- 3D-визуализация (Three.js) — Фаза 2 (год 2)
- Квартирография (планировки квартир внутри корпусов) — Фаза 2
- Фотореалистичный рендер — Год 2+
5. Цели по продажам и валидации
Месяц 1
- 50 целевых клиентов в CRM (можно использовать Notion/AmoCRM/HubSpot Free)
- 5 cold-outreach писем отправлено
- 3 встречи назначено
- ООО зарегистрировано, расчётный счёт открыт
- Прототип Site Finder работает локально с 1000 участков
Месяц 2
- 15 встреч кумулятивно проведено
- 2 LOI (Letters of Intent) подписано
- 1 платящий пилот подписан (≥ 30 тыс. ₽/мес)
- Демо прототипа на реальных участках клиентов
- Первая статья в профильном медиа (DigitalDeveloper, vc.ru, Bisnow Russia)
Месяц 3
- 20+ встреч кумулятивно
- 3 платящих пилота
- 7+ LOI
- 1 региональная администрация в активных переговорах
- Заявка в реестр российского ПО подана
- Подготовлен инвестиционный deck для Раунда А (12 слайдов)
- Финансовая модель в Excel на 5 лет
- Data room для инвесторов
6. Технические цели MVP
Качество кода
- Все публичные API эндпоинты типизированы (Pydantic)
- Покрытие тестами ключевой бизнес-логики ≥ 60%
- Линтер ruff проходит без ошибок
- mypy --strict проходит для core-модулей
Производительность
- Time to First Value ≤ 10 минут (от регистрации до первого обсчёта)
- Загрузка участков по фильтру ≤ 2 секунд
- Генерация одного варианта концепции ≤ 10 секунд
- Генерация PDF-отчёта ≤ 5 секунд
Надёжность
- 99% uptime в рабочие часы (для демо клиентам)
- Все ошибки в Sentry
- Бэкап БД ежедневно
- Recovery time ≤ 2 часов
Безопасность
- Все данные пользователей шифруются at rest (PostgreSQL TDE или приложением)
- HTTPS обязательно
- API Rate limiting
- JWT-авторизация с refresh-токенами
- Логирование всех доступов к чувствительным данным (требование под реестр ПО)
7. Структура репозитория (предлагаемая)
project-root/
├── backend/
│ ├── app/
│ │ ├── main.py # FastAPI entrypoint
│ │ ├── api/
│ │ │ ├── v1/
│ │ │ │ ├── parcels.py # Site Finder endpoints
│ │ │ │ ├── concepts.py # Generative Design endpoints
│ │ │ │ └── auth.py
│ │ ├── core/
│ │ │ ├── config.py # Pydantic Settings
│ │ │ ├── security.py # JWT, hashing
│ │ │ └── db.py # SQLAlchemy session
│ │ ├── models/ # SQLAlchemy ORM
│ │ ├── schemas/ # Pydantic schemas
│ │ ├── services/
│ │ │ ├── site_finder/
│ │ │ │ ├── parser.py # Росреестр, ФИАС
│ │ │ │ ├── scorer.py # XGBoost скоринг
│ │ │ │ └── filters.py
│ │ │ ├── generative/
│ │ │ │ ├── geometry.py # Shapely алгоритмы
│ │ │ │ ├── teap.py # Расчёт ТЭП
│ │ │ │ └── financial.py # Финмодель
│ │ │ └── exporters/
│ │ │ ├── pdf.py # WeasyPrint
│ │ │ ├── excel.py # openpyxl
│ │ │ └── dxf.py # ezdxf
│ │ └── workers/ # Celery tasks
│ ├── tests/
│ ├── alembic/ # миграции
│ ├── pyproject.toml # uv/poetry
│ └── Dockerfile
├── frontend/
│ ├── app/ # Next.js 15 App Router
│ ├── components/
│ ├── lib/
│ └── package.json
├── docker-compose.yml # dev окружение
├── .github/workflows/ # CI/CD
└── README.md
8. План на первый месяц (под Python)
Неделя 1
- Установить uv (
pip install uv) - Создать проект:
uv init project-root && uv add fastapi sqlalchemy geoalchemy2 shapely pydantic - Поднять PostgreSQL + PostGIS в Docker (
postgis/postgis:16-3.4) - Первый эндпоинт
GET /parcelsвозвращает заглушку - Зарегистрировать ИТ-ООО (УСН 6%, ESOP пул в устав)
Неделя 2
- Парсер Росреестра ПКК на httpx (асинхронный)
- Загрузка 1000 участков Екатеринбурга в БД
- Базовая модель
Parcelв SQLAlchemy с PostGIS-геометрией - Первый фильтр по площади и ВРИ
- Дизайнер-фрилансер делает 7 экранов в Figma
Неделя 3
- Frontend Next.js: страница «Site Finder» с картой Leaflet
- API endpoint
POST /parcels/searchс фильтрами - 5 cold-outreach писем целевым клиентам
- 3 встречи назначены
Неделя 4
- Базовый скоринг (расстояние до центра + цена района)
- Первый прототип задеплоен в Yandex Cloud
- 5 встреч проведено
- Лендинг опубликован
- Первая статья в DigitalDeveloper или vc.ru опубликована
9. Что меняется в Custom Instructions проекта
В системный промпт проекта в Claude добавьте:
ТЕХНИЧЕСКИЙ СТЕК (актуальный с v2.2)
- Backend: Python 3.12 + FastAPI + SQLAlchemy 2.0 + Pydantic v2
- Геометрия: Shapely 2.0 + GeoPandas + GeoAlchemy2
- ML: XGBoost + scikit-learn + pandas
- БД: PostgreSQL 16 + PostGIS 3.4
- Очереди: Redis + Celery
- Frontend: Next.js 15 + React 19 + TypeScript + Tailwind + shadcn/ui
- Карты: Mapbox GL JS или Leaflet
- Экспорт: WeasyPrint (PDF), ezdxf (DXF), openpyxl (Excel)
- Облако: Yandex Cloud
- Dev: uv (зависимости), ruff (линт+формат), mypy (типы), pytest
КОММЕНТАРИЙ
Я перешёл с .NET на Python для MVP, потому что геометрия и ML
в Python-экосистеме намного сильнее. Опыт в C#/.NET 6 лет —
это база, на Python переключаюсь сейчас. При написании кода
учитывай, что я понимаю backend архитектуру отлично, но
синтаксис и идиомы Python ещё догоняю — давай явный type-hints
и комментарии к pythonic-конструкциям, которые могут быть
непривычны после C#.
10. Cost of switching: что реально потратите
Время на «вкатывание»
- Неделя 1: 60% производительности vs привычный .NET
- Недели 2–3: 80%
- С недели 4: 100% и быстрее, чем на .NET (за счёт экосистемы)
Что почитать в первую очередь
- «Python for C# Developers» (бесплатные статьи на Real Python)
- Документация FastAPI — отличная, начать с tutorial
- Shapely manual — для понимания геометрии
- SQLAlchemy 2.0 docs — async раздел
Что НЕ читать сразу
- Книги «Python для начинающих» — вы не начинающий программист
- Гайды по Django — вам нужен FastAPI
- Старые туториалы (Python 3.8 и ниже) — слишком много изменилось
Полезные привычки от .NET, которые работают и в Python
- Dependency Injection (FastAPI поддерживает через Depends)
- Strong typing (Pydantic + mypy)
- Repository pattern (через SQLAlchemy)
- Async/await (есть и работает)
Что отучиться
Dictionary<string, object>→ используй Pydantic-модели- LINQ → list comprehensions + библиотека
more_itertools - async всегда — в Python async только когда нужно (I/O bound)
- Heavy interfaces — Python предпочитает duck typing и Protocol
11. Acceptance Criteria для MVP
К концу месяца 3 продукт считается готовым к Раунду А, если:
Функционально:
- Site Finder загружает и показывает 1000+ участков Свердловской обл.
- Фильтр работает по 3 параметрам
- Скоринг по 3 критериям с настраиваемыми весами
- Generative Design генерирует 3 варианта за ≤ 10 секунд
- Расчёт ТЭП и базовая финмодель работают
- PDF/Excel/DXF экспорт работает
- Связь модулей (передача участка) работает
Бизнесово:
- 3 платящих пилота
- 7+ LOI
- Заявка в реестр ПО подана
- 1 администрация в переговорах
- Инвестиционный deck готов
- Финмодель на 5 лет готова
Технически:
- 60%+ покрытие тестами core-логики
- mypy --strict проходит
- Деплой в Yandex Cloud работает
- Sentry подключен
- Бэкапы БД ежедневно
Если все три блока выполнены — идём в Раунд А. Если выполнены 2 из 3 (например, технически + функционально, но только 2 пилота) — возможно продление Фазы 0 на 1–2 месяца за счёт собственных средств. Если выполнен только 1 блок или меньше — стоп проекта.
Документ создан в апреле 2026. Версия 2.2 (Python-стек).