| .github/workflows | ||
| backend | ||
| data | ||
| docs | ||
| frontend | ||
| memory | ||
| ops | ||
| scripts | ||
| site-finder | ||
| .editorconfig | ||
| .env.example | ||
| .gitignore | ||
| .pre-commit-config.yaml | ||
| Caddyfile | ||
| docker-compose.obsidian.yml | ||
| docker-compose.prod.yml | ||
| docker-compose.yml | ||
| Makefile | ||
| README.md | ||
| sshkey.txt | ||
Generative Design + Site Finder
Две продуктовые линии в одной воронке: Site Finder (AI-подбор инвестиционных земельных участков) + Generative Design (автоматическая генерация концепций застройки) для девелоперов РФ. Целевой регион Discovery — Свердловская обл. (ЕКБ, ПЗЗ, МСК-66).
North Star
К концу месяца 3: 3 платящих пилота (≥30 тыс. ₽/мес каждый) + заявка в реестр российского ПО → право на Раунд А (20–25 млн ₽).
Текущий статус (апрель 2026)
Live: https://gendsgn.ru/ — HTTP/2+HTTP/3, валидный TLS, /health {"status":"ok"}. Полный CI/CD: GitHub Actions → GHCR → SSH-deploy на Beget VPS. Sentry активен (release tracking привязан к git-sha).
| Слой | Статус |
|---|---|
Аналитический калькулятор /analytics/recommend (Tier 3 per-bucket эластичность, кадастр vs рынок) |
✅ |
| DOM.РФ kn-API скрейпер (442 строящихся ЖК Свердл, sale_graph + infra + photos) | ✅ Celery beat + admin UI |
| Rosreestr CSV-сделки 2024Q1—2026Q1 (9 квартирных партиций, 7M строк) | ✅ |
| NSPD кадастровые кварталы + здания (709 cad-кварталов, 10 590 cad_buildings ЕКБ) | ✅ Celery beat + admin UI |
| OSM ekb_districts_geom (PostGIS-полигоны 8 районов ЕКБ) | ✅ |
Concept page (/concept) — Stage 1 Generative |
🟡 skeleton |
Site Finder (/site-finder) — Stage 2 |
🔴 заглушка |
Подробности и текущий backlog — Issues, milestones по этапам.
Quick start (локально)
Требования: Docker Desktop, Node.js 20+, uv для backend dev.
cp backend/.env.example backend/.env
cp frontend/.env.example frontend/.env
docker compose up -d --build
curl http://localhost:8000/health # → {"status":"ok","environment":"dev"}
# Frontend: http://localhost:3000
# Swagger: http://localhost:8000/docs
Полезные make-таргеты: logs, backend-shell, migrate, test, lint, typecheck, codegen (TS-типы из OpenAPI).
Архитектура
Backend: Python 3.12, FastAPI, SQLAlchemy 2.0, GeoAlchemy2, Pydantic v2, Celery + Redis, httpx, Shapely 2, scikit-learn.
БД: PostgreSQL 16 + PostGIS 3.4 (партиционированные rosreestr_deals, GIST на geom-полях, ~50 предметных таблиц).
Frontend: Next.js 15, React 19, TypeScript 5, Tailwind 4, TanStack Query, Leaflet/Mapbox, ECharts.
Экспорт: WeasyPrint (PDF), ezdxf (DXF), openpyxl (Excel).
Dev: uv lockfile, ruff, mypy strict (на core + generative), pytest, pre-commit hooks.
Структура монорепо:
backend/ FastAPI app, services (analytics_queries, scrapers, generative, site_finder), workers (Celery)
frontend/ Next.js app router (analytics, admin, concept, site-finder)
data/sql/ ETL артефакты — миграции схемы, загрузчики rosreestr/anton/nspd
ops/ backup.sh + deploy скрипты
docs/ стратегия (снимок) — актуальное состояние в графе памяти
memory/ hardlink на C:\mcp\.aim\memory-gendesign.jsonl (knowledge graph)
.github/workflows/ deploy.yml (build → GHCR → SSH-deploy)
Аналитика — что доступно
В прод-БД ~50 предметных таблиц:
domrf_kn_*— DOM.РФ объекты, квартиры, sale_graph, infrastructure, photos (1500+ ЖК Свердл).rosreestr_deals— партиционированные ДДУ/ДКП-сделки 2024Q1—2026Q1, ~7M строк, 27 мес истории.cad_quarters_geom+cad_buildings— NSPD кадастровые кварталы и здания (cost_value, year_built, floors, geom).ekb_districts_geom— PostGIS-полигоны OSM для spatial-join.cbr_mortgage_series,yandex_realty_zk,domrf_realization,sber_ddf_metrics— макро/cross-validation.
Калькулятор /analytics/recommend считает квартирографию (5 size-бакетов) с per-bucket эластичностью через регрессию sale_graph, нормировкой на район/класс/конкурентов, кадастр-vs-рынок cross-check, и инверсным режимом «требуемая цена для срока X мес».
Подробное описание схемы БД, helper-views, FK и 27.04 history — в графе памяти, сущности Analytics_Dashboard_Apr27, DomRF_Lazy_Loaded_Apr27_2026, Anton_Imported_Apr27_2026, NSPD_Scrape_Complete_Apr30. См. также data/sql/*.sql (DDL артефакты).
Production хостинг
Beget Cloud, Москва, 2 vCPU / 4 GB / 40 GB NVMe. Стоимость ~1 140 ₽/мес сервер + ~17 ₽/мес домен.
5 контейнеров через docker-compose.prod.yml: postgres + redis + backend (FastAPI) + worker + beat (Celery, Chromium только в worker) + frontend + caddy (auto-TLS Let's Encrypt). Backend/frontend bind на 127.0.0.1 — наружу только Caddy.
SSH-only по ключу к non-root пользователю gendesign, fail2ban активен. UFW: 22/80/443.
GitHub Actions deploy (.github/workflows/deploy.yml):
- Build обоих образов (backend lean + worker-with-chromium + frontend)
- Push в приватный GHCR
- SSH
git pull, пишетSENTRY_RELEASE=$IMAGE_TAGвbackend/.env.runtime,compose pull && up -d,caddy reload,curl /health
GitHub Secrets: DEPLOY_HOST, DEPLOY_USER, DEPLOY_SSH_KEY, DEPLOY_PORT. Сервер авторизуется в GHCR однократно через PAT с read:packages.
Триггеры миграции на Yandex Cloud: 3-й платящий пилот / Раунд А / госзаказ (нужен реестр ПО) / БД >10 GB / >50 RPS. На YC ~10–15 тыс ₽/мес.
Операционные грабли
docker compose restartНЕ перечитываетenv_file:— после правки.envвсегдаup -d --force-recreate --no-deps backend.deploy.ymlиспользуетgit reset --hard origin/main— ручные правки в/opt/gendesignбудут стёрты при следующем деплое (.env-файлы переживут — в.gitignore).- На проде всегда указывать
-f docker-compose.prod.yml(без него поднимет dev compose без Caddy). caddy reloadне сбрасывает retry-queue для ACME. При смене hostname с битым cert-state:docker volume rm gendesign_caddy_data && up -d caddy.
Roadmap (12 недель)
| Stage | Сроки | Что | Acceptance |
|---|---|---|---|
| 0 ✅ | нед. 1 | Скелет монорепо, CI, прод | curl /health = ok |
| Sprint 1 ✅ | конец апр 2026 | NSPD-скрейпер + per-bucket эластичность + кадастр cross-check + Sentry release tracking | recommend_mix Tier 3 в проде |
| 1a | нед. 2–3 | Shapely-сервис, отступы, API-контракт /concept (#5) |
GeoJSON → 3 заглушки |
| 1b | нед. 4–5 | Greedy-алгоритм, 3 стратегии, STRtree (#12) | 3 варианта ≤15с на 1 га |
| 1c | нед. 6–7 | ТЭП + финмодель + PDF/Excel/DXF (#6) | Продаваемый артефакт |
| 2a | нед. 8–9 | ПКК-парсер + sales_tracker (#7) | ≥1000 участков ЕКБ |
| 2b | нед. 10–11 | Скоринг + API + UI Site Finder (#8) | Карта с цветовой градацией |
| 2c | нед. 12 | Site Finder ↔ Generative + реестр ПО (#9) | 3 платящих пилота |
Аналитический backlog: #17 velocity-anomaly, #18 ekb_districts median refresh, #19 competitor-360, #20 mortgage-rate sensitivity, #21 cad_buildings filters в Site Finder.
Команда и память проекта
2 фуллстек-разработчика, part-time 20 ч/нед, ритм: 1 синк/нед, daily-async в Telegram, PR-review обязательный, trunk-based. Codegen TS-типов из Pydantic — npm run codegen.
Все решения, факты, KPI, протоколы валидации хранятся в графе памяти (memory/memory-gendesign.jsonl, hardlink на C:\mcp\.aim\memory-gendesign.jsonl), не в .md-документах. Правило (Feedback_MemoryFirst): источник правды = граф, документы = снимки. Синхронизация между коллегами — через git pull/push.
Подключение коллеги к knowledge-graph (#11) — пошаговая инструкция в issue.
Полезные ссылки
| 🌐 Production | https://gendsgn.ru/ |
| 🩺 Health | https://gendsgn.ru/health |
| 📚 OpenAPI | https://gendsgn.ru/openapi.json · Swagger UI |
| Backlog | Issues · Milestones |
| Деплой | GitHub Actions · GHCR пакеты |
| Мониторинг | Sentry |
| Инфра | Beget VPS cp.beget.com/cloud/... · DNS |
Стратегические документы (снимки): docs/MVP_Goals_Python.md, docs/Бизнес-план v2.1 - Site Finder + Roadmap 12 месяцев.md. При расхождении с графом — доверяем графу.