# NDC Module Studio Текущий living catalog эволюционирует в Module Studio без создания второго визуального приложения. Существующие разделы остаются `Visual Library`; рядом живут `Page Library` и `Applications`. Первый вертикальный срез не подключает Engine, Cesium, Authentik, Hub или Deploy. ## Page Template contract v0.1 Канонические TypeScript-контракты и manifests находятся в `@nodedc/page-patterns`, машинно-читаемый реестр — в `registry/pages.json`. Первый шаблон `Map Page 0.1.0` формально фиксирует: - template identity и pinned version; - стартовую страницу и navigation defaults; - разрешённые feature flags `Inspector`, `Toolbar`, `Assistant`; - runtime-neutral slots `points`, `traces`, `routes`, `zones`, `selection`, `commands`, `assistant`; - template-owned actions. Шаблон не содержит Cesium token, Engine workflow, React component tree или свободные координаты элементов. Renderer/Cesium adapter и Capability Bindings являются отдельными следующими слоями. ## Application Manifest v0.1 Каноническая JSON Schema: `registry/schemas/application-manifest-v0.1.schema.json`. Manifest фиксирует: - identity, slug, draft status и версию; - ссылку на Design Profile и Dark/Light; - хотя бы одну страницу и pinned page-template version; - navigation visibility; - только заранее разрешённые feature flags; - favicon source; - server-controlled timestamps. Manifest не хранит runtime credentials, capability bindings, arbitrary component tree, свободные координаты элементов или deployment secrets. ## Draft lifecycle Catalog server предоставляет минимальный временный API: - `GET /api/applications` — список drafts; - `GET /api/page-templates` — получить канонический page registry; - `POST /api/applications` — создать draft из явно выбранных `templateId` и `templateVersion`; - `GET /api/applications/:id` — открыть draft; - `PUT /api/applications/:id` — атомарно сохранить draft. Файлы находятся в `runtime-data/applications` и исключены из Git. Этот store доказывает lifecycle `create → save → reload → open`; целевой production store позже принадлежит Platform `application-core`. ## Согласованный UX Application Projects - круглая кнопка `+` в заголовке Applications открывает модалку создания модуля; - текущий модуль выбирается через Hub-style searchable selector, а не через плоский список проектов; - root модуля содержит metadata, ссылку на один pinned Design Profile и Application Composition; - Dark/Light, favicon, Glass и прочие визуальные параметры не настраиваются внутри модуля; - две равные колонки `Доступные страницы / Конфигурация приложения` работают только с готовыми Page Templates; - drag-and-drop меняет состав и порядок ссылок на шаблоны, но не создаёт свободный canvas; - после сохранения страницы появляются в левой навигации и открывают визуальный preview; - режимы `Настройка / Предпросмотр` разделяют Studio controls и поведение будущего приложения; - удаление draft выполняется только через destructive confirmation modal. ## Design Profile lifecycle Visual Library использует отдельный Hub-style selector профилей. Общая кнопка Save открывает каноническую модалку `Сохранить / Сохранить как новый`. Приложение хранит только pinned `profile id + version + theme`; media, favicon и material settings принадлежат Design Profile. Временный catalog server предоставляет: - `GET /api/design-profiles`; - `GET /api/design-profiles/:id`; - `POST /api/design-profiles`; - `PUT /api/design-profiles/:id`; - `DELETE /api/applications/:id` с переносом draft в локальное deleted-storage.