diff --git a/admin/admin.js b/admin/admin.js index 866e119..8c1e4c5 100644 --- a/admin/admin.js +++ b/admin/admin.js @@ -123,11 +123,17 @@ const GROUP_COPY = { "Юридический блок": "Политики, права и нижний текст формы.", "Видео-окно": "Окно демо-видео и подключенный медиа-файл.", Пункты: "Текстовые пункты внутри секции.", + Слайдер: "Видео-превью и подписи карточек внутри горизонтального слайдера.", + "Один клик": "Подблок про быстрое добавление и настройку компонентов.", + MCP: "Подблок про MCP-сервер и контекст Webflow.", + FAQ: "Список вопросов и тексты ответов в mail-интерфейсе.", + CTA: "Финальный призыв к действию: заголовок, пояснение, кнопка и ссылка.", + Тарифы: "Верхняя часть тарифной таблицы: заголовки, планы, цены, кнопки и примечания.", Контент: "Остальные typed-поля выбранного блока.", }; -function field(path, label, kind = "text", renderAs = kind === "html" ? "html" : "text", group = null) { - return { path, label, kind, renderAs, group: group || inferFieldGroup(path) }; +function field(path, label, kind = "text", renderAs = kind === "html" ? "html" : "text", group = null, options = {}) { + return { path, label, kind, renderAs, group: group || inferFieldGroup(path), ...options }; } function setStatus(message) { @@ -171,6 +177,12 @@ function inferFieldGroup(path) { if (path === "content.legalHtml") return "Юридический блок"; if (path === "content.windowTitle" || path === "content.videoSrc") return "Видео-окно"; if (path.startsWith("content.features.")) return "Пункты"; + if (path.startsWith("content.sliderItems.")) return "Слайдер"; + if (path.startsWith("content.oneClick.")) return "Один клик"; + if (path.startsWith("content.mcp.")) return "MCP"; + if (path.startsWith("content.faq.")) return "FAQ"; + if (path.startsWith("content.cta.")) return "CTA"; + if (path.startsWith("content.plans.") || path.startsWith("content.pricing.")) return "Тарифы"; if (path.startsWith("content.heading.") || path === "content.introHtml") return "Заголовок"; return "Контент"; } diff --git a/content/pages/home.json b/content/pages/home.json index af3b4d1..05f7490 100644 --- a/content/pages/home.json +++ b/content/pages/home.json @@ -695,11 +695,1105 @@ "blocks": [ { "region": "cViz", - "id": "product-system", - "type": "staticHtml", - "template": "product-system.html", - "adminLabel": "Компоненты, режимы, FAQ и тарифная таблица", + "id": "component-library", + "type": "componentLibrary", + "template": "component-library.html", + "adminLabel": "Компонентная библиотека и MCP", "anchor": null, + "content": { + "heading": { + "muted": "Агентная", + "middle": "Компонентная", + "main": "библиотека." + }, + "introHtml": "Готовая к работе с агентами компонентная библиотека: добавление в один клик через приложение NODE.DC для Webflow и дальнейшая настройка под проект.", + "sliderItems": [ + { + "videoSrc": "./assets/media/various-modes.mp4", + "title": "Переключение режимов ИИ" + }, + { + "videoSrc": "./assets/media/project-flow.mp4", + "title": "Создание нового проекта" + }, + { + "videoSrc": "./assets/media/ai-dock-mode.mp4", + "title": "ИИ-док" + }, + { + "videoSrc": "./assets/media/account.mp4", + "title": "Аккаунт" + }, + { + "videoSrc": "./assets/media/code-edits.mp4", + "title": "Редактирование кода с ИИ" + }, + { + "videoSrc": "./assets/media/dev-server.mp4", + "title": "Dev-сервер с ИИ" + }, + { + "videoSrc": "./assets/media/webflow-mcp.mp4", + "title": "Webflow MCP" + }, + { + "videoSrc": "./assets/media/publish-flow.mp4", + "title": "Публикация" + } + ], + "oneClick": { + "heading": { + "muted": "Один", + "middle": "клик", + "main": "добавления." + }, + "introHtml": "С помощью расширения NODE.DC для Webflow. ", + "items": [ + { + "eyebrow": "Понимание компонентов", + "bodyHtml": "Используйте несколько агентов параллельно чтобы добавлять кастомный код, анимации и функциональность." + }, + { + "eyebrow": "Быстрый старт", + "bodyHtml": "Используйте быстрые Bun сборки и автообновление для вашего кастомного кода." + } + ] + }, + "mcp": { + "heading": { + "muted": "Получите", + "middle": "более сильный", + "main": "MCP." + }, + "introHtml": "Полностью переработанный и более быстрый MCP-сервер. ", + "items": [ + { + "eyebrow": "Понимание Webflow", + "bodyHtml": "Используйте несколько агентов параллельно чтобы добавлять кастомный код, анимации и функциональность." + } + ] + } + }, + "editableFields": [ + { + "path": "content.heading.muted", + "label": "Заголовок: приглушённая строка", + "kind": "text", + "renderAs": "text", + "group": "Заголовок" + }, + { + "path": "content.heading.middle", + "label": "Заголовок: средняя строка", + "kind": "text", + "renderAs": "text", + "group": "Заголовок" + }, + { + "path": "content.heading.main", + "label": "Заголовок: основная строка", + "kind": "text", + "renderAs": "text", + "group": "Заголовок" + }, + { + "path": "content.introHtml", + "label": "Вводный текст", + "kind": "html", + "renderAs": "html", + "group": "Заголовок" + }, + { + "path": "content.sliderItems.0.videoSrc", + "label": "Слайд 1: видео", + "kind": "media", + "renderAs": "attr", + "group": "Слайдер" + }, + { + "path": "content.sliderItems.0.title", + "label": "Слайд 1: подпись", + "kind": "text", + "renderAs": "text", + "group": "Слайдер" + }, + { + "path": "content.sliderItems.1.videoSrc", + "label": "Слайд 2: видео", + "kind": "media", + "renderAs": "attr", + "group": "Слайдер" + }, + { + "path": "content.sliderItems.1.title", + "label": "Слайд 2: подпись", + "kind": "text", + "renderAs": "text", + "group": "Слайдер" + }, + { + "path": "content.sliderItems.2.videoSrc", + "label": "Слайд 3: видео", + "kind": "media", + "renderAs": "attr", + "group": "Слайдер" + }, + { + "path": "content.sliderItems.2.title", + "label": "Слайд 3: подпись", + "kind": "text", + "renderAs": "text", + "group": "Слайдер" + }, + { + "path": "content.sliderItems.3.videoSrc", + "label": "Слайд 4: видео", + "kind": "media", + "renderAs": "attr", + "group": "Слайдер" + }, + { + "path": "content.sliderItems.3.title", + "label": "Слайд 4: подпись", + "kind": "text", + "renderAs": "text", + "group": "Слайдер" + }, + { + "path": "content.sliderItems.4.videoSrc", + "label": "Слайд 5: видео", + "kind": "media", + "renderAs": "attr", + "group": "Слайдер" + }, + { + "path": "content.sliderItems.4.title", + "label": "Слайд 5: подпись", + "kind": "text", + "renderAs": "text", + "group": "Слайдер" + }, + { + "path": "content.sliderItems.5.videoSrc", + "label": "Слайд 6: видео", + "kind": "media", + "renderAs": "attr", + "group": "Слайдер" + }, + { + "path": "content.sliderItems.5.title", + "label": "Слайд 6: подпись", + "kind": "text", + "renderAs": "text", + "group": "Слайдер" + }, + { + "path": "content.sliderItems.6.videoSrc", + "label": "Слайд 7: видео", + "kind": "media", + "renderAs": "attr", + "group": "Слайдер" + }, + { + "path": "content.sliderItems.6.title", + "label": "Слайд 7: подпись", + "kind": "text", + "renderAs": "text", + "group": "Слайдер" + }, + { + "path": "content.sliderItems.7.videoSrc", + "label": "Слайд 8: видео", + "kind": "media", + "renderAs": "attr", + "group": "Слайдер" + }, + { + "path": "content.sliderItems.7.title", + "label": "Слайд 8: подпись", + "kind": "text", + "renderAs": "text", + "group": "Слайдер" + }, + { + "path": "content.oneClick.heading.muted", + "label": "Один клик: приглушённая строка", + "kind": "text", + "renderAs": "text", + "group": "Один клик" + }, + { + "path": "content.oneClick.heading.middle", + "label": "Один клик: средняя строка", + "kind": "text", + "renderAs": "text", + "group": "Один клик" + }, + { + "path": "content.oneClick.heading.main", + "label": "Один клик: основная строка", + "kind": "text", + "renderAs": "text", + "group": "Один клик" + }, + { + "path": "content.oneClick.introHtml", + "label": "Один клик: вводный текст", + "kind": "html", + "renderAs": "html", + "group": "Один клик" + }, + { + "path": "content.oneClick.items.0.eyebrow", + "label": "Один клик: пункт 1, подпись", + "kind": "text", + "renderAs": "text", + "group": "Один клик" + }, + { + "path": "content.oneClick.items.0.bodyHtml", + "label": "Один клик: пункт 1, текст", + "kind": "html", + "renderAs": "html", + "group": "Один клик" + }, + { + "path": "content.oneClick.items.1.eyebrow", + "label": "Один клик: пункт 2, подпись", + "kind": "text", + "renderAs": "text", + "group": "Один клик" + }, + { + "path": "content.oneClick.items.1.bodyHtml", + "label": "Один клик: пункт 2, текст", + "kind": "html", + "renderAs": "html", + "group": "Один клик" + }, + { + "path": "content.mcp.heading.muted", + "label": "MCP: приглушённая строка", + "kind": "text", + "renderAs": "text", + "group": "MCP" + }, + { + "path": "content.mcp.heading.middle", + "label": "MCP: средняя строка", + "kind": "text", + "renderAs": "text", + "group": "MCP" + }, + { + "path": "content.mcp.heading.main", + "label": "MCP: основная строка", + "kind": "text", + "renderAs": "text", + "group": "MCP" + }, + { + "path": "content.mcp.introHtml", + "label": "MCP: вводный текст", + "kind": "html", + "renderAs": "html", + "group": "MCP" + }, + { + "path": "content.mcp.items.0.eyebrow", + "label": "MCP: пункт 1, подпись", + "kind": "text", + "renderAs": "text", + "group": "MCP" + }, + { + "path": "content.mcp.items.0.bodyHtml", + "label": "MCP: пункт 1, текст", + "kind": "html", + "renderAs": "html", + "group": "MCP" + } + ], + "enabled": true + }, + { + "region": "cViz", + "id": "ai-modes", + "type": "aiModes", + "template": "ai-modes.html", + "adminLabel": "Гибкие режимы ИИ", + "anchor": null, + "content": { + "heading": { + "muted": "Гибкие", + "main": "режимы ИИ." + }, + "introHtml": "Разные режимы и модели для разных задач.", + "sliderItems": [ + { + "videoSrc": "./assets/media/various-modes.mp4", + "title": "Переключение режимов ИИ" + }, + { + "videoSrc": "./assets/media/project-flow.mp4", + "title": "Создание нового проекта" + }, + { + "videoSrc": "./assets/media/ai-dock-mode.mp4", + "title": "ИИ-док" + }, + { + "videoSrc": "./assets/media/account.mp4", + "title": "Аккаунт" + }, + { + "videoSrc": "./assets/media/code-edits.mp4", + "title": "Редактирование кода с ИИ" + }, + { + "videoSrc": "./assets/media/dev-server.mp4", + "title": "Dev-сервер с ИИ" + }, + { + "videoSrc": "./assets/media/webflow-mcp.mp4", + "title": "Webflow MCP" + }, + { + "videoSrc": "./assets/media/publish-flow.mp4", + "title": "Публикация" + } + ] + }, + "editableFields": [ + { + "path": "content.heading.muted", + "label": "Заголовок: приглушённая строка", + "kind": "text", + "renderAs": "text", + "group": "Заголовок" + }, + { + "path": "content.heading.main", + "label": "Заголовок: основная строка", + "kind": "text", + "renderAs": "text", + "group": "Заголовок" + }, + { + "path": "content.introHtml", + "label": "Вводный текст", + "kind": "html", + "renderAs": "html", + "group": "Заголовок" + }, + { + "path": "content.sliderItems.0.videoSrc", + "label": "Слайд 1: видео", + "kind": "media", + "renderAs": "attr", + "group": "Слайдер" + }, + { + "path": "content.sliderItems.0.title", + "label": "Слайд 1: подпись", + "kind": "text", + "renderAs": "text", + "group": "Слайдер" + }, + { + "path": "content.sliderItems.1.videoSrc", + "label": "Слайд 2: видео", + "kind": "media", + "renderAs": "attr", + "group": "Слайдер" + }, + { + "path": "content.sliderItems.1.title", + "label": "Слайд 2: подпись", + "kind": "text", + "renderAs": "text", + "group": "Слайдер" + }, + { + "path": "content.sliderItems.2.videoSrc", + "label": "Слайд 3: видео", + "kind": "media", + "renderAs": "attr", + "group": "Слайдер" + }, + { + "path": "content.sliderItems.2.title", + "label": "Слайд 3: подпись", + "kind": "text", + "renderAs": "text", + "group": "Слайдер" + }, + { + "path": "content.sliderItems.3.videoSrc", + "label": "Слайд 4: видео", + "kind": "media", + "renderAs": "attr", + "group": "Слайдер" + }, + { + "path": "content.sliderItems.3.title", + "label": "Слайд 4: подпись", + "kind": "text", + "renderAs": "text", + "group": "Слайдер" + }, + { + "path": "content.sliderItems.4.videoSrc", + "label": "Слайд 5: видео", + "kind": "media", + "renderAs": "attr", + "group": "Слайдер" + }, + { + "path": "content.sliderItems.4.title", + "label": "Слайд 5: подпись", + "kind": "text", + "renderAs": "text", + "group": "Слайдер" + }, + { + "path": "content.sliderItems.5.videoSrc", + "label": "Слайд 6: видео", + "kind": "media", + "renderAs": "attr", + "group": "Слайдер" + }, + { + "path": "content.sliderItems.5.title", + "label": "Слайд 6: подпись", + "kind": "text", + "renderAs": "text", + "group": "Слайдер" + }, + { + "path": "content.sliderItems.6.videoSrc", + "label": "Слайд 7: видео", + "kind": "media", + "renderAs": "attr", + "group": "Слайдер" + }, + { + "path": "content.sliderItems.6.title", + "label": "Слайд 7: подпись", + "kind": "text", + "renderAs": "text", + "group": "Слайдер" + }, + { + "path": "content.sliderItems.7.videoSrc", + "label": "Слайд 8: видео", + "kind": "media", + "renderAs": "attr", + "group": "Слайдер" + }, + { + "path": "content.sliderItems.7.title", + "label": "Слайд 8: подпись", + "kind": "text", + "renderAs": "text", + "group": "Слайдер" + } + ], + "enabled": true + }, + { + "region": "cViz", + "id": "faq", + "type": "faqSection", + "template": "faq.html", + "adminLabel": "Частые вопросы и ответы", + "anchor": null, + "content": { + "heading": { + "muted": "Частые", + "middle": "вопросы", + "main": "и ответы" + }, + "introHtml": "Подробный обзор возможностей, логики работы и внутреннего устройства.", + "docsHref": "https://docs.ssscript.app/", + "docsLabel": "Полная документация", + "windowTitle": "FAQ", + "faq": [ + { + "question": "Это влияет на производительность?", + "answerHtml": "
Как и любой кастомный код, это добавляет только ту нагрузку, которую несёт сам код.
Все файлы собираются, минифицируются и сжимаются, чтобы минимально влиять на проект и не плодить внешние библиотеки и CDN-скрипты.
" + }, + { + "question": "Где размещаются мои файлы?", + "answerHtml": "После сборки файлы загружаются в Cloudflare R2 и отдаются через CDN-ссылку на выделенном домене проекта, чтобы получить быстрый и совместимый с Webflow результат.
" + }, + { + "question": "Что делать, если я опубликовал не те файлы?", + "answerHtml": "В панели деплоя есть мгновенный откат.
Нажмите откат, верните предыдущую рабочую версию, исправьте локально и опубликуйте заново.
" + }, + { + "question": "Что такое ИИ-агент Webflow?", + "answerHtml": "Помимо @plan, @build и @explore стандартных режимов агентов мы готовим @webflow режим, специально заточенный под Webflow: структуру проекта, взаимодействие с ним и эффективную разработку.
" + }, + { + "question": "Что такое собственная база знаний?", + "answerHtml": "Основано на многолетнем опыте написания кастомного кода для Webflow-анимаций.
WebGL, Three.js, GSAP и кастомная функциональность собраны в набор практик, пайплайнов и модульную систему, чтобы всё работало согласованно.
Также доступна библиотека компонентов: выберите компонент, добавьте в проект и попросите ИИ адаптировать его под задачу.
" + }, + { + "question": "Как использовать это с Webflow?", + "answerHtml": "При запуске NODE.DC доступна отдельная вкладка для встраивания.
В зависимости от задачи можно получить скрипты для конкретной страницы или единый app.js для всего проекта.
Сгенерированная ссылка содержит и продакшен-версию, следующую за URL деплоя, и локальную версию для предпросмотра без влияния на посетителей сайта.
" + }, + { + "question": "Какие ИИ-модели доступны?", + "answerHtml": "Мы используем основные доступные модели: OpenAI до Claude до Gemini.
Оркестратор выбирает модель под задачу автоматически, но вы можете вручную переключиться на нужную модель.
" + }, + { + "question": "Как это работает?", + "answerHtml": "Во время работы NODE.DC выполняет две задачи параллельно.
Поднимает локальную среду разработки на Bun, синхронизирует JavaScript и TypeScript, включает HMR и держит webhook для автоматического обновления сайта при изменениях.
Одновременно работает оркестратор ИИ-агентов: обрабатывает запросы, меняет код, проверяет состояние сборки и при необходимости обновляет проект Webflow.
" + }, + { + "question": "Как работает публикация?", + "answerHtml": "Процесс многоэтапный: сначала Bun собирает, сжимает, минифицирует и подготавливает проект вместе с библиотеками.
Затем файлы отправляются в CDN: cdn.node.dc/{USERNAME}/{PROJECT-NAME}. Ссылка уже содержит нужную структуру: вы видите локальную версию, а пользователи получают опубликованный скрипт.
Система изначально рассчитана на работу с Webflow MCP.
Подключите проект и авторизацию, чтобы ИИ-агенты получили доступ к Webflow-сборке. Подключение приложения в Webflow Designer даёт агентам доступ к контенту, элементам, стилям и CSS, а кастомный код получает полный контекст проекта.
" + } + ] + }, + "editableFields": [ + { + "path": "content.heading.muted", + "label": "Заголовок: приглушённая строка", + "kind": "text", + "renderAs": "text", + "group": "Заголовок" + }, + { + "path": "content.heading.middle", + "label": "Заголовок: средняя строка", + "kind": "text", + "renderAs": "text", + "group": "Заголовок" + }, + { + "path": "content.heading.main", + "label": "Заголовок: основная строка", + "kind": "text", + "renderAs": "text", + "group": "Заголовок" + }, + { + "path": "content.introHtml", + "label": "Вводный текст", + "kind": "html", + "renderAs": "html", + "group": "Заголовок" + }, + { + "path": "content.docsHref", + "label": "Документация: ссылка", + "kind": "url", + "renderAs": "attr", + "group": "Контент" + }, + { + "path": "content.docsLabel", + "label": "Документация: кнопка", + "kind": "text", + "renderAs": "text", + "group": "Контент" + }, + { + "path": "content.windowTitle", + "label": "Окно: название", + "kind": "text", + "renderAs": "text", + "group": "Видео-окно" + }, + { + "path": "content.faq.0.question", + "label": "FAQ 1: вопрос", + "kind": "text", + "renderAs": "text", + "group": "FAQ", + "replaceAll": true + }, + { + "path": "content.faq.0.answerHtml", + "label": "FAQ 1: ответ", + "kind": "html", + "renderAs": "html", + "group": "FAQ" + }, + { + "path": "content.faq.1.question", + "label": "FAQ 2: вопрос", + "kind": "text", + "renderAs": "text", + "group": "FAQ", + "replaceAll": true + }, + { + "path": "content.faq.1.answerHtml", + "label": "FAQ 2: ответ", + "kind": "html", + "renderAs": "html", + "group": "FAQ" + }, + { + "path": "content.faq.2.question", + "label": "FAQ 3: вопрос", + "kind": "text", + "renderAs": "text", + "group": "FAQ", + "replaceAll": true + }, + { + "path": "content.faq.2.answerHtml", + "label": "FAQ 3: ответ", + "kind": "html", + "renderAs": "html", + "group": "FAQ" + }, + { + "path": "content.faq.3.question", + "label": "FAQ 4: вопрос", + "kind": "text", + "renderAs": "text", + "group": "FAQ", + "replaceAll": true + }, + { + "path": "content.faq.3.answerHtml", + "label": "FAQ 4: ответ", + "kind": "html", + "renderAs": "html", + "group": "FAQ" + }, + { + "path": "content.faq.4.question", + "label": "FAQ 5: вопрос", + "kind": "text", + "renderAs": "text", + "group": "FAQ", + "replaceAll": true + }, + { + "path": "content.faq.4.answerHtml", + "label": "FAQ 5: ответ", + "kind": "html", + "renderAs": "html", + "group": "FAQ" + }, + { + "path": "content.faq.5.question", + "label": "FAQ 6: вопрос", + "kind": "text", + "renderAs": "text", + "group": "FAQ", + "replaceAll": true + }, + { + "path": "content.faq.5.answerHtml", + "label": "FAQ 6: ответ", + "kind": "html", + "renderAs": "html", + "group": "FAQ" + }, + { + "path": "content.faq.6.question", + "label": "FAQ 7: вопрос", + "kind": "text", + "renderAs": "text", + "group": "FAQ", + "replaceAll": true + }, + { + "path": "content.faq.6.answerHtml", + "label": "FAQ 7: ответ", + "kind": "html", + "renderAs": "html", + "group": "FAQ" + }, + { + "path": "content.faq.7.question", + "label": "FAQ 8: вопрос", + "kind": "text", + "renderAs": "text", + "group": "FAQ", + "replaceAll": true + }, + { + "path": "content.faq.7.answerHtml", + "label": "FAQ 8: ответ", + "kind": "html", + "renderAs": "html", + "group": "FAQ" + }, + { + "path": "content.faq.8.question", + "label": "FAQ 9: вопрос", + "kind": "text", + "renderAs": "text", + "group": "FAQ", + "replaceAll": true + }, + { + "path": "content.faq.8.answerHtml", + "label": "FAQ 9: ответ", + "kind": "html", + "renderAs": "html", + "group": "FAQ" + }, + { + "path": "content.faq.9.question", + "label": "FAQ 10: вопрос", + "kind": "text", + "renderAs": "text", + "group": "FAQ", + "replaceAll": true + }, + { + "path": "content.faq.9.answerHtml", + "label": "FAQ 10: ответ", + "kind": "html", + "renderAs": "html", + "group": "FAQ" + } + ], + "enabled": true + }, + { + "region": "cViz", + "id": "publish-cta", + "type": "publishCta", + "template": "publish-cta.html", + "adminLabel": "Финальный CTA перед тарифами", + "anchor": "hero", + "content": { + "cta": { + "heading": { + "muted": "Подключить.", + "middle": "Поставить задачу.", + "main": "Опубликовать." + }, + "intro": "Единый путь от разработки до продакшена.", + "detailHtml": "Настройка примерно в 12 кликов: от скачивания приложения до запуска в проекте.", + "href": "index.html#hero", + "buttonLabel": "Встать в лист ожидания" + } + }, + "editableFields": [ + { + "path": "content.cta.heading.muted", + "label": "CTA: приглушённая строка", + "kind": "text", + "renderAs": "text", + "group": "CTA" + }, + { + "path": "content.cta.heading.middle", + "label": "CTA: средняя строка", + "kind": "text", + "renderAs": "text", + "group": "CTA" + }, + { + "path": "content.cta.heading.main", + "label": "CTA: основная строка", + "kind": "text", + "renderAs": "text", + "group": "CTA" + }, + { + "path": "content.cta.intro", + "label": "CTA: вводный текст", + "kind": "text", + "renderAs": "text", + "group": "CTA" + }, + { + "path": "content.cta.detailHtml", + "label": "CTA: пояснение", + "kind": "html", + "renderAs": "html", + "group": "CTA" + }, + { + "path": "content.cta.href", + "label": "CTA: ссылка", + "kind": "url", + "renderAs": "attr", + "group": "CTA" + }, + { + "path": "content.cta.buttonLabel", + "label": "CTA: кнопка", + "kind": "text", + "renderAs": "text", + "group": "CTA" + } + ], + "enabled": true + }, + { + "region": "cViz", + "id": "pricing-table", + "type": "pricingTable", + "template": "pricing-table.html", + "adminLabel": "Тарифная таблица", + "anchor": "pricing-wrap", + "content": { + "pricing": { + "eyebrow": "Тарифы", + "heading": { + "muted": "Код", + "middle": "для No-Code,", + "main": "усиленный ИИ." + }, + "introHtml": "Подписки на приложение с









Как и любой кастомный код, это добавляет только ту нагрузку, которую несёт сам код.
Все файлы собираются, минифицируются и сжимаются, чтобы минимально влиять на проект и не плодить внешние библиотеки и CDN-скрипты.
После сборки файлы загружаются в Cloudflare R2 и отдаются через CDN-ссылку на выделенном домене проекта, чтобы получить быстрый и совместимый с Webflow результат.
В панели деплоя есть мгновенный откат.
Нажмите откат, верните предыдущую рабочую версию, исправьте локально и опубликуйте заново.
Помимо @plan, @build и @explore стандартных режимов агентов мы готовим @webflow режим, специально заточенный под Webflow: структуру проекта, взаимодействие с ним и эффективную разработку.
Основано на многолетнем опыте написания кастомного кода для Webflow-анимаций.
WebGL, Three.js, GSAP и кастомная функциональность собраны в набор практик, пайплайнов и модульную систему, чтобы всё работало согласованно.
Также доступна библиотека компонентов: выберите компонент, добавьте в проект и попросите ИИ адаптировать его под задачу.
При запуске NODE.DC доступна отдельная вкладка для встраивания.
В зависимости от задачи можно получить скрипты для конкретной страницы или единый app.js для всего проекта.
Сгенерированная ссылка содержит и продакшен-версию, следующую за URL деплоя, и локальную версию для предпросмотра без влияния на посетителей сайта.
Мы используем основные доступные модели: OpenAI до Claude до Gemini.
Оркестратор выбирает модель под задачу автоматически, но вы можете вручную переключиться на нужную модель.
Во время работы NODE.DC выполняет две задачи параллельно.
Поднимает локальную среду разработки на Bun, синхронизирует JavaScript и TypeScript, включает HMR и держит webhook для автоматического обновления сайта при изменениях.
Одновременно работает оркестратор ИИ-агентов: обрабатывает запросы, меняет код, проверяет состояние сборки и при необходимости обновляет проект Webflow.
Процесс многоэтапный: сначала Bun собирает, сжимает, минифицирует и подготавливает проект вместе с библиотеками.
Затем файлы отправляются в CDN: cdn.node.dc/{USERNAME}/{PROJECT-NAME}. Ссылка уже содержит нужную структуру: вы видите локальную версию, а пользователи получают опубликованный скрипт.
Система изначально рассчитана на работу с Webflow MCP.
Подключите проект и авторизацию, чтобы ИИ-агенты получили доступ к Webflow-сборке. Подключение приложения в Webflow Designer даёт агентам доступ к контенту, элементам, стилям и CSS, а кастомный код получает полный контекст проекта.










Как и любой кастомный код, это добавляет только ту нагрузку, которую несёт сам код.
Все файлы собираются, минифицируются и сжимаются, чтобы минимально влиять на проект и не плодить внешние библиотеки и CDN-скрипты.
", + }, + { + question: "Где размещаются мои файлы?", + answerHtml: + "После сборки файлы загружаются в Cloudflare R2 и отдаются через CDN-ссылку на выделенном домене проекта, чтобы получить быстрый и совместимый с Webflow результат.
", + }, + { + question: "Что делать, если я опубликовал не те файлы?", + answerHtml: + "В панели деплоя есть мгновенный откат.
Нажмите откат, верните предыдущую рабочую версию, исправьте локально и опубликуйте заново.
", + }, + { + question: "Что такое ИИ-агент Webflow?", + answerHtml: + "Помимо @plan, @build и @explore стандартных режимов агентов мы готовим @webflow режим, специально заточенный под Webflow: структуру проекта, взаимодействие с ним и эффективную разработку.
", + }, + { + question: "Что такое собственная база знаний?", + answerHtml: + "Основано на многолетнем опыте написания кастомного кода для Webflow-анимаций.
WebGL, Three.js, GSAP и кастомная функциональность собраны в набор практик, пайплайнов и модульную систему, чтобы всё работало согласованно.
Также доступна библиотека компонентов: выберите компонент, добавьте в проект и попросите ИИ адаптировать его под задачу.
", + }, + { + question: "Как использовать это с Webflow?", + answerHtml: + "При запуске NODE.DC доступна отдельная вкладка для встраивания.
В зависимости от задачи можно получить скрипты для конкретной страницы или единый app.js для всего проекта.
Сгенерированная ссылка содержит и продакшен-версию, следующую за URL деплоя, и локальную версию для предпросмотра без влияния на посетителей сайта.
", + }, + { + question: "Какие ИИ-модели доступны?", + answerHtml: + "Мы используем основные доступные модели: OpenAI до Claude до Gemini.
Оркестратор выбирает модель под задачу автоматически, но вы можете вручную переключиться на нужную модель.
", + }, + { + question: "Как это работает?", + answerHtml: + "Во время работы NODE.DC выполняет две задачи параллельно.
Поднимает локальную среду разработки на Bun, синхронизирует JavaScript и TypeScript, включает HMR и держит webhook для автоматического обновления сайта при изменениях.
Одновременно работает оркестратор ИИ-агентов: обрабатывает запросы, меняет код, проверяет состояние сборки и при необходимости обновляет проект Webflow.
", + }, + { + question: "Как работает публикация?", + answerHtml: + "Процесс многоэтапный: сначала Bun собирает, сжимает, минифицирует и подготавливает проект вместе с библиотеками.
Затем файлы отправляются в CDN: cdn.node.dc/{USERNAME}/{PROJECT-NAME}. Ссылка уже содержит нужную структуру: вы видите локальную версию, а пользователи получают опубликованный скрипт.
Система изначально рассчитана на работу с Webflow MCP.
Подключите проект и авторизацию, чтобы ИИ-агенты получили доступ к Webflow-сборке. Подключение приложения в Webflow Designer даёт агентам доступ к контенту, элементам, стилям и CSS, а кастомный код получает полный контекст проекта.
", + }, + ], + }, + editableFields: [ + field("content.heading.muted", "Заголовок: приглушённая строка"), + field("content.heading.middle", "Заголовок: средняя строка"), + field("content.heading.main", "Заголовок: основная строка"), + field("content.introHtml", "Вводный текст", "html"), + field("content.docsHref", "Документация: ссылка", "url", "attr"), + field("content.docsLabel", "Документация: кнопка"), + field("content.windowTitle", "Окно: название"), + ...Array.from({ length: 10 }, (_, index) => [ + field(`content.faq.${index}.question`, `FAQ ${index + 1}: вопрос`, "text", "text", "FAQ", { + replaceAll: true, + }), + field(`content.faq.${index}.answerHtml`, `FAQ ${index + 1}: ответ`, "html", "html", "FAQ"), + ]).flat(), + ], + }, + "publish-cta": { + type: "publishCta", + content: { + cta: { + heading: { + muted: "Подключить.", + middle: "Поставить задачу.", + main: "Опубликовать.", + }, + intro: "Единый путь от разработки до продакшена.", + detailHtml: + 'Настройка примерно в 12 кликов: от скачивания приложения до запуска в проекте.', + href: "index.html#hero", + buttonLabel: "Встать в лист ожидания", + }, + }, + editableFields: [ + field("content.cta.heading.muted", "CTA: приглушённая строка"), + field("content.cta.heading.middle", "CTA: средняя строка"), + field("content.cta.heading.main", "CTA: основная строка"), + field("content.cta.intro", "CTA: вводный текст", "text", "text", "CTA"), + field("content.cta.detailHtml", "CTA: пояснение", "html", "html", "CTA"), + field("content.cta.href", "CTA: ссылка", "url", "attr", "CTA"), + field("content.cta.buttonLabel", "CTA: кнопка", "text", "text", "CTA"), + ], + }, + "pricing-table": { + type: "pricingTable", + content: { + pricing: { + eyebrow: "Тарифы", + heading: { + muted: "Код", + middle: "для No-Code,", + main: "усиленный ИИ.", + }, + introHtml: "Подписки на приложение с