# План проекта BMK · МТК 38–42

Модульная веб-платформа для пяти интерактивных арт-объектов музея В.И. Ленина: общий shell + специфичные для каждого МТК модули и контент.

## Принципы

1. **ТЗ — рамка, не догма.** Модули включаются только там, где имеют смысл. Пример: МТК 38 («Ленин на языках мира») — без видеомодуля, потому что снимать на нём нечего.
2. **Shell пишется один раз и переиспользуется пятью МТК.** Бренд, шрифты, киоск-режим, idle/attractor-цикл, навигация — общие.
3. **Контент отделён от кода.** JSON + ассеты. Куратор / заказчик дополняет без правок кода.
4. **Каждый МТК — это конфиг + контент + опциональный кастомный attractor.**

## Архитектура

```
BMK/38-42/
├── shell/                      ← общий каркас (один на все МТК)
│   ├── bootstrap.js            ← fullscreen, kiosk-lockdown, DPR
│   ├── theme.css               ← палитра, диагонали, layout
│   ├── fonts/                  ← Nolde, 21 Cent, 20 Kopeek
│   │                             + Noto Sans CJK / Arabic / Indic (bundled)
│   ├── idle.js                 ← таймер бездействия → reset to attractor
│   ├── router.js               ← attractor ↔ menu ↔ section ↔ detail
│   └── content-loader.js
├── modules/                    ← переиспользуемые слои
│   ├── menu-grid.js            ← плитки разделов
│   ├── section-view.js         ← текст ≤2700 знаков + иллюстрации
│   ├── detail-view.js          ← карточка объекта/персоны
│   ├── video-player.js         ← опциональный
│   ├── quote-pane.js
│   └── timeline.js             ← для МТК 42
├── mtk38/                      ← Ленин на языках мира
│   ├── config.json             ← { attractor: "globe",
│   │                               modules: ["menu","sections","detail","quote-pane"],
│   │                               video: false }
│   ├── content.json            ← языки → страны → мыслители → цитаты
│   └── attractor-globe.js      ← вытащено из текущего globe.js
├── mtk39/                      ← Имени Ленина
│   ├── config.json
│   ├── content.json            ← список объектов (из .docx)
│   └── attractor-objects.js
├── mtk40/                      ← Библиотека Ленина
├── mtk41/                      ← Скульптуры Ленина
└── mtk42/                      ← Апогей: осмысление наследия
```

### Shell — что в нём
- **Bootstrap**: fullscreen API, киоск-обвязка (отключение pinch-zoom, контекстного меню, drag, выделения), DPR-aware canvas-ресайз.
- **Theme**: палитра, диагональные брендовые полосы, шрифты — единый CSS-слой.
- **Idle controller**: настраиваемый таймер бездействия → возврат в attractor.
- **Router / state machine**: переходы `attractor → menu → section → detail → back`, история, обработка кнопки «назад» / автосброса.
- **Content loader**: чтение `config.json` + `content.json`, lazy-load изображений, кеш.
- **Module registry**: какие слои поднимаются — определяется конфигом конкретного МТК.

### Модули — переиспользуемые слои
Каждый модуль реализует общий интерфейс: `mount(container, content)`, `unmount()`, `onIdleTick()`. Shell не знает, что внутри — только поднимает по конфигу.

### Per-МТК
- `config.json` — какой attractor, какие модули, флаг видео, таймауты idle.
- `content.json` — данные раздела (структурированы под нужды модулей).
- `attractor-*.js` — собственный attractor под арт-объект.

## Этапы работ

