diff --git a/frontend/next.config.ts b/frontend/next.config.ts
index 891ee6d7..dd8fb5a8 100644
--- a/frontend/next.config.ts
+++ b/frontend/next.config.ts
@@ -33,6 +33,18 @@ const nextConfig: NextConfig = {
},
];
},
+ // Markdown в public/docs/ — отдаём с text/markdown + charset, чтобы
+ // браузер показывал inline (не download).
+ async headers() {
+ return [
+ {
+ source: "/docs/:path*.md",
+ headers: [
+ { key: "Content-Type", value: "text/markdown; charset=utf-8" },
+ ],
+ },
+ ];
+ },
};
export default nextConfig;
diff --git a/frontend/public/docs/b2b-channels.md b/frontend/public/docs/b2b-channels.md
new file mode 100644
index 00000000..efb4c48a
--- /dev/null
+++ b/frontend/public/docs/b2b-channels.md
@@ -0,0 +1,84 @@
+# B2B-каналы для site-finder данных
+
+**Эшелон:** 🤝 B2B / коммерческий канал — для Макса
+
+## Контекст / проблема
+
+Текущий scoring строится на open-data (OSM, ДОМ.РФ public API, ФГИС ТП HTML, ДДУ из открытых выгрузок). Это покрывает ~70% сигналов, но **30% решающих факторов для МКД требуют B2B-договорённостей** с разными контрагентами.
+
+Этот документ — **реестр всех известных B2B-вопросов**, которые надо отдать Максу для проработки/договорённостей. По мере появления — комментарии.
+
+## Реестр B2B-направлений
+
+### 1. Инженерные сети (РСО) — высокий приоритет
+
+- **МРСК Урала (электроэнергия):** доступная мощность по подстанции, прогноз очерёдности подключения, тариф за кВт мощности
+ - Вопрос: есть ли API/выгрузка по нагрузке per substation? Иначе нужен подписанный договор обмена данными.
+- **МУП «Водоканал» Екатеринбурга:** наличие магистральных сетей в radius 200м, мощность, точки подключения
+ - Вопрос: предоставляют ли GIS-слой публичных сетей? Условия?
+- **Газпром межрегионгаз / ГРО** — газоснабжение
+- **СТК (Свердловская теплоснабжающая компания) / Т Плюс** — теплосеть, доступная нагрузка
+
+**Альтернатива:** покупка от одного агрегатора (есть провайдеры типа ТехУслуги/Атон) — узнать у Макса контакты.
+
+### 2. ЗОУИТ из ФГИС ТП — high priority для G3
+
+- **Минэкономразвития РФ / Росреестр** — ФГИС ТП (fgistp.economy.gov.ru) даёт shape ЗОУИТ, но через личный кабинет / HTML-парсинг. Возможен ли B2B-доступ к структурированным выгрузкам?
+- **Прокадастр / EGRN.reestr.net** — платные API ~10-30K ₽/мес выдают декодированные ЗОУИТ. Узнать у Макса какой провайдер удобнее.
+
+### 3. ПЗЗ — medium priority для G1
+
+- **Минстрой Свердл / Администрация ЕКБ** — официальный shape ПЗЗ с параметрами. data.midural.ru может не отдавать полноту.
+- Узнать у Макса контакт в Минстрое.
+
+### 4. Шахматки застройщиков — high priority для data moat
+
+- **Топ-7 застройщиков Екб** (Атомстрой, Брусника, ТЭН, Стройтек, Прогресс, УГМК, КОРТРОС) — публичные шахматки на сайтах
+- Web-scrape технически возможен, но **юр-партнёрство снижает риск исков**
+- Из SalesTracking_Strategy_Apr25: «партнёрство возамен аналитики» с топ-3
+- Узнать у Макса, кто открыт к диалогу
+
+### 5. Аналитика продаж конкурентов — medium priority для D5
+
+- **Объектив API** — уже используем (Антон), но ограниченный план
+ - Узнать про upgrade тариф и full Свердл coverage
+- **Сбер ДДФ** — есть `sber_ddf_metrics` в БД, но не полно
+ - Узнать про подписку
+
+### 6. Демография — medium priority для I1
+
+- **Росстат** — публично, но per-район ЕКБ гранулярность OKATO/OKTMO
+- Альтернатива: купить срез у Финама/Спарка/etc
+
+### 7. CRM данных других девелоперов — long-term для D5
+
+- Сейчас только PRINZIP (через Антона)
+- B2B-предложение «вы даёте свой CRM, мы аналитику соседей» — нужны 2-3 договорённости для значимой агрегации
+
+### 8. ОКН (объекты культурного наследия)
+
+- Свердл реестр не структурирован, нужен HTML-парсинг
+- Узнать про официальный shape от Управления ОКН Свердл
+
+## Что от Макса
+
+- ✅ Подтвердить приоритеты в реестре (что критично сейчас vs «можно подождать»)
+- ✅ Контакты в РСО, Минстрое, Минэкономразвития
+- ✅ Бюджет на платные API (Прокадастр ≈30K ₽/мес, Объектив upgrade — узнать прайс)
+- ✅ Аналог LOI или MOU с топ-3 застройщиками Екб
+- ✅ Кто готов давать данные за аналитику (partnership offer)
+
+## Acceptance
+
+- [ ] Этот документ — **постоянный реестр** (живёт до Раунда А)
+- [ ] Каждый new B2B-вопрос → добавление в раздел с тегом контрагента
+- [ ] Раз в 2 недели — sync с Максом, статусы переводятся (📞 contacted / ✅ agreed / ❌ declined)
+
+## Owner
+
+- **Coordinator:** main session ↔ Макс
+- Реализация после получения каналов: соответствующий worker-агент (database-expert для shapefile import, backend-engineer для API integration)
+
+## Effort
+
+multi-week (не technical, organizational)
diff --git a/frontend/src/app/docs/b2b-channels/page.tsx b/frontend/src/app/docs/b2b-channels/page.tsx
new file mode 100644
index 00000000..cdbc76fe
--- /dev/null
+++ b/frontend/src/app/docs/b2b-channels/page.tsx
@@ -0,0 +1,83 @@
+import fs from "node:fs";
+import path from "node:path";
+import Link from "next/link";
+
+import { renderMarkdown } from "./renderMarkdown";
+
+export const metadata = {
+ title: "B2B-каналы для site-finder · GenDesign",
+ description: "Реестр B2B-вопросов для координации с Максом",
+};
+
+export default function B2BChannelsPage() {
+ const mdPath = path.join(process.cwd(), "public", "docs", "b2b-channels.md");
+ const raw = fs.readFileSync(mdPath, "utf-8");
+
+ return (
+ $1");
+ // bold **...**
+ html = html.replace(/\*\*([^*]+)\*\*/g, "$1");
+ // links [text](url)
+ html = html.replace(
+ /\[([^\]]+)\]\(([^)]+)\)/g,
+ '$1',
+ );
+ // checkboxes
+ html = html.replace(
+ /\[ \]/g,
+ '',
+ );
+ html = html.replace(
+ /\[x\]/gi,
+ '',
+ );
+ return html;
+}
+
+export function renderMarkdown(md: string): string {
+ const lines = md.split("\n");
+ const out: string[] = [];
+ let inList = false;
+
+ for (const rawLine of lines) {
+ const line = rawLine.replace(/\r$/, "");
+
+ if (line.trim() === "") {
+ if (inList) {
+ out.push("");
+ inList = false;
+ }
+ continue;
+ }
+
+ // Headings
+ if (line.startsWith("### ")) {
+ if (inList) {
+ out.push("");
+ inList = false;
+ }
+ out.push(`
${inlineMd(line)}
`); + } + + if (inList) out.push(""); + return out.join("\n"); +}