| # | Этап | Что входит | Оценка |
|---|------|-----------|--------|
| 0 | **Фундамент** | каталоги, базовый shell, bundled шрифты, киоск-обвязка, idle-таймер, проверка на 4K вертикали | 1–2 дня |
| 1 | **Глобус как модуль** *(возвращаемся сюда сразу после фиксации плана)* | вытащить attractor-globe из монолита, обернуть в интерфейс модуля, визуал- и перф-правки | отдельный план |
| 2 | **МТК 38 целиком** | content.json (42 языка / страны / мыслители / цитаты), menu-grid + section-view + detail-view, переходы | 1–2 недели |
| 3 | **МТК 39 (Имени Ленина)** | парсинг списка из .docx → content.json, attractor (плитка/облако объектов), переиспользование menu/section/detail | 1–1.5 недели |
| 4 | **МТК 41 (Скульптуры)** | контент 15+ памятников, attractor (сетка скульптур), первый МТК с видеомодулем | 1–1.5 недели |
| 5 | **МТК 40 (Библиотека)** | каталог книг, attractor (стопка/полка), видеомодуль опционально | 1–1.5 недели |
| 6 | **МТК 42 (Апогей)** | таймлайн «деленинизация → ренессанс», цитаты, разделы об исследователях, видеомодуль | 1.5–2 недели |
| 7 | **Production-сборка и приёмка** | минификация, тест на целевом железе (49" 4K вертикаль), failure recovery, логирование | 3–5 дней |

## Карта модулей по МТК

| МТК | Контент-источник | Attractor | Меню | Секции | Detail | Видео | Цитаты | Таймлайн |
|-----|------------------|-----------|:----:|:------:|:------:|:-----:|:------:|:--------:|
| 38  | собирать (42 языка → страны) | globe ✓ (есть) | ✓ | ✓ | ✓ | — | ✓ | — |
| 39  | большой список в .docx | objects-cloud | ✓ | ✓ | ✓ | возможно | — | — |
| 40  | собирать (каталог книг) | book-stack | ✓ | ✓ | ✓ | возможно | ✓ | — |
| 41  | список 15+ памятников в .docx | sculpture-grid | ✓ | ✓ | ✓ | ✓ | — | — |
| 42  | развёрнутый текст в .docx | timeline-attractor | ✓ | ✓ | ✓ | ✓ | ✓ (много) | ✓ |

## Риски и неизвестные

- **Шрифты для не-латиницы** — главный технический риск. На музейном киоске не гарантированы CJK / Arabic / Indic шрифты. Решение: bundled Noto Sans (SIL OFL). Размер ≈ 30–60 MB на все скрипты — для локального киоска не проблема.
- **Производительность 4K canvas** на музейном железе (обычно неттоп с интегральной графикой). Глобус в текущем виде на 4K может проседать. Нужен профайлинг на целевом стенде.
- **Контент не готов** для МТК 38 и 40 — есть только описание задачи. МТК 39, 41, 42 имеют материалы в .docx. Нужен ритм синхронизаций с куратором.
- **МТК 42 — самый сложный** (самый объёмный текст, наиболее тонкая тема). Делаем **последним**, когда платформа уже отлажена.
- **Эргономика 49" вертикали** — посетитель ростом 160–180 см. Нижние 30% экрана — некомфортная зона. Основные интерактивные элементы — в средне-верхней части.

## Открытые вопросы к заказчику

1. Музейное железо — конкретная модель неттопа / ОС / браузер? (для оценки производительности и киоск-обвязки)
2. Какие МТК идут с видеоматериалом, какие — нет? Подтверждаем, что МТК 38 без видео; уточняем по 39, 40.
3. Контент МТК 38: кто и в каком формате готовит таблицу «язык → страна → ключевой мыслитель/деятель → цитата»?
4. Сетевой режим — киоск онлайн или офлайн (весь контент локально)?
5. Языки интерфейса — только русский, или русский + английский (для иностранных гостей)?
6. Брендбук — текущая палитра / шрифты / диагонали финальные, или будут правки от дизайн-отдела?
7. Сроки сдачи и порядок (последовательно МТК 38 → … → 42, или параллельно)?

## Что дальше

План зафиксирован. **Возвращаемся к глобусу** (этап 1) — собираем под него отдельный микро-план: что из текущей реализации остаётся, что переписывается, как вытащим его в модуль `attractor-globe`, какие визуальные/перф-правки делаем сейчас.
