diff --git a/admin/admin.css b/admin/admin.css index 8c6883d..a0bab39 100644 --- a/admin/admin.css +++ b/admin/admin.css @@ -593,6 +593,24 @@ p { justify-content: flex-end; } +.dirty-state { + display: inline-flex; + min-height: 2rem; + align-items: center; + border-radius: var(--launcher-radius-circle); + background: rgba(255, 255, 255, 0.055); + color: var(--text-muted); + padding: 0 0.75rem; + font-size: 0.68rem; + font-weight: 820; + white-space: nowrap; +} + +.dirty-state[data-dirty="true"] { + background: rgba(255, 255, 255, 0.12); + color: var(--text-primary); +} + .structure-card { padding-block: 0.78rem; } @@ -850,6 +868,104 @@ p { white-space: nowrap; } +.collection-field { + display: grid; + grid-column: 1 / -1; + gap: 0.75rem; + min-width: 0; +} + +.collection-head, +.collection-summary, +.collection-item-actions { + display: flex; + align-items: center; +} + +.collection-head, +.collection-summary { + justify-content: space-between; + gap: 0.75rem; +} + +.collection-title { + color: var(--text-primary); + font-size: 0.88rem; + font-weight: 850; + text-transform: none; +} + +.collection-add-btn { + min-height: 2.4rem; + border-radius: var(--launcher-radius-circle); + background: rgba(255, 255, 255, 0.9); + color: rgba(8, 8, 10, 0.96); + padding: 0 0.95rem; + font-size: 0.76rem; + font-weight: 850; +} + +.collection-list { + display: grid; + gap: 0.5rem; +} + +.collection-item-card { + overflow: hidden; + border-radius: var(--launcher-radius-control); + background: rgba(255, 255, 255, 0.045); +} + +.collection-item-card[open] { + background: rgba(255, 255, 255, 0.065); +} + +.collection-summary { + min-height: 3rem; + cursor: pointer; + list-style: none; + padding: 0.42rem 0.55rem 0.42rem 0.85rem; +} + +.collection-summary::-webkit-details-marker { + display: none; +} + +.collection-summary-title { + overflow: hidden; + color: var(--text-secondary); + font-size: 0.82rem; + font-weight: 820; + text-overflow: ellipsis; + text-transform: none; + white-space: nowrap; +} + +.collection-item-actions { + flex: 0 0 auto; + gap: 0.22rem; +} + +.collection-icon-btn { + display: grid; + width: 2.2rem; + height: 2.2rem; + place-items: center; + border-radius: var(--launcher-radius-circle); + background: rgba(255, 255, 255, 0.07); + color: var(--text-secondary); + font-size: 0.84rem; +} + +.collection-icon-btn:hover { + background: rgba(255, 255, 255, 0.14); + color: var(--text-primary); +} + +.collection-item-body { + padding: 0 0.75rem 0.85rem; +} + input, textarea { width: 100%; @@ -1291,6 +1407,26 @@ textarea { padding-inline: 0.75rem; } + .nodedc-expanded-toolbar-center { + display: grid; + grid-template-columns: 3rem minmax(0, 1fr); + gap: 0.55rem; + overflow: visible; + } + + .nodedc-expanded-nav-group { + display: grid; + width: 100%; + grid-template-columns: repeat(3, minmax(0, 1fr)); + overflow: visible; + } + + .nodedc-expanded-nav-button { + min-width: 0; + padding: 0.2rem 0.45rem; + font-size: 0.66rem; + } + .admin-shell { width: 100vw; min-height: calc(100vh - 5.25rem); @@ -1331,3 +1467,18 @@ textarea { display: none; } } + +@media (max-width: 480px) { + .nodedc-expanded-toolbar-center { + grid-template-columns: 1fr; + } + + .nodedc-expanded-workspace-button { + display: none; + } + + .nodedc-expanded-nav-button { + padding-inline: 0.24rem; + font-size: 0.61rem; + } +} diff --git a/admin/admin.js b/admin/admin.js index 069f488..cedf892 100644 --- a/admin/admin.js +++ b/admin/admin.js @@ -1,9 +1,11 @@ const state = { page: null, + templates: [], selected: null, clipboard: null, drag: null, dragTarget: null, + dirty: false, }; const el = { @@ -12,6 +14,7 @@ const el = { reload: document.querySelector("#reload"), save: document.querySelector("#save"), render: document.querySelector("#render"), + dirtyState: document.querySelector("#dirty-state"), status: document.querySelector("#status"), empty: document.querySelector("#empty-state"), form: document.querySelector("#block-form"), @@ -136,6 +139,10 @@ const GROUP_COPY = { FAQ: "Список вопросов и тексты ответов в mail-интерфейсе.", CTA: "Финальный призыв к действию: заголовок, пояснение, кнопка и ссылка.", Тарифы: "Верхняя часть тарифной таблицы: заголовки, планы, цены, кнопки и примечания.", + "Строки тарифов": "Повторяемые строки тарифной таблицы и значения по каждому плану.", + "Медиа-галерея": "Окна с изображениями, подписи файлов и связанные иконки.", + "TXT-файлы": "Список файлов листа ожидания: название окна, подпись и текст внутри файла.", + Футер: "Нижняя навигация, контактные ссылки, политики и брендовый блок.", Контент: "Остальные typed-поля выбранного блока.", }; @@ -149,6 +156,20 @@ function setStatus(message) { el.status.textContent = message; } +function setDirty(isDirty, message = null) { + state.dirty = isDirty; + el.dirtyState.dataset.dirty = String(isDirty); + el.dirtyState.textContent = isDirty ? "Есть несохранённые изменения" : "Синхронизировано"; + + if (message) { + setStatus(message); + } +} + +function markDirty(message = null) { + setDirty(true, message); +} + function clone(value) { return JSON.parse(JSON.stringify(value)); } @@ -192,6 +213,10 @@ function inferFieldGroup(path) { 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.pricingCells.")) return "Строки тарифов"; + if (path.startsWith("content.galleryItems.")) return "Медиа-галерея"; + if (path.startsWith("content.files.")) return "TXT-файлы"; + if (path.startsWith("content.footer.")) return "Футер"; if (path.startsWith("content.heading.") || path === "content.introHtml") return "Заголовок"; return "Контент"; } @@ -434,7 +459,7 @@ function reorderBlockWithinRegion(from, to) { state.selected = { kind: "block", regionIndex: from.regionIndex, blockIndex: insertIndex }; cleanupDragState(); renderAll(); - setStatus("Порядок блоков изменён локально. Нажмите «Сохранить модель» или «Обновить index.html»."); + markDirty("Порядок блоков изменён локально. Нажмите «Сохранить модель» или «Обновить index.html»."); } function renderBlockButton({ list, block, meta, active, disabled, onClick, dragContext = null }) { @@ -448,6 +473,9 @@ function renderBlockButton({ list, block, meta, active, disabled, onClick, dragC button.role = "button"; button.tabIndex = 0; button.className = `block-btn${active ? " active" : ""}${disabled ? " disabled" : ""}${canDrag ? " has-drag-handle" : ""}`; + button.dataset.adminBlockId = block.id || ""; + button.dataset.adminBlockType = block.type || ""; + button.dataset.adminBlockTemplate = block.template || ""; if (canDrag) { button.dataset.regionIndex = String(dragContext.regionIndex); button.dataset.blockIndex = String(dragContext.blockIndex); @@ -565,25 +593,16 @@ function renderRegions() { } function blockTemplates() { - const seen = new Set(); - const templates = []; + return state.templates.map((template) => { + const regionIndex = state.page.regions.findIndex((region) => region.id === template.regionId); + const region = state.page.regions[regionIndex] || state.page.regions[0]; - state.page.regions.forEach((region, regionIndex) => { - region.blocks.forEach((block) => { - const fingerprint = `${block.template || block.type}:${block.type || ""}`; - if (seen.has(fingerprint)) return; - seen.add(fingerprint); - templates.push({ - key: `${region.id}:${block.id}`, - regionId: region.id, - regionIndex, - regionLabel: labelForRegion(region), - block, - }); - }); + return { + ...template, + regionIndex: regionIndex >= 0 ? regionIndex : 0, + regionLabel: template.regionLabel || labelForRegion(region), + }; }); - - return templates; } function renderTemplateModal() { @@ -634,14 +653,13 @@ function addBlockFromTemplate(templateKey) { const block = clone(template.block); block.id = uniqueBlockId(block.id); - block.adminLabel = `${block.adminLabel || block.id} — копия`; block.enabled = true; block.scopeIds = true; region.blocks.push(block); state.selected = { kind: "block", regionIndex: template.regionIndex, blockIndex: region.blocks.length - 1 }; closeTemplateModal(); renderAll(); - setStatus(`Добавлен блок «${block.adminLabel}». Нажмите «Сохранить модель» или «Обновить index.html».`); + markDirty(`Добавлен блок «${block.adminLabel || block.id}». Нажмите «Сохранить модель» или «Обновить index.html».`); } function setStructuralControlsDisabled(disabled) { @@ -700,6 +718,7 @@ function syncBlockFromFields() { el.json.value = JSON.stringify(block, null, 2); renderRegions(); + markDirty(); } function groupEditableFields(block) { @@ -763,6 +782,8 @@ function updateMediaFieldValue({ block, editableField, hiddenInput, urlInput, fi if (activeBlock() === block) { el.json.value = JSON.stringify(block, null, 2); } + + markDirty(); } function renderMediaField({ block, editableField, grid }) { @@ -902,7 +923,7 @@ function renderMediaField({ block, editableField, grid }) { value: payload.url, }); setSource("file"); - setStatus(`Файл сохранён: ${payload.url}. Нажмите «Сохранить JSON», чтобы записать путь в content/pages/home.json.`); + markDirty(`Файл сохранён: ${payload.url}. Нажмите «Сохранить модель», чтобы записать путь в content/pages/home.json.`); } catch (uploadError) { error.textContent = uploadError.message; fileName.textContent = truncateText(fileNameFromUrl(hiddenInput.value), 28); @@ -918,6 +939,199 @@ function renderMediaField({ block, editableField, grid }) { grid.append(container); } +function collectionItems(block, editableField) { + const value = getByPath(block, editableField.path); + if (Array.isArray(value)) return value; + + const nextValue = []; + setByPath(block, editableField.path, nextValue); + return nextValue; +} + +function collectionItemTitle(item, index) { + return item?.adminLabel || item?.title || item?.name || item?.label || item?.question || item?.windowTitle || `Элемент ${index + 1}`; +} + +function collectionItemTemplate(editableField) { + if (editableField.itemTemplate) return clone(editableField.itemTemplate); + + const item = {}; + for (const itemField of editableField.itemFields ?? []) { + setByPath(item, itemField.path, itemField.defaultValue ?? ""); + } + return item; +} + +function uniqueCollectionItemId(items, baseId) { + const root = String(baseId || "item").trim() || "item"; + const ids = new Set(items.map((item) => item?.id).filter(Boolean)); + if (!ids.has(root)) return root; + + let index = 2; + while (ids.has(`${root}-${index}`)) { + index += 1; + } + return `${root}-${index}`; +} + +function prepareCollectionItemForInsert(items, item) { + const nextItem = clone(item); + + if (Object.prototype.hasOwnProperty.call(nextItem, "id")) { + nextItem.id = uniqueCollectionItemId(items, nextItem.id); + } + + return nextItem; +} + +function renderCollectionScalarField({ block, field, grid }) { + const label = document.createElement("label"); + const labelRow = document.createElement("span"); + const labelText = document.createElement("span"); + const kind = document.createElement("span"); + const path = document.createElement("span"); + const value = getByPath(block, field.path) ?? ""; + const isLong = field.kind === "html" || field.kind === "textarea"; + const input = isLong ? document.createElement("textarea") : document.createElement("input"); + + label.className = `field-control${isLong ? " wide" : ""}`; + labelRow.className = "field-label-row"; + labelText.className = "field-label-text"; + labelText.textContent = field.label || field.path; + kind.className = "field-kind"; + kind.textContent = field.kind || "text"; + path.className = "field-path"; + path.textContent = field.path; + labelRow.append(labelText, kind); + + input.dataset.path = field.path; + input.value = value; + + if (!isLong) { + input.type = "text"; + input.autocomplete = "off"; + } + + input.addEventListener("input", () => { + const active = activeBlock(); + if (!active) return; + setByPath(active, field.path, input.value); + el.json.value = JSON.stringify(active, null, 2); + markDirty(); + }); + + label.append(labelRow, input, path); + grid.append(label); +} + +function renderCollectionField({ block, editableField, grid }) { + const items = collectionItems(block, editableField); + const container = document.createElement("section"); + const head = document.createElement("div"); + const title = document.createElement("div"); + const addButton = document.createElement("button"); + const list = document.createElement("div"); + + function rerender(message = null) { + el.json.value = JSON.stringify(block, null, 2); + renderContentFields(block); + markDirty(message); + } + + container.className = "collection-field"; + head.className = "collection-head"; + title.className = "collection-title"; + title.textContent = editableField.label || editableField.path; + addButton.className = "collection-add-btn"; + addButton.type = "button"; + addButton.textContent = "Добавить"; + addButton.addEventListener("click", () => { + items.push(prepareCollectionItemForInsert(items, collectionItemTemplate(editableField))); + rerender(`Добавлен элемент в «${editableField.label || editableField.path}».`); + }); + head.append(title, addButton); + + list.className = "collection-list"; + + items.forEach((item, index) => { + const details = document.createElement("details"); + const summary = document.createElement("summary"); + const summaryTitle = document.createElement("span"); + const controls = document.createElement("span"); + const body = document.createElement("div"); + const itemGrid = document.createElement("div"); + + details.className = "collection-item-card"; + if (index === 0 && items.length <= 8) details.open = true; + summary.className = "collection-summary"; + summaryTitle.className = "collection-summary-title"; + summaryTitle.textContent = collectionItemTitle(item, index); + controls.className = "collection-item-actions"; + + [ + ["↑", "Поднять", () => { + if (index === 0) return; + const [moved] = items.splice(index, 1); + items.splice(index - 1, 0, moved); + rerender("Порядок элементов коллекции изменён локально."); + }], + ["↓", "Опустить", () => { + if (index >= items.length - 1) return; + const [moved] = items.splice(index, 1); + items.splice(index + 1, 0, moved); + rerender("Порядок элементов коллекции изменён локально."); + }], + ["⧉", "Дублировать", () => { + items.splice(index + 1, 0, prepareCollectionItemForInsert(items, item)); + rerender("Элемент коллекции продублирован локально."); + }], + ["⌫", "Удалить", () => { + items.splice(index, 1); + rerender("Элемент коллекции удалён локально."); + }], + ].forEach(([symbol, titleText, handler]) => { + const button = document.createElement("button"); + button.className = "collection-icon-btn"; + button.type = "button"; + button.title = titleText; + button.setAttribute("aria-label", titleText); + button.textContent = symbol; + button.addEventListener("click", (event) => { + event.preventDefault(); + event.stopPropagation(); + handler(); + }); + controls.append(button); + }); + + summary.append(summaryTitle, controls); + body.className = "collection-item-body"; + itemGrid.className = "group-grid"; + + for (const itemField of editableField.itemFields ?? []) { + const nestedField = { + ...itemField, + path: `${editableField.path}.${index}.${itemField.path}`, + label: itemField.label || itemField.path, + group: editableField.group, + }; + + if (nestedField.kind === "media") { + renderMediaField({ block, editableField: nestedField, grid: itemGrid }); + } else { + renderCollectionScalarField({ block, field: nestedField, grid: itemGrid }); + } + } + + body.append(itemGrid); + details.append(summary, body); + list.append(details); + }); + + container.append(head, list); + grid.append(container); +} + function renderContentFields(block) { el.contentFields.innerHTML = ""; @@ -947,6 +1161,11 @@ function renderContentFields(block) { grid.className = "group-grid"; for (const editableField of fields) { + if (editableField.kind === "collection") { + renderCollectionField({ block, editableField, grid }); + continue; + } + if (editableField.kind === "media") { renderMediaField({ block, editableField, grid }); continue; @@ -984,6 +1203,7 @@ function renderContentFields(block) { if (!active) return; setByPath(active, editableField.path, input.value); el.json.value = JSON.stringify(active, null, 2); + markDirty(); }); label.append(labelRow, input, path); @@ -1017,7 +1237,7 @@ function syncBlockFromJson() { region.blocks[state.selected.blockIndex] = parsed; } renderAll(); - setStatus("JSON блока применён локально. Нажмите «Сохранить JSON», чтобы записать файл."); + markDirty("JSON блока применён локально. Нажмите «Сохранить модель», чтобы записать файл."); return true; } catch (error) { setStatus(`Ошибка JSON: ${error.message}`); @@ -1026,12 +1246,20 @@ function syncBlockFromJson() { } async function loadPage() { - const response = await fetch("/api/page/home"); - if (!response.ok) throw new Error(await response.text()); - state.page = await response.json(); + const [pageResponse, templatesResponse] = await Promise.all([ + fetch("/api/page/home"), + fetch("/api/block-templates/home"), + ]); + + if (!pageResponse.ok) throw new Error(await pageResponse.text()); + if (!templatesResponse.ok) throw new Error(await templatesResponse.text()); + + state.page = await pageResponse.json(); + state.templates = await templatesResponse.json(); ensureStaticElements(); state.selected = { kind: "static" }; renderAll(); + setDirty(false); setStatus("Модель home.json загружена."); } @@ -1049,6 +1277,7 @@ async function persistPage() { async function savePage() { await persistPage(); + setDirty(false); setStatus("Модель сохранена в content/pages/home.json. Для публичной страницы нажмите «Обновить index.html»."); } @@ -1061,6 +1290,7 @@ async function renderHome() { throw new Error(payload.error || "Render failed"); } + setDirty(false); setStatus(payload.stdout ? `Модель сохранена. ${payload.stdout}` : "Модель сохранена, index.html пересобран."); } @@ -1077,6 +1307,7 @@ function moveSelected(delta) { region.blocks.splice(nextIndex, 0, block); state.selected.blockIndex = nextIndex; renderAll(); + markDirty("Порядок блоков изменён локально. Нажмите «Сохранить модель» или «Обновить index.html»."); } function duplicateSelected() { @@ -1092,6 +1323,7 @@ function duplicateSelected() { region.blocks.splice(state.selected.blockIndex + 1, 0, duplicate); state.selected.blockIndex += 1; renderAll(); + markDirty(`Блок «${duplicate.adminLabel || duplicate.id}» продублирован локально.`); } function copySelected() { @@ -1115,6 +1347,7 @@ function pasteAfterSelected() { region.blocks.splice(state.selected.blockIndex + 1, 0, pasted); state.selected.blockIndex += 1; renderAll(); + markDirty(`Блок «${pasted.adminLabel || pasted.id}» вставлен локально.`); } function deleteSelected() { @@ -1126,6 +1359,7 @@ function deleteSelected() { state.selected.blockIndex = Math.min(state.selected.blockIndex, region.blocks.length - 1); if (state.selected.blockIndex < 0) state.selected = { kind: "static" }; renderAll(); + markDirty("Блок удалён локально. Нажмите «Сохранить модель» или «Обновить index.html»."); } for (const input of [el.id, el.label, el.anchor, el.enabled]) { diff --git a/admin/index.html b/admin/index.html index c213813..b7e5272 100644 --- a/admin/index.html +++ b/admin/index.html @@ -75,6 +75,7 @@

Контентный слой

+ Синхронизировано diff --git a/content/block-templates/home.json b/content/block-templates/home.json new file mode 100644 index 0000000..ca493f9 --- /dev/null +++ b/content/block-templates/home.json @@ -0,0 +1,2718 @@ +[ + { + "key": "beforeCViz:heroWaitlist:hero-waitlist.html", + "regionId": "beforeCViz", + "regionLabel": "Главная", + "title": "Первый экран и заявка", + "description": "hero-waitlist.html", + "block": { + "region": "beforeCViz", + "id": "hero-waitlist", + "type": "heroWaitlist", + "template": "hero-waitlist.html", + "adminLabel": "Первый экран и заявка", + "anchor": "hero", + "content": { + "heading": { + "muted": "Ваш Webflow ", + "main": "ИИ-инструменты" + }, + "introHtml": "Несколько агентов для проекта Webflow: от Designer до кастомного кода.", + "cards": [ + { + "muted": "Полный", + "main": "агентный контроль", + "bodyHtml": "Интеграция с Webflow MCP, мультиагентный режим позволяет работать с несколькими экземплярами параллельно." + }, + { + "muted": "Компонентная", + "main": "библиотека", + "bodyHtml": "Собирайте с учетом ИИ-агентов разные компонентные заготовки дают основу, а стиль и сложную функциональность можно дорабатывать промптами." + }, + { + "muted": "Деплой ", + "main": "пайплайн", + "bodyHtml": "Деплой в один клик, непрерывный пайплайн, мгновенный откат и быстрая доставка через CDN." + } + ], + "app": { + "iconAlt": "Иконка NODE.DC", + "logoAlt": "Логотип NODE.DC", + "release": "Бета-релиз: июль 2026", + "heading": "Ранний доступ", + "description": "Кастомный код, MCP и ИИ-агенты для Webflow в одном рабочем контуре." + }, + "form": { + "messagePlaceholder": "Сообщение (необязательно)", + "namePlaceholder": "Ваше имя*", + "emailPlaceholder": "Email для регистрации*", + "submitLabel": "Встать в лист ожидания", + "successHeading": "Заявка принята. Спасибо.", + "successTextHtml": "Мы скоро свяжемся.
", + "betaCtaLabel": "Подать заявку в бету?", + "founderIntroHtml": "Или оформить ранний Founder-доступ
", + "founderCtaHtml": "Оформить Founder-доступ 350€", + "spotsLabel": "До 200 мест", + "failureHeading": "Не получилось", + "failureTextHtml": "Что-то пошло не так.
Попробуйте ещё раз чуть позже.
" + }, + "legalHtml": "Политика конфиденциальностиПолитика cookie
© — Все права защищены
2026" + }, + "editableFields": [ + { + "path": "content.heading.muted", + "label": "Hero: приглушённая строка", + "kind": "text", + "renderAs": "text", + "group": "Заголовок" + }, + { + "path": "content.heading.main", + "label": "Hero: основная строка", + "kind": "text", + "renderAs": "text", + "group": "Заголовок" + }, + { + "path": "content.introHtml", + "label": "Hero: вводный текст", + "kind": "html", + "renderAs": "html", + "group": "Заголовок" + }, + { + "path": "content.cards.0.muted", + "label": "Карточка 1: приглушённая строка", + "kind": "text", + "renderAs": "text", + "group": "Тезисы первого экрана" + }, + { + "path": "content.cards.0.main", + "label": "Карточка 1: основная строка", + "kind": "text", + "renderAs": "text", + "group": "Тезисы первого экрана" + }, + { + "path": "content.cards.0.bodyHtml", + "label": "Карточка 1: текст", + "kind": "html", + "renderAs": "html", + "group": "Тезисы первого экрана" + }, + { + "path": "content.cards.1.muted", + "label": "Карточка 2: приглушённая строка", + "kind": "text", + "renderAs": "text", + "group": "Тезисы первого экрана" + }, + { + "path": "content.cards.1.main", + "label": "Карточка 2: основная строка", + "kind": "text", + "renderAs": "text", + "group": "Тезисы первого экрана" + }, + { + "path": "content.cards.1.bodyHtml", + "label": "Карточка 2: текст", + "kind": "html", + "renderAs": "html", + "group": "Тезисы первого экрана" + }, + { + "path": "content.cards.2.muted", + "label": "Карточка 3: приглушённая строка", + "kind": "text", + "renderAs": "text", + "group": "Тезисы первого экрана" + }, + { + "path": "content.cards.2.main", + "label": "Карточка 3: основная строка", + "kind": "text", + "renderAs": "text", + "group": "Тезисы первого экрана" + }, + { + "path": "content.cards.2.bodyHtml", + "label": "Карточка 3: текст", + "kind": "html", + "renderAs": "html", + "group": "Тезисы первого экрана" + }, + { + "path": "content.app.iconAlt", + "label": "App: alt иконки", + "kind": "text", + "renderAs": "attr", + "group": "Карточка раннего доступа" + }, + { + "path": "content.app.logoAlt", + "label": "App: alt логотипа", + "kind": "text", + "renderAs": "attr", + "group": "Карточка раннего доступа" + }, + { + "path": "content.app.release", + "label": "App: релиз", + "kind": "text", + "renderAs": "text", + "group": "Карточка раннего доступа" + }, + { + "path": "content.app.heading", + "label": "App: заголовок", + "kind": "text", + "renderAs": "text", + "group": "Карточка раннего доступа" + }, + { + "path": "content.app.description", + "label": "App: описание", + "kind": "text", + "renderAs": "text", + "group": "Карточка раннего доступа" + }, + { + "path": "content.form.messagePlaceholder", + "label": "Форма: placeholder сообщения", + "kind": "text", + "renderAs": "attr", + "group": "Форма" + }, + { + "path": "content.form.namePlaceholder", + "label": "Форма: placeholder имени", + "kind": "text", + "renderAs": "attr", + "group": "Форма" + }, + { + "path": "content.form.emailPlaceholder", + "label": "Форма: placeholder email", + "kind": "text", + "renderAs": "attr", + "group": "Форма" + }, + { + "path": "content.form.submitLabel", + "label": "Форма: кнопка", + "kind": "text", + "renderAs": "text", + "group": "Форма" + }, + { + "path": "content.form.successHeading", + "label": "Форма: успех, заголовок", + "kind": "text", + "renderAs": "text", + "group": "Форма" + }, + { + "path": "content.form.successTextHtml", + "label": "Форма: успех, текст", + "kind": "html", + "renderAs": "html", + "group": "Форма" + }, + { + "path": "content.form.betaCtaLabel", + "label": "Форма: CTA беты", + "kind": "text", + "renderAs": "text", + "group": "Форма" + }, + { + "path": "content.form.founderIntroHtml", + "label": "Форма: Founder intro", + "kind": "html", + "renderAs": "html", + "group": "Форма" + }, + { + "path": "content.form.founderCtaHtml", + "label": "Форма: Founder CTA", + "kind": "html", + "renderAs": "html", + "group": "Форма" + }, + { + "path": "content.form.spotsLabel", + "label": "Форма: лимит мест", + "kind": "text", + "renderAs": "text", + "group": "Форма" + }, + { + "path": "content.form.failureHeading", + "label": "Форма: ошибка, заголовок", + "kind": "text", + "renderAs": "text", + "group": "Форма" + }, + { + "path": "content.form.failureTextHtml", + "label": "Форма: ошибка, текст", + "kind": "html", + "renderAs": "html", + "group": "Форма" + }, + { + "path": "content.legalHtml", + "label": "Юридический текст", + "kind": "html", + "renderAs": "html", + "group": "Юридический блок" + } + ], + "enabled": true + } + }, + { + "key": "beforeCViz:featureVideo:feature-video.html", + "regionId": "beforeCViz", + "regionLabel": "Главная", + "title": "Демо и базовая логика", + "description": "feature-video.html", + "block": { + "region": "beforeCViz", + "id": "feature-video", + "type": "featureVideo", + "template": "feature-video.html", + "adminLabel": "Демо и базовая логика", + "anchor": "features", + "content": { + "windowTitle": "демо-видео.mp4", + "videoSrc": "./assets/media/publish-flow.mp4", + "heading": { + "muted": "Всё в одном", + "main": "приложение." + }, + "introHtml": "Универсальный инструмент для ИИ-агентов в вашем Webflow-проекте.", + "features": [ + { + "eyebrow": "Контекст проекта", + "bodyHtml": "Подключитесь к MCP чтобы агенты получили полный контекст вашей сборки." + }, + { + "eyebrow": "Группы агентов", + "bodyHtml": "Используйте несколько агентов параллельно чтобы добавлять кастомный код, анимации и функциональность." + }, + { + "eyebrow": "Среда разработки", + "bodyHtml": "Используйте быстрые Bun сборки и автообновление для вашего кастомного кода." + }, + { + "eyebrow": "Деплой в один клик", + "bodyHtml": "Нажмите и публикуйте кастомный код, написанный ИИ, чтобы он стал доступен всем посетителям сайта." + } + ] + }, + "editableFields": [ + { + "path": "content.windowTitle", + "label": "Окно: название файла", + "kind": "text", + "renderAs": "text", + "group": "Видео-окно" + }, + { + "path": "content.videoSrc", + "label": "Окно: видео", + "kind": "media", + "renderAs": "attr", + "group": "Видео-окно" + }, + { + "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.features.0.eyebrow", + "label": "Пункт 1: подпись", + "kind": "text", + "renderAs": "text", + "group": "Пункты" + }, + { + "path": "content.features.0.bodyHtml", + "label": "Пункт 1: текст", + "kind": "html", + "renderAs": "html", + "group": "Пункты" + }, + { + "path": "content.features.1.eyebrow", + "label": "Пункт 2: подпись", + "kind": "text", + "renderAs": "text", + "group": "Пункты" + }, + { + "path": "content.features.1.bodyHtml", + "label": "Пункт 2: текст", + "kind": "html", + "renderAs": "html", + "group": "Пункты" + }, + { + "path": "content.features.2.eyebrow", + "label": "Пункт 3: подпись", + "kind": "text", + "renderAs": "text", + "group": "Пункты" + }, + { + "path": "content.features.2.bodyHtml", + "label": "Пункт 3: текст", + "kind": "html", + "renderAs": "html", + "group": "Пункты" + }, + { + "path": "content.features.3.eyebrow", + "label": "Пункт 4: подпись", + "kind": "text", + "renderAs": "text", + "group": "Пункты" + }, + { + "path": "content.features.3.bodyHtml", + "label": "Пункт 4: текст", + "kind": "html", + "renderAs": "html", + "group": "Пункты" + } + ], + "enabled": true + } + }, + { + "key": "cViz:componentLibrary:component-library.html", + "regionId": "cViz", + "regionLabel": "Секции", + "title": "Компонентная библиотека и MCP", + "description": "component-library.html", + "block": { + "region": "cViz", + "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 + } + }, + { + "key": "cViz:aiModes:ai-modes.html", + "regionId": "cViz", + "regionLabel": "Секции", + "title": "Гибкие режимы ИИ", + "description": "ai-modes.html", + "block": { + "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 + } + }, + { + "key": "cViz:faqSection:faq.html", + "regionId": "cViz", + "regionLabel": "Секции", + "title": "Частые вопросы и ответы", + "description": "faq.html", + "block": { + "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}. Ссылка уже содержит нужную структуру: вы видите локальную версию, а пользователи получают опубликованный скрипт.

" + }, + { + "question": "Это работает с MCP?", + "answerHtml": "

Система изначально рассчитана на работу с 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 + } + }, + { + "key": "cViz:publishCta:publish-cta.html", + "regionId": "cViz", + "regionLabel": "Секции", + "title": "Финальный CTA перед тарифами", + "description": "publish-cta.html", + "block": { + "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 + } + }, + { + "key": "cViz:pricingTable:pricing-table.html", + "regionId": "cViz", + "regionLabel": "Секции", + "title": "Тарифная таблица", + "description": "pricing-table.html", + "block": { + "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": "Подписки на приложение с
включённым объёмом в каждом тарифе.
", + "tokenBillingHtml": "Токенная оплата сверх лимитов.", + "founderLimitHtml": "200 Founder мест с фиксированной ценой на первый год.", + "windowTitle": "Тарифы.app", + "discountLabel": "Скидка 50%", + "betaHref": "beta-apply.html", + "founderHref": "founders.html", + "betaButtonLabel": "Подать заявку в бету", + "founderButtonLabel": "Оформить Founder-доступ", + "basicButtonLabel": "Выбрать Basic", + "advancedButtonLabel": "Выбрать Advanced", + "noteHtml": "(*) Условия могут меняться по ходу тестирования, но мы постараемся сохранить заявленные обещания.", + "enterpriseNoteHtml": "Enterprise BYOK-тарифы будут доступны с сентября 2026." + }, + "plans": [ + { + "name": "Бета", + "priceHtml": "Бесплатно", + "period": "1 месяц" + }, + { + "name": "Founder ", + "priceHtml": "310", + "period": "/ год, навсегда" + }, + { + "name": "Basic", + "priceHtml": "20", + "period": "/ месяц" + }, + { + "name": "Advanced", + "priceHtml": "50", + "period": "/ месяц" + } + ], + "pricingCells": [ + { + "label": "Ячейка 1: Старт", + "textHtml": "Старт" + }, + { + "label": "Ячейка 2: Старт", + "textHtml": "Старт" + }, + { + "label": "Ячейка 3: Старт", + "textHtml": "Старт" + }, + { + "label": "Ячейка 4: Всего доступно", + "textHtml": "Всего доступно" + }, + { + "label": "Ячейка 5: Расширение (20M)", + "textHtml": "Расширение (20M)" + }, + { + "label": "Ячейка 6: Расширение (10M)", + "textHtml": "Расширение (10M)" + }, + { + "label": "Ячейка 7: Глубина рассуждения", + "textHtml": "Глубина рассуждения" + }, + { + "label": "Ячейка 8: Базовый интеллект", + "textHtml": "Базовый интеллект" + }, + { + "label": "Ячейка 9: Рабочее пространство", + "textHtml": "Рабочее пространство" + }, + { + "label": "Ячейка 10: Объём токенов", + "textHtml": "Объём токенов" + }, + { + "label": "Ячейка 11: Старт", + "textHtml": "Старт" + }, + { + "label": "Ячейка 12: Объём токенов", + "textHtml": "Объём токенов" + }, + { + "label": "Ячейка 13: Объём токенов", + "textHtml": "Объём токенов" + }, + { + "label": "Ячейка 14: Рабочее пространство", + "textHtml": "Рабочее пространство" + }, + { + "label": "Ячейка 15: Всего доступно", + "textHtml": "Всего доступно" + }, + { + "label": "Ячейка 16: Расширение (20M)", + "textHtml": "Расширение (20M)" + }, + { + "label": "Ячейка 17: Расширение (10M)", + "textHtml": "Расширение (10M)" + }, + { + "label": "Ячейка 18: Глубина рассуждения", + "textHtml": "Глубина рассуждения" + }, + { + "label": "Ячейка 19: Базовый интеллект", + "textHtml": "Базовый интеллект" + }, + { + "label": "Ячейка 20: Рабочее пространство", + "textHtml": "Рабочее пространство" + }, + { + "label": "Ячейка 21: Базовый интеллект", + "textHtml": "Базовый интеллект" + }, + { + "label": "Ячейка 22: Глубина рассуждения", + "textHtml": "Глубина рассуждения" + }, + { + "label": "Ячейка 23: Расширение (10M)", + "textHtml": "Расширение (10M)" + }, + { + "label": "Ячейка 24: Расширение (20M)", + "textHtml": "Расширение (20M)" + }, + { + "label": "Ячейка 25: Всего доступно", + "textHtml": "Всего доступно" + }, + { + "label": "Ячейка 26: Июнь 2026", + "textHtml": "Июнь 2026" + }, + { + "label": "Ячейка 27: Июнь 2026", + "textHtml": "Июнь 2026" + }, + { + "label": "Ячейка 28: Июнь 2026", + "textHtml": "Июнь 2026" + }, + { + "label": "Ячейка 29: Июнь 2026", + "textHtml": "Июнь 2026" + }, + { + "label": "Ячейка 30: Кредиты тарифа", + "textHtml": "Кредиты тарифа" + }, + { + "label": "Ячейка 31: Без ограничений", + "textHtml": "Без ограничений" + }, + { + "label": "Ячейка 32: 40 000 включено", + "textHtml": "40 000 включено" + }, + { + "label": "Ячейка 33: 12 000 включено", + "textHtml": "12 000 включено" + }, + { + "label": "Ячейка 34: 40 000 включено", + "textHtml": "40 000 включено" + }, + { + "label": "Ячейка 35: Рабочее пространство", + "textHtml": "Рабочее пространство" + }, + { + "label": "Ячейка 36: Без ограничений", + "textHtml": "Без ограничений" + }, + { + "label": "Ячейка 37: Без ограничений", + "textHtml": "Без ограничений" + }, + { + "label": "Ячейка 38: 10 проектов", + "textHtml": "10 проектов" + }, + { + "label": "Ячейка 39: Без ограничений", + "textHtml": "Без ограничений" + }, + { + "label": "Ячейка 40: Базовый интеллект", + "textHtml": "Базовый интеллект" + }, + { + "label": "Ячейка 41: Все модели", + "textHtml": "Все модели" + }, + { + "label": "Ячейка 42: Все быстрые", + "textHtml": "Все быстрые " + }, + { + "label": "Ячейка 43: Все быстрые", + "textHtml": "Все быстрые " + }, + { + "label": "Ячейка 44: Все быстрые", + "textHtml": "Все быстрые " + }, + { + "label": "Ячейка 45: Глубина рассуждения", + "textHtml": "Глубина рассуждения" + }, + { + "label": "Ячейка 46: Полный", + "textHtml": "Полный" + }, + { + "label": "Ячейка 47: Полный", + "textHtml": "Полный" + }, + { + "label": "Ячейка 48: Ограниченный", + "textHtml": "Ограниченный" + }, + { + "label": "Ячейка 49: Полный", + "textHtml": "Полный" + }, + { + "label": "Ячейка 50: Расширение SM 10€", + "textHtml": "Расширение SM 10€" + }, + { + "label": "Ячейка 51: Обновления без лимита", + "textHtml": "Обновления без лимита" + }, + { + "label": "Ячейка 52: + 10 000 кредитов", + "textHtml": "+ 10 000 кредитов" + }, + { + "label": "Ячейка 53: + 8 000 кредитов", + "textHtml": "+ 8 000 кредитов" + }, + { + "label": "Ячейка 54: + 10 000 кредитов", + "textHtml": "+ 10 000 кредитов" + }, + { + "label": "Ячейка 55: Расширение MD 20€", + "textHtml": "Расширение MD 20€" + }, + { + "label": "Ячейка 56: Обновления без лимита", + "textHtml": "Обновления без лимита" + }, + { + "label": "Ячейка 57: + 26 000 кредитов", + "textHtml": "+ 26 000 кредитов" + }, + { + "label": "Ячейка 58: + 20 000 кредитов", + "textHtml": "+ 20 000 кредитов" + }, + { + "label": "Ячейка 59: + 26 000 кредитов", + "textHtml": "+ 26 000 кредитов" + }, + { + "label": "Ячейка 60: Всего доступно", + "textHtml": "Всего доступно" + }, + { + "label": "Ячейка 61: 40 тестировщиков", + "textHtml": "40 тестировщиков" + }, + { + "label": "Ячейка 62: 200 мест", + "textHtml": "200 мест" + }, + { + "label": "Ячейка 63: --", + "textHtml": "--" + }, + { + "label": "Ячейка 64: --", + "textHtml": "--" + } + ], + "galleryItems": [ + { + "id": "one-click-publish-png", + "windowTitle": "публикация-в-один-клик.png", + "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", + "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "публикация-в-один-клик.png" + }, + { + "id": "complete-code-editor-webp", + "windowTitle": "полноценный-редактор-кода.webp", + "imageSrc": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif", + "imageSrcset": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174-p-500.avif 500w, ./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "полноценный-редактор-кода.webp" + }, + { + "id": "ai-dock-mode-jpg", + "windowTitle": "ИИ-док-режим.jpg", + "imageSrc": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif", + "imageSrcset": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175-p-500.avif 500w, ./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "ИИ-док-режим.jpg" + }, + { + "id": "deep-webflow-connection-webp", + "windowTitle": "глубокая-интеграция-webflow.webp", + "imageSrc": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif", + "imageSrcset": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173-p-500.avif 500w, ./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "глубокая-интеграция-webflow.webp" + }, + { + "id": "install-setup-and-run", + "windowTitle": "установка-настройка-запуск.jpg", + "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", + "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "установка-настройка-запуск.jpg" + } + ] + }, + "editableFields": [ + { + "path": "content.pricing.eyebrow", + "label": "Тарифы: надзаголовок", + "kind": "text", + "renderAs": "text", + "group": "Тарифы" + }, + { + "path": "content.pricing.heading.muted", + "label": "Тарифы: приглушённая строка", + "kind": "text", + "renderAs": "text", + "group": "Тарифы" + }, + { + "path": "content.pricing.heading.middle", + "label": "Тарифы: средняя строка", + "kind": "text", + "renderAs": "text", + "group": "Тарифы" + }, + { + "path": "content.pricing.heading.main", + "label": "Тарифы: основная строка", + "kind": "text", + "renderAs": "text", + "group": "Тарифы" + }, + { + "path": "content.pricing.introHtml", + "label": "Тарифы: вводный текст", + "kind": "html", + "renderAs": "html", + "group": "Тарифы" + }, + { + "path": "content.pricing.tokenBillingHtml", + "label": "Тарифы: оплата сверх лимитов", + "kind": "html", + "renderAs": "html", + "group": "Тарифы" + }, + { + "path": "content.pricing.founderLimitHtml", + "label": "Тарифы: Founder-лимит", + "kind": "html", + "renderAs": "html", + "group": "Тарифы" + }, + { + "path": "content.pricing.windowTitle", + "label": "Окно: название", + "kind": "text", + "renderAs": "text", + "group": "Тарифы" + }, + { + "path": "content.pricing.discountLabel", + "label": "Founder: бейдж скидки", + "kind": "text", + "renderAs": "text", + "group": "Тарифы" + }, + { + "path": "content.plans.0.name", + "label": "Бета: название", + "kind": "text", + "renderAs": "text", + "group": "Тарифы" + }, + { + "path": "content.plans.0.priceHtml", + "label": "Бета: цена", + "kind": "html", + "renderAs": "html", + "group": "Тарифы" + }, + { + "path": "content.plans.0.period", + "label": "Бета: период", + "kind": "text", + "renderAs": "text", + "group": "Тарифы" + }, + { + "path": "content.plans.1.name", + "label": "Founder: название", + "kind": "text", + "renderAs": "text", + "group": "Тарифы" + }, + { + "path": "content.plans.1.priceHtml", + "label": "Founder: цена", + "kind": "html", + "renderAs": "html", + "group": "Тарифы" + }, + { + "path": "content.plans.1.period", + "label": "Founder: период", + "kind": "text", + "renderAs": "text", + "group": "Тарифы" + }, + { + "path": "content.plans.2.name", + "label": "Basic: название", + "kind": "text", + "renderAs": "text", + "group": "Тарифы" + }, + { + "path": "content.plans.2.priceHtml", + "label": "Basic: цена", + "kind": "html", + "renderAs": "html", + "group": "Тарифы" + }, + { + "path": "content.plans.2.period", + "label": "Basic: период", + "kind": "text", + "renderAs": "text", + "group": "Тарифы" + }, + { + "path": "content.plans.3.name", + "label": "Advanced: название", + "kind": "text", + "renderAs": "text", + "group": "Тарифы" + }, + { + "path": "content.plans.3.priceHtml", + "label": "Advanced: цена", + "kind": "html", + "renderAs": "html", + "group": "Тарифы" + }, + { + "path": "content.plans.3.period", + "label": "Advanced: период", + "kind": "text", + "renderAs": "text", + "group": "Тарифы" + }, + { + "path": "content.pricing.betaHref", + "label": "Бета: ссылка", + "kind": "url", + "renderAs": "attr", + "group": "Тарифы" + }, + { + "path": "content.pricing.founderHref", + "label": "Founder: ссылка", + "kind": "url", + "renderAs": "attr", + "group": "Тарифы" + }, + { + "path": "content.pricing.betaButtonLabel", + "label": "Бета: кнопка", + "kind": "text", + "renderAs": "text", + "group": "Тарифы" + }, + { + "path": "content.pricing.founderButtonLabel", + "label": "Founder: кнопка", + "kind": "text", + "renderAs": "text", + "group": "Тарифы" + }, + { + "path": "content.pricing.basicButtonLabel", + "label": "Basic: кнопка", + "kind": "text", + "renderAs": "text", + "group": "Тарифы" + }, + { + "path": "content.pricing.advancedButtonLabel", + "label": "Advanced: кнопка", + "kind": "text", + "renderAs": "text", + "group": "Тарифы" + }, + { + "path": "content.pricing.noteHtml", + "label": "Тарифы: примечание", + "kind": "html", + "renderAs": "html", + "group": "Тарифы" + }, + { + "path": "content.pricing.enterpriseNoteHtml", + "label": "Тарифы: Enterprise-примечание", + "kind": "html", + "renderAs": "html", + "group": "Тарифы" + }, + { + "path": "content.pricingCells", + "label": "Ячейки тарифной таблицы", + "kind": "collection", + "renderAs": "collection", + "group": "Строки тарифов", + "itemFields": [ + { + "path": "label", + "label": "Название в админке", + "kind": "text", + "renderAs": "text" + }, + { + "path": "textHtml", + "label": "Текст ячейки", + "kind": "html", + "renderAs": "html" + } + ], + "itemTemplate": { + "label": "Новая ячейка", + "textHtml": "--" + } + }, + { + "path": "content.galleryItems", + "label": "Медиа-галерея после тарифов", + "kind": "collection", + "renderAs": "collection", + "group": "Медиа-галерея", + "itemFields": [ + { + "path": "id", + "label": "ID окна", + "kind": "text", + "renderAs": "attr" + }, + { + "path": "windowTitle", + "label": "Заголовок окна", + "kind": "text", + "renderAs": "text" + }, + { + "path": "imageSrc", + "label": "Изображение", + "kind": "media", + "renderAs": "attr" + }, + { + "path": "imageSrcset", + "label": "Srcset", + "kind": "textarea", + "renderAs": "attr" + }, + { + "path": "imageAlt", + "label": "Alt изображения", + "kind": "text", + "renderAs": "attr" + }, + { + "path": "iconSrc", + "label": "Иконка файла", + "kind": "media", + "renderAs": "attr" + }, + { + "path": "iconAlt", + "label": "Иконка: alt", + "kind": "text", + "renderAs": "attr" + }, + { + "path": "folderLabel", + "label": "Подпись файла", + "kind": "text", + "renderAs": "text" + } + ], + "itemTemplate": { + "id": "new-media-item", + "windowTitle": "новый-файл.png", + "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", + "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "новый-файл.png" + } + } + ], + "enabled": true + } + }, + { + "key": "cViz:pricingIntro:pricing-intro.html", + "regionId": "cViz", + "regionLabel": "Секции", + "title": "Интро тарифов", + "description": "pricing-intro.html", + "block": { + "region": "cViz", + "id": "pricing-intro", + "type": "pricingIntro", + "template": "pricing-intro.html", + "adminLabel": "Интро тарифов", + "anchor": "waitlist", + "enabled": true, + "content": { + "eyebrow": "Тарифы", + "heading": { + "muted": "Код", + "middle": "для No-Code,", + "main": "усиленный ИИ." + }, + "introHtml": "Подписки на приложение с
включённым объёмом в каждом тарифе.
", + "tokenBillingHtml": "Токенная оплата сверх лимитов.", + "founderLimitHtml": "200 Founder мест с фиксированной ценой на первый год." + }, + "editableFields": [ + { + "path": "content.eyebrow", + "label": "Надзаголовок", + "kind": "text", + "renderAs": "text", + "group": "Тарифы" + }, + { + "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.tokenBillingHtml", + "label": "Оплата сверх лимитов", + "kind": "html", + "renderAs": "html", + "group": "Тарифы" + }, + { + "path": "content.founderLimitHtml", + "label": "Founder-лимит", + "kind": "html", + "renderAs": "html", + "group": "Тарифы" + } + ] + } + }, + { + "key": "cViz:waitlistFiles:waitlist-files.html", + "regionId": "cViz", + "regionLabel": "Секции", + "title": "Форма ожидания и txt-файлы", + "description": "waitlist-files.html", + "block": { + "region": "cViz", + "id": "waitlist-files", + "type": "waitlistFiles", + "template": "waitlist-files.html", + "adminLabel": "Форма ожидания и txt-файлы", + "anchor": "waitlist", + "enabled": true, + "content": { + "app": { + "iconSrc": "./assets/webflow/images/69ad964d951f9d17cc5a919e_logo-app.svg", + "iconAlt": "Иконка NODE.DC", + "wordmarkSrc": "./assets/webflow/images/69ad96a28b06b7552a339137_logtype.svg?v=node-dc", + "wordmarkAlt": "Логотип NODE.DC", + "release": "Бета-релиз: июль 2026", + "heading": "Ранний доступ", + "description": "Кастомный код, MCP и ИИ-агенты для Webflow в одном рабочем контуре." + }, + "form": { + "messagePlaceholder": "Сообщение (необязательно)", + "namePlaceholder": "Ваше имя*", + "emailPlaceholder": "Email для регистрации*", + "submitLabel": "Встать в лист ожидания", + "successHeading": "Заявка принята. Спасибо.", + "successTextHtml": "Мы скоро свяжемся.
", + "betaCtaLabel": "Подать заявку в бету?", + "betaHref": "beta-apply.html" + }, + "legalHtml": "Политика конфиденциальностиПолитика cookie
© — Все права защищены
2026", + "files": [ + { + "id": "fff-1781522145197", + "name": "fff", + "bodyHtml": "fff", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "ergtrr-1781299687391", + "name": "Ergtrr", + "bodyHtml": "Ggg", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "paul-1781292773241", + "name": "Paul", + "bodyHtml": "только что нашёл ваш сайт — выглядит отлично!\n", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "s-1781291497432", + "name": "s", + "bodyHtml": "s", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "rkxkr-1780076462889", + "name": "rkxkr", + "bodyHtml": "пока не уверен, но да, интересно", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "ali-awan-1779508741466", + "name": "Ali Awan", + "bodyHtml": "Дайте, пожалуйста, посмотреть продукт!", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "rox-del-toro-1779345898781", + "name": "rox del toro", + "bodyHtml": "ХОЧУ ДОСТУП", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "flavio-1779221805979", + "name": "Flavio", + "bodyHtml": "Привет!", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "daniel-clydesdale-1776810985184", + "name": "Daniel Clydesdale", + "bodyHtml": "Мы работаем с Webflow с 2016 года и используем его постоянно. Сейчас внедряем ИИ в процессы, поэтому ваш продукт нам очень интересен. Удачи с запуском!", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "carter-ogunsola-1776789849836", + "name": "Carter Ogunsola", + "bodyHtml": "Для всех разработчиков: я нашёл это очень рано. Уже один из фаворитов.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "marin-trajkovski-1776246697900", + "name": "Marin Trajkovski", + "bodyHtml": "Здравствуйте, можно получить ранний доступ? Очень хочу протестировать ИИ, это сейчас действительно нужно.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "arul-1776155521436", + "name": "Arul", + "bodyHtml": "Интересно. Хотелось бы узнать больше.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "jeremy-1776110312766", + "name": "Jeremy", + "bodyHtml": "Вау!\n\nПожалуйста, пустите меня в бету!", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "safin-1775735336208", + "name": "Safin", + "bodyHtml": "С удовольствием протестировал бы продукт. Выглядит очень интересно.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "ilja-van-eck-1775728385192", + "name": "Ilja van Eck", + "bodyHtml": "Я теперь первый Founder? Берите деньги и запускайте это.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "jordan-gilroy-1775725512001", + "name": "Jordan Gilroy", + "bodyHtml": "Я ваш главный фанат", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "hyun-1775717954559", + "name": "hyun", + "bodyHtml": "привет", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "kris-1775631278525", + "name": "kris", + "bodyHtml": "тестирую", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "syed-irfan-1775594918209", + "name": "Syed Irfan", + "bodyHtml": "Интересно", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "ramyar-atlasi-1775580173318", + "name": "ramyar atlasi", + "bodyHtml": "Apm pflege schule Düsseldorf", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "muhammad-ashar-1775577297259", + "name": "Muhammad Ashar", + "bodyHtml": "vv", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "dd-1775574406425", + "name": ":DD", + "bodyHtml": "ka tu nx", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "test-1775569341172", + "name": "test", + "bodyHtml": "test", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "filip-1775566849792", + "name": "Filip", + "bodyHtml": "Я знаю Fed!", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "arinbj-rn-1775555738944", + "name": "Arinbjørn", + "bodyHtml": "Пустите меня! ", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "janarthanan-1775546824101", + "name": "Janarthanan", + "bodyHtml": "жду", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "jane-smith-1775475995013", + "name": "Jane Smith", + "bodyHtml": "Очень хочу ранний доступ к продукту!", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "daniel-apro-1775466924878", + "name": "Daniel Apro", + "bodyHtml": "Привет, сайт огонь.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "allonelabs-1775379632146", + "name": "Allonelabs", + "bodyHtml": "Нам очень нравится ваш дизайн. Спасибо!", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "nicola-romei-1775368624397", + "name": "nicola romei", + "bodyHtml": "G.O.A.T. часто используют как сокращение от Greatest of All Time — «лучший за всё время».", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + } + ] + }, + "editableFields": [ + { + "path": "content.app.iconSrc", + "label": "Иконка приложения", + "kind": "media", + "renderAs": "attr", + "group": "Карточка раннего доступа" + }, + { + "path": "content.app.iconAlt", + "label": "Иконка: alt", + "kind": "text", + "renderAs": "attr", + "group": "Карточка раннего доступа" + }, + { + "path": "content.app.wordmarkSrc", + "label": "Wordmark", + "kind": "media", + "renderAs": "attr", + "group": "Карточка раннего доступа" + }, + { + "path": "content.app.wordmarkAlt", + "label": "Wordmark: alt", + "kind": "text", + "renderAs": "attr", + "group": "Карточка раннего доступа" + }, + { + "path": "content.app.release", + "label": "Релиз", + "kind": "text", + "renderAs": "text", + "group": "Карточка раннего доступа" + }, + { + "path": "content.app.heading", + "label": "Заголовок", + "kind": "text", + "renderAs": "text", + "group": "Карточка раннего доступа" + }, + { + "path": "content.app.description", + "label": "Описание", + "kind": "textarea", + "renderAs": "text", + "group": "Карточка раннего доступа" + }, + { + "path": "content.form.messagePlaceholder", + "label": "Поле сообщения", + "kind": "text", + "renderAs": "attr", + "group": "Форма" + }, + { + "path": "content.form.namePlaceholder", + "label": "Поле имени", + "kind": "text", + "renderAs": "attr", + "group": "Форма" + }, + { + "path": "content.form.emailPlaceholder", + "label": "Поле email", + "kind": "text", + "renderAs": "attr", + "group": "Форма" + }, + { + "path": "content.form.submitLabel", + "label": "Кнопка отправки", + "kind": "text", + "renderAs": "text", + "group": "Форма" + }, + { + "path": "content.form.successHeading", + "label": "Success: заголовок", + "kind": "text", + "renderAs": "text", + "group": "Форма" + }, + { + "path": "content.form.successTextHtml", + "label": "Success: текст", + "kind": "html", + "renderAs": "html", + "group": "Форма" + }, + { + "path": "content.form.betaCtaLabel", + "label": "Success: beta CTA", + "kind": "text", + "renderAs": "text", + "group": "Форма" + }, + { + "path": "content.form.betaHref", + "label": "Success: beta href", + "kind": "url", + "renderAs": "attr", + "group": "Форма" + }, + { + "path": "content.legalHtml", + "label": "Юридический текст", + "kind": "html", + "renderAs": "html", + "group": "Юридический блок" + }, + { + "path": "content.files", + "label": "TXT-файлы листа ожидания", + "kind": "collection", + "renderAs": "collection", + "group": "TXT-файлы", + "itemFields": [ + { + "path": "id", + "label": "ID окна", + "kind": "text", + "renderAs": "attr" + }, + { + "path": "name", + "label": "Название файла", + "kind": "text", + "renderAs": "text" + }, + { + "path": "bodyHtml", + "label": "Текст файла", + "kind": "html", + "renderAs": "html" + } + ], + "itemTemplate": { + "id": "new-file", + "name": "Новый файл", + "bodyHtml": "Текст файла", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + } + } + ] + } + }, + { + "key": "cViz:demoVideoFolder:demo-video-folder.html", + "regionId": "cViz", + "regionLabel": "Секции", + "title": "Иконка демо-видео в доке", + "description": "demo-video-folder.html", + "block": { + "region": "cViz", + "id": "demo-video-folder", + "type": "demoVideoFolder", + "template": "demo-video-folder.html", + "adminLabel": "Иконка демо-видео в доке", + "anchor": null, + "enabled": true, + "content": { + "target": "demo-video", + "to": "features", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "label": "демо-видео.txt" + }, + "editableFields": [ + { + "path": "content.target", + "label": "Целевое окно", + "kind": "text", + "renderAs": "attr", + "group": "Dock" + }, + { + "path": "content.to", + "label": "Целевая секция", + "kind": "text", + "renderAs": "attr", + "group": "Dock" + }, + { + "path": "content.iconSrc", + "label": "Иконка файла", + "kind": "media", + "renderAs": "attr", + "group": "Dock" + }, + { + "path": "content.iconAlt", + "label": "Иконка: alt", + "kind": "text", + "renderAs": "attr", + "group": "Dock" + }, + { + "path": "content.label", + "label": "Подпись файла", + "kind": "text", + "renderAs": "text", + "group": "Dock" + } + ] + } + }, + { + "key": "cViz:footer:footer.html", + "regionId": "cViz", + "regionLabel": "Секции", + "title": "Футер", + "description": "footer.html", + "block": { + "region": "cViz", + "id": "footer", + "type": "footer", + "template": "footer.html", + "adminLabel": "Футер", + "anchor": null, + "enabled": true, + "content": { + "footer": { + "appIconSrc": "./assets/webflow/images/69ad964d951f9d17cc5a919e_logo-app.svg", + "appIconAlt": "Иконка NODE.DC", + "wordmarkSrc": "./assets/webflow/images/69ad96a28b06b7552a339137_logtype.svg?v=node-dc", + "wordmarkAlt": "Логотип NODE.DC", + "copyrightHtml": "© 2026 —  NODE.DC", + "navTitle": "Навигация", + "navLinks": [ + { + "label": "Документация", + "href": "https://docs.ssscript.app/", + "target": "_blank" + }, + { + "label": "Лист ожидания", + "href": "index.html#waitlist", + "target": "" + }, + { + "label": "Тарифы", + "href": "index.html#", + "target": "" + }, + { + "label": "Возможности", + "href": "index.html#features", + "target": "" + }, + { + "label": "Демо", + "href": "index.html#features", + "target": "" + } + ], + "contactTitle": "Контакты", + "contactLinks": [ + { + "label": "Twitter", + "href": "https://federic.ooo/s/twitter", + "target": "_blank" + }, + { + "label": "Instagram", + "href": "https://federic.ooo/s/instagram", + "target": "_blank" + }, + { + "label": "GitHub", + "href": "https://www.federic.ooo/s/github", + "target": "_blank" + }, + { + "label": "Портфолио", + "href": "https://federic.ooo/", + "target": "_blank" + } + ], + "policyHtml": "Политика конфиденциальностиУсловия использования" + } + }, + "editableFields": [ + { + "path": "content.footer.appIconSrc", + "label": "Иконка приложения", + "kind": "media", + "renderAs": "attr", + "group": "Футер" + }, + { + "path": "content.footer.appIconAlt", + "label": "Иконка: alt", + "kind": "text", + "renderAs": "attr", + "group": "Футер" + }, + { + "path": "content.footer.wordmarkSrc", + "label": "Wordmark", + "kind": "media", + "renderAs": "attr", + "group": "Футер" + }, + { + "path": "content.footer.wordmarkAlt", + "label": "Wordmark: alt", + "kind": "text", + "renderAs": "attr", + "group": "Футер" + }, + { + "path": "content.footer.copyrightHtml", + "label": "Копирайт", + "kind": "html", + "renderAs": "html", + "group": "Футер" + }, + { + "path": "content.footer.navTitle", + "label": "Заголовок навигации", + "kind": "text", + "renderAs": "text", + "group": "Футер" + }, + { + "path": "content.footer.navLinks", + "label": "Навигационные ссылки", + "kind": "collection", + "renderAs": "collection", + "group": "Футер", + "itemFields": [ + { + "path": "label", + "label": "Текст", + "kind": "text", + "renderAs": "text" + }, + { + "path": "href", + "label": "Адрес", + "kind": "url", + "renderAs": "attr" + }, + { + "path": "target", + "label": "Target", + "kind": "text", + "renderAs": "attr" + } + ], + "itemTemplate": { + "label": "Новая ссылка", + "href": "index.html#", + "target": "" + } + }, + { + "path": "content.footer.contactTitle", + "label": "Заголовок контактов", + "kind": "text", + "renderAs": "text", + "group": "Футер" + }, + { + "path": "content.footer.contactLinks", + "label": "Контактные ссылки", + "kind": "collection", + "renderAs": "collection", + "group": "Футер", + "itemFields": [ + { + "path": "label", + "label": "Текст", + "kind": "text", + "renderAs": "text" + }, + { + "path": "href", + "label": "Адрес", + "kind": "url", + "renderAs": "attr" + }, + { + "path": "target", + "label": "Target", + "kind": "text", + "renderAs": "attr" + } + ], + "itemTemplate": { + "label": "Новая ссылка", + "href": "https://", + "target": "_blank" + } + }, + { + "path": "content.footer.policyHtml", + "label": "Политики", + "kind": "html", + "renderAs": "html", + "group": "Футер" + } + ] + } + } +] diff --git a/content/pages/home.json b/content/pages/home.json index 05f7490..a58a654 100644 --- a/content/pages/home.json +++ b/content/pages/home.json @@ -1587,6 +1587,316 @@ "priceHtml": "50", "period": "/ месяц" } + ], + "pricingCells": [ + { + "label": "Ячейка 1: Старт", + "textHtml": "Старт" + }, + { + "label": "Ячейка 2: Старт", + "textHtml": "Старт" + }, + { + "label": "Ячейка 3: Старт", + "textHtml": "Старт" + }, + { + "label": "Ячейка 4: Всего доступно", + "textHtml": "Всего доступно" + }, + { + "label": "Ячейка 5: Расширение (20M)", + "textHtml": "Расширение (20M)" + }, + { + "label": "Ячейка 6: Расширение (10M)", + "textHtml": "Расширение (10M)" + }, + { + "label": "Ячейка 7: Глубина рассуждения", + "textHtml": "Глубина рассуждения" + }, + { + "label": "Ячейка 8: Базовый интеллект", + "textHtml": "Базовый интеллект" + }, + { + "label": "Ячейка 9: Рабочее пространство", + "textHtml": "Рабочее пространство" + }, + { + "label": "Ячейка 10: Объём токенов", + "textHtml": "Объём токенов" + }, + { + "label": "Ячейка 11: Старт", + "textHtml": "Старт" + }, + { + "label": "Ячейка 12: Объём токенов", + "textHtml": "Объём токенов" + }, + { + "label": "Ячейка 13: Объём токенов", + "textHtml": "Объём токенов" + }, + { + "label": "Ячейка 14: Рабочее пространство", + "textHtml": "Рабочее пространство" + }, + { + "label": "Ячейка 15: Всего доступно", + "textHtml": "Всего доступно" + }, + { + "label": "Ячейка 16: Расширение (20M)", + "textHtml": "Расширение (20M)" + }, + { + "label": "Ячейка 17: Расширение (10M)", + "textHtml": "Расширение (10M)" + }, + { + "label": "Ячейка 18: Глубина рассуждения", + "textHtml": "Глубина рассуждения" + }, + { + "label": "Ячейка 19: Базовый интеллект", + "textHtml": "Базовый интеллект" + }, + { + "label": "Ячейка 20: Рабочее пространство", + "textHtml": "Рабочее пространство" + }, + { + "label": "Ячейка 21: Базовый интеллект", + "textHtml": "Базовый интеллект" + }, + { + "label": "Ячейка 22: Глубина рассуждения", + "textHtml": "Глубина рассуждения" + }, + { + "label": "Ячейка 23: Расширение (10M)", + "textHtml": "Расширение (10M)" + }, + { + "label": "Ячейка 24: Расширение (20M)", + "textHtml": "Расширение (20M)" + }, + { + "label": "Ячейка 25: Всего доступно", + "textHtml": "Всего доступно" + }, + { + "label": "Ячейка 26: Июнь 2026", + "textHtml": "Июнь 2026" + }, + { + "label": "Ячейка 27: Июнь 2026", + "textHtml": "Июнь 2026" + }, + { + "label": "Ячейка 28: Июнь 2026", + "textHtml": "Июнь 2026" + }, + { + "label": "Ячейка 29: Июнь 2026", + "textHtml": "Июнь 2026" + }, + { + "label": "Ячейка 30: Кредиты тарифа", + "textHtml": "Кредиты тарифа" + }, + { + "label": "Ячейка 31: Без ограничений", + "textHtml": "Без ограничений" + }, + { + "label": "Ячейка 32: 40 000 включено", + "textHtml": "40 000 включено" + }, + { + "label": "Ячейка 33: 12 000 включено", + "textHtml": "12 000 включено" + }, + { + "label": "Ячейка 34: 40 000 включено", + "textHtml": "40 000 включено" + }, + { + "label": "Ячейка 35: Рабочее пространство", + "textHtml": "Рабочее пространство" + }, + { + "label": "Ячейка 36: Без ограничений", + "textHtml": "Без ограничений" + }, + { + "label": "Ячейка 37: Без ограничений", + "textHtml": "Без ограничений" + }, + { + "label": "Ячейка 38: 10 проектов", + "textHtml": "10 проектов" + }, + { + "label": "Ячейка 39: Без ограничений", + "textHtml": "Без ограничений" + }, + { + "label": "Ячейка 40: Базовый интеллект", + "textHtml": "Базовый интеллект" + }, + { + "label": "Ячейка 41: Все модели", + "textHtml": "Все модели" + }, + { + "label": "Ячейка 42: Все быстрые", + "textHtml": "Все быстрые " + }, + { + "label": "Ячейка 43: Все быстрые", + "textHtml": "Все быстрые " + }, + { + "label": "Ячейка 44: Все быстрые", + "textHtml": "Все быстрые " + }, + { + "label": "Ячейка 45: Глубина рассуждения", + "textHtml": "Глубина рассуждения" + }, + { + "label": "Ячейка 46: Полный", + "textHtml": "Полный" + }, + { + "label": "Ячейка 47: Полный", + "textHtml": "Полный" + }, + { + "label": "Ячейка 48: Ограниченный", + "textHtml": "Ограниченный" + }, + { + "label": "Ячейка 49: Полный", + "textHtml": "Полный" + }, + { + "label": "Ячейка 50: Расширение SM 10€", + "textHtml": "Расширение SM 10€" + }, + { + "label": "Ячейка 51: Обновления без лимита", + "textHtml": "Обновления без лимита" + }, + { + "label": "Ячейка 52: + 10 000 кредитов", + "textHtml": "+ 10 000 кредитов" + }, + { + "label": "Ячейка 53: + 8 000 кредитов", + "textHtml": "+ 8 000 кредитов" + }, + { + "label": "Ячейка 54: + 10 000 кредитов", + "textHtml": "+ 10 000 кредитов" + }, + { + "label": "Ячейка 55: Расширение MD 20€", + "textHtml": "Расширение MD 20€" + }, + { + "label": "Ячейка 56: Обновления без лимита", + "textHtml": "Обновления без лимита" + }, + { + "label": "Ячейка 57: + 26 000 кредитов", + "textHtml": "+ 26 000 кредитов" + }, + { + "label": "Ячейка 58: + 20 000 кредитов", + "textHtml": "+ 20 000 кредитов" + }, + { + "label": "Ячейка 59: + 26 000 кредитов", + "textHtml": "+ 26 000 кредитов" + }, + { + "label": "Ячейка 60: Всего доступно", + "textHtml": "Всего доступно" + }, + { + "label": "Ячейка 61: 40 тестировщиков", + "textHtml": "40 тестировщиков" + }, + { + "label": "Ячейка 62: 200 мест", + "textHtml": "200 мест" + }, + { + "label": "Ячейка 63: --", + "textHtml": "--" + }, + { + "label": "Ячейка 64: --", + "textHtml": "--" + } + ], + "galleryItems": [ + { + "id": "one-click-publish-png", + "windowTitle": "публикация-в-один-клик.png", + "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", + "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "публикация-в-один-клик.png" + }, + { + "id": "complete-code-editor-webp", + "windowTitle": "полноценный-редактор-кода.webp", + "imageSrc": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif", + "imageSrcset": "./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174-p-500.avif 500w, ./assets/webflow/images/69d3fba72116e87a8d145059_Frame%203174.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "полноценный-редактор-кода.webp" + }, + { + "id": "ai-dock-mode-jpg", + "windowTitle": "ИИ-док-режим.jpg", + "imageSrc": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif", + "imageSrcset": "./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175-p-500.avif 500w, ./assets/webflow/images/69d3fac0d22182f930e32ec6_Frame%203175.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "ИИ-док-режим.jpg" + }, + { + "id": "deep-webflow-connection-webp", + "windowTitle": "глубокая-интеграция-webflow.webp", + "imageSrc": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif", + "imageSrcset": "./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173-p-500.avif 500w, ./assets/webflow/images/69d3dc83a417451438caec72_Frame%203173.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "глубокая-интеграция-webflow.webp" + }, + { + "id": "install-setup-and-run", + "windowTitle": "установка-настройка-запуск.jpg", + "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", + "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "установка-настройка-запуск.jpg" + } ] }, "editableFields": [ @@ -1792,6 +2102,98 @@ "kind": "html", "renderAs": "html", "group": "Тарифы" + }, + { + "path": "content.pricingCells", + "label": "Ячейки тарифной таблицы", + "kind": "collection", + "renderAs": "collection", + "group": "Строки тарифов", + "itemFields": [ + { + "path": "label", + "label": "Название в админке", + "kind": "text", + "renderAs": "text" + }, + { + "path": "textHtml", + "label": "Текст ячейки", + "kind": "html", + "renderAs": "html" + } + ], + "itemTemplate": { + "label": "Новая ячейка", + "textHtml": "--" + } + }, + { + "path": "content.galleryItems", + "label": "Медиа-галерея после тарифов", + "kind": "collection", + "renderAs": "collection", + "group": "Медиа-галерея", + "itemFields": [ + { + "path": "id", + "label": "ID окна", + "kind": "text", + "renderAs": "attr" + }, + { + "path": "windowTitle", + "label": "Заголовок окна", + "kind": "text", + "renderAs": "text" + }, + { + "path": "imageSrc", + "label": "Изображение", + "kind": "media", + "renderAs": "attr" + }, + { + "path": "imageSrcset", + "label": "Srcset", + "kind": "textarea", + "renderAs": "attr" + }, + { + "path": "imageAlt", + "label": "Alt изображения", + "kind": "text", + "renderAs": "attr" + }, + { + "path": "iconSrc", + "label": "Иконка файла", + "kind": "media", + "renderAs": "attr" + }, + { + "path": "iconAlt", + "label": "Иконка: alt", + "kind": "text", + "renderAs": "attr" + }, + { + "path": "folderLabel", + "label": "Подпись файла", + "kind": "text", + "renderAs": "text" + } + ], + "itemTemplate": { + "id": "new-media-item", + "windowTitle": "новый-файл.png", + "imageSrc": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif", + "imageSrcset": "./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201-p-500.avif 500w, ./assets/webflow/images/69d3dc9256192179afb4cfdc_Frame%201.avif 1200w", + "imageAlt": "", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "folderLabel": "новый-файл.png" + } } ], "enabled": true @@ -1799,38 +2201,740 @@ { "region": "cViz", "id": "pricing-intro", - "type": "staticHtml", + "type": "pricingIntro", "template": "pricing-intro.html", "adminLabel": "Интро тарифов", "anchor": "waitlist", - "enabled": true + "enabled": false, + "content": { + "eyebrow": "Тарифы", + "heading": { + "muted": "Код", + "middle": "для No-Code,", + "main": "усиленный ИИ." + }, + "introHtml": "Подписки на приложение с
включённым объёмом в каждом тарифе.
", + "tokenBillingHtml": "Токенная оплата сверх лимитов.", + "founderLimitHtml": "200 Founder мест с фиксированной ценой на первый год." + }, + "editableFields": [ + { + "path": "content.eyebrow", + "label": "Надзаголовок", + "kind": "text", + "renderAs": "text", + "group": "Тарифы" + }, + { + "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.tokenBillingHtml", + "label": "Оплата сверх лимитов", + "kind": "html", + "renderAs": "html", + "group": "Тарифы" + }, + { + "path": "content.founderLimitHtml", + "label": "Founder-лимит", + "kind": "html", + "renderAs": "html", + "group": "Тарифы" + } + ] }, { "region": "cViz", "id": "waitlist-files", - "type": "staticHtml", + "type": "waitlistFiles", "template": "waitlist-files.html", "adminLabel": "Форма ожидания и txt-файлы", "anchor": "waitlist", - "enabled": true + "enabled": true, + "content": { + "app": { + "iconSrc": "./assets/webflow/images/69ad964d951f9d17cc5a919e_logo-app.svg", + "iconAlt": "Иконка NODE.DC", + "wordmarkSrc": "./assets/webflow/images/69ad96a28b06b7552a339137_logtype.svg?v=node-dc", + "wordmarkAlt": "Логотип NODE.DC", + "release": "Бета-релиз: июль 2026", + "heading": "Ранний доступ", + "description": "Кастомный код, MCP и ИИ-агенты для Webflow в одном рабочем контуре." + }, + "form": { + "messagePlaceholder": "Сообщение (необязательно)", + "namePlaceholder": "Ваше имя*", + "emailPlaceholder": "Email для регистрации*", + "submitLabel": "Встать в лист ожидания", + "successHeading": "Заявка принята. Спасибо.", + "successTextHtml": "Мы скоро свяжемся.
", + "betaCtaLabel": "Подать заявку в бету?", + "betaHref": "beta-apply.html" + }, + "legalHtml": "Политика конфиденциальностиПолитика cookie
© — Все права защищены
2026", + "files": [ + { + "id": "fff-1781522145197", + "name": "fff", + "bodyHtml": "fff", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "ergtrr-1781299687391", + "name": "Ergtrr", + "bodyHtml": "Ggg", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "paul-1781292773241", + "name": "Paul", + "bodyHtml": "только что нашёл ваш сайт — выглядит отлично!\n", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "s-1781291497432", + "name": "s", + "bodyHtml": "s", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "rkxkr-1780076462889", + "name": "rkxkr", + "bodyHtml": "пока не уверен, но да, интересно", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "ali-awan-1779508741466", + "name": "Ali Awan", + "bodyHtml": "Дайте, пожалуйста, посмотреть продукт!", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "rox-del-toro-1779345898781", + "name": "rox del toro", + "bodyHtml": "ХОЧУ ДОСТУП", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "flavio-1779221805979", + "name": "Flavio", + "bodyHtml": "Привет!", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "daniel-clydesdale-1776810985184", + "name": "Daniel Clydesdale", + "bodyHtml": "Мы работаем с Webflow с 2016 года и используем его постоянно. Сейчас внедряем ИИ в процессы, поэтому ваш продукт нам очень интересен. Удачи с запуском!", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "carter-ogunsola-1776789849836", + "name": "Carter Ogunsola", + "bodyHtml": "Для всех разработчиков: я нашёл это очень рано. Уже один из фаворитов.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "marin-trajkovski-1776246697900", + "name": "Marin Trajkovski", + "bodyHtml": "Здравствуйте, можно получить ранний доступ? Очень хочу протестировать ИИ, это сейчас действительно нужно.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "arul-1776155521436", + "name": "Arul", + "bodyHtml": "Интересно. Хотелось бы узнать больше.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "jeremy-1776110312766", + "name": "Jeremy", + "bodyHtml": "Вау!\n\nПожалуйста, пустите меня в бету!", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "safin-1775735336208", + "name": "Safin", + "bodyHtml": "С удовольствием протестировал бы продукт. Выглядит очень интересно.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "ilja-van-eck-1775728385192", + "name": "Ilja van Eck", + "bodyHtml": "Я теперь первый Founder? Берите деньги и запускайте это.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "jordan-gilroy-1775725512001", + "name": "Jordan Gilroy", + "bodyHtml": "Я ваш главный фанат", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "hyun-1775717954559", + "name": "hyun", + "bodyHtml": "привет", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "kris-1775631278525", + "name": "kris", + "bodyHtml": "тестирую", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "syed-irfan-1775594918209", + "name": "Syed Irfan", + "bodyHtml": "Интересно", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "ramyar-atlasi-1775580173318", + "name": "ramyar atlasi", + "bodyHtml": "Apm pflege schule Düsseldorf", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "muhammad-ashar-1775577297259", + "name": "Muhammad Ashar", + "bodyHtml": "vv", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "dd-1775574406425", + "name": ":DD", + "bodyHtml": "ka tu nx", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "test-1775569341172", + "name": "test", + "bodyHtml": "test", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "filip-1775566849792", + "name": "Filip", + "bodyHtml": "Я знаю Fed!", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "arinbj-rn-1775555738944", + "name": "Arinbjørn", + "bodyHtml": "Пустите меня! ", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "janarthanan-1775546824101", + "name": "Janarthanan", + "bodyHtml": "жду", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "jane-smith-1775475995013", + "name": "Jane Smith", + "bodyHtml": "Очень хочу ранний доступ к продукту!", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "daniel-apro-1775466924878", + "name": "Daniel Apro", + "bodyHtml": "Привет, сайт огонь.", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "allonelabs-1775379632146", + "name": "Allonelabs", + "bodyHtml": "Нам очень нравится ваш дизайн. Спасибо!", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + }, + { + "id": "nicola-romei-1775368624397", + "name": "nicola romei", + "bodyHtml": "G.O.A.T. часто используют как сокращение от Greatest of All Time — «лучший за всё время».", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + } + ] + }, + "editableFields": [ + { + "path": "content.app.iconSrc", + "label": "Иконка приложения", + "kind": "media", + "renderAs": "attr", + "group": "Карточка раннего доступа" + }, + { + "path": "content.app.iconAlt", + "label": "Иконка: alt", + "kind": "text", + "renderAs": "attr", + "group": "Карточка раннего доступа" + }, + { + "path": "content.app.wordmarkSrc", + "label": "Wordmark", + "kind": "media", + "renderAs": "attr", + "group": "Карточка раннего доступа" + }, + { + "path": "content.app.wordmarkAlt", + "label": "Wordmark: alt", + "kind": "text", + "renderAs": "attr", + "group": "Карточка раннего доступа" + }, + { + "path": "content.app.release", + "label": "Релиз", + "kind": "text", + "renderAs": "text", + "group": "Карточка раннего доступа" + }, + { + "path": "content.app.heading", + "label": "Заголовок", + "kind": "text", + "renderAs": "text", + "group": "Карточка раннего доступа" + }, + { + "path": "content.app.description", + "label": "Описание", + "kind": "textarea", + "renderAs": "text", + "group": "Карточка раннего доступа" + }, + { + "path": "content.form.messagePlaceholder", + "label": "Поле сообщения", + "kind": "text", + "renderAs": "attr", + "group": "Форма" + }, + { + "path": "content.form.namePlaceholder", + "label": "Поле имени", + "kind": "text", + "renderAs": "attr", + "group": "Форма" + }, + { + "path": "content.form.emailPlaceholder", + "label": "Поле email", + "kind": "text", + "renderAs": "attr", + "group": "Форма" + }, + { + "path": "content.form.submitLabel", + "label": "Кнопка отправки", + "kind": "text", + "renderAs": "text", + "group": "Форма" + }, + { + "path": "content.form.successHeading", + "label": "Success: заголовок", + "kind": "text", + "renderAs": "text", + "group": "Форма" + }, + { + "path": "content.form.successTextHtml", + "label": "Success: текст", + "kind": "html", + "renderAs": "html", + "group": "Форма" + }, + { + "path": "content.form.betaCtaLabel", + "label": "Success: beta CTA", + "kind": "text", + "renderAs": "text", + "group": "Форма" + }, + { + "path": "content.form.betaHref", + "label": "Success: beta href", + "kind": "url", + "renderAs": "attr", + "group": "Форма" + }, + { + "path": "content.legalHtml", + "label": "Юридический текст", + "kind": "html", + "renderAs": "html", + "group": "Юридический блок" + }, + { + "path": "content.files", + "label": "TXT-файлы листа ожидания", + "kind": "collection", + "renderAs": "collection", + "group": "TXT-файлы", + "itemFields": [ + { + "path": "id", + "label": "ID окна", + "kind": "text", + "renderAs": "attr" + }, + { + "path": "name", + "label": "Название файла", + "kind": "text", + "renderAs": "text" + }, + { + "path": "bodyHtml", + "label": "Текст файла", + "kind": "html", + "renderAs": "html" + } + ], + "itemTemplate": { + "id": "new-file", + "name": "Новый файл", + "bodyHtml": "Текст файла", + "iconSrc": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif", + "iconSrcset": "./assets/webflow/images/69a9fb87bc56142371745926_txt-file-p-500.avif 500w, ./assets/webflow/images/69a9fb87bc56142371745926_txt-file.avif 1024w", + "iconAlt": "Иконка TXT-файла" + } + } + ] }, { "region": "cViz", "id": "demo-video-folder", - "type": "staticHtml", + "type": "demoVideoFolder", "template": "demo-video-folder.html", "adminLabel": "Иконка демо-видео в доке", "anchor": null, - "enabled": true + "enabled": true, + "content": { + "target": "demo-video", + "to": "features", + "iconSrc": "./assets/webflow/images/69aab66f030013f2c7177d78_mov-file.avif", + "iconAlt": "Иконка MOV-файла.", + "label": "демо-видео.txt" + }, + "editableFields": [ + { + "path": "content.target", + "label": "Целевое окно", + "kind": "text", + "renderAs": "attr", + "group": "Dock" + }, + { + "path": "content.to", + "label": "Целевая секция", + "kind": "text", + "renderAs": "attr", + "group": "Dock" + }, + { + "path": "content.iconSrc", + "label": "Иконка файла", + "kind": "media", + "renderAs": "attr", + "group": "Dock" + }, + { + "path": "content.iconAlt", + "label": "Иконка: alt", + "kind": "text", + "renderAs": "attr", + "group": "Dock" + }, + { + "path": "content.label", + "label": "Подпись файла", + "kind": "text", + "renderAs": "text", + "group": "Dock" + } + ] }, { "region": "cViz", "id": "footer", - "type": "staticHtml", + "type": "footer", "template": "footer.html", "adminLabel": "Футер", "anchor": null, - "enabled": true + "enabled": true, + "content": { + "footer": { + "appIconSrc": "./assets/webflow/images/69ad964d951f9d17cc5a919e_logo-app.svg", + "appIconAlt": "Иконка NODE.DC", + "wordmarkSrc": "./assets/webflow/images/69ad96a28b06b7552a339137_logtype.svg?v=node-dc", + "wordmarkAlt": "Логотип NODE.DC", + "copyrightHtml": "© 2026 —  NODE.DC", + "navTitle": "Навигация", + "navLinks": [ + { + "label": "Документация", + "href": "https://docs.ssscript.app/", + "target": "_blank" + }, + { + "label": "Лист ожидания", + "href": "index.html#waitlist", + "target": "" + }, + { + "label": "Тарифы", + "href": "index.html#", + "target": "" + }, + { + "label": "Возможности", + "href": "index.html#features", + "target": "" + }, + { + "label": "Демо", + "href": "index.html#features", + "target": "" + } + ], + "contactTitle": "Контакты", + "contactLinks": [ + { + "label": "Twitter", + "href": "https://federic.ooo/s/twitter", + "target": "_blank" + }, + { + "label": "Instagram", + "href": "https://federic.ooo/s/instagram", + "target": "_blank" + }, + { + "label": "GitHub", + "href": "https://www.federic.ooo/s/github", + "target": "_blank" + }, + { + "label": "Портфолио", + "href": "https://federic.ooo/", + "target": "_blank" + } + ], + "policyHtml": "Политика конфиденциальностиУсловия использования" + } + }, + "editableFields": [ + { + "path": "content.footer.appIconSrc", + "label": "Иконка приложения", + "kind": "media", + "renderAs": "attr", + "group": "Футер" + }, + { + "path": "content.footer.appIconAlt", + "label": "Иконка: alt", + "kind": "text", + "renderAs": "attr", + "group": "Футер" + }, + { + "path": "content.footer.wordmarkSrc", + "label": "Wordmark", + "kind": "media", + "renderAs": "attr", + "group": "Футер" + }, + { + "path": "content.footer.wordmarkAlt", + "label": "Wordmark: alt", + "kind": "text", + "renderAs": "attr", + "group": "Футер" + }, + { + "path": "content.footer.copyrightHtml", + "label": "Копирайт", + "kind": "html", + "renderAs": "html", + "group": "Футер" + }, + { + "path": "content.footer.navTitle", + "label": "Заголовок навигации", + "kind": "text", + "renderAs": "text", + "group": "Футер" + }, + { + "path": "content.footer.navLinks", + "label": "Навигационные ссылки", + "kind": "collection", + "renderAs": "collection", + "group": "Футер", + "itemFields": [ + { + "path": "label", + "label": "Текст", + "kind": "text", + "renderAs": "text" + }, + { + "path": "href", + "label": "Адрес", + "kind": "url", + "renderAs": "attr" + }, + { + "path": "target", + "label": "Target", + "kind": "text", + "renderAs": "attr" + } + ], + "itemTemplate": { + "label": "Новая ссылка", + "href": "index.html#", + "target": "" + } + }, + { + "path": "content.footer.contactTitle", + "label": "Заголовок контактов", + "kind": "text", + "renderAs": "text", + "group": "Футер" + }, + { + "path": "content.footer.contactLinks", + "label": "Контактные ссылки", + "kind": "collection", + "renderAs": "collection", + "group": "Футер", + "itemFields": [ + { + "path": "label", + "label": "Текст", + "kind": "text", + "renderAs": "text" + }, + { + "path": "href", + "label": "Адрес", + "kind": "url", + "renderAs": "attr" + }, + { + "path": "target", + "label": "Target", + "kind": "text", + "renderAs": "attr" + } + ], + "itemTemplate": { + "label": "Новая ссылка", + "href": "https://", + "target": "_blank" + } + }, + { + "path": "content.footer.policyHtml", + "label": "Политики", + "kind": "html", + "renderAs": "html", + "group": "Футер" + } + ] } ] } diff --git a/index.html b/index.html index 28e3c77..9e304e4 100644 --- a/index.html +++ b/index.html @@ -117,7 +117,7 @@ window.__API_ORIGIN__="https://ssscript-website.vercel.app"; [debug] { visibility: hidden; } -

Ваш Webflow ИИ-инструменты

Несколько агентов для проекта Webflow: от Designer до кастомного кода.

Полныйагентный контроль

Интеграция с Webflow MCP, мультиагентный режим позволяет работать с несколькими экземплярами параллельно.

Компонентнаябиблиотека

Собирайте с учетом ИИ-агентов разные компонентные заготовки дают основу, а стиль и сложную функциональность можно дорабатывать промптами.

Деплой пайплайн

Деплой в один клик, непрерывный пайплайн, мгновенный откат и быстрая доставка через CDN.
Логотип NODE.DC
Бета-релиз: июль 2026

Ранний доступ

Кастомный код, MCP и ИИ-агенты для Webflow в одном рабочем контуре.

Заявка принята. Спасибо.

Мы скоро свяжемся.

Подать заявку в бету?

Или оформить ранний Founder-доступ

Оформить Founder-доступ 350€
До 200 мест

Не получилось

Что-то пошло не так.
Попробуйте ещё раз чуть позже.

демо-видео.mp4

Всё в одномприложение.

Универсальный инструмент для ИИ-агентов в вашем Webflow-проекте.
Контекст проекта
Подключитесь к MCP чтобы агенты получили полный контекст вашей сборки.
Группы агентов
Используйте несколько агентов параллельно чтобы добавлять кастомный код, анимации и функциональность.
Среда разработки
Используйте быстрые Bun сборки и автообновление для вашего кастомного кода.
Деплой в один клик
Нажмите и публикуйте кастомный код, написанный ИИ, чтобы он стал доступен всем посетителям сайта.

АгентнаяКомпонентнаябиблиотека.

Готовая к работе с агентами компонентная библиотека: добавление в один клик через приложение NODE.DC для Webflow и дальнейшая настройка под проект.

Переключение режимов ИИ

Создание нового проекта

ИИ-док

Аккаунт

Редактирование кода с ИИ

Dev-сервер с ИИ

Webflow MCP

Публикация

Одинкликдобавления.

С помощью расширения NODE.DC для Webflow.
Понимание компонентов
Используйте несколько агентов параллельно чтобы добавлять кастомный код, анимации и функциональность.
Быстрый старт
Используйте быстрые Bun сборки и автообновление для вашего кастомного кода.

Получитеболее сильныйMCP.

Полностью переработанный и более быстрый MCP-сервер.
Понимание Webflow
Используйте несколько агентов параллельно чтобы добавлять кастомный код, анимации и функциональность.

Гибкиережимы ИИ.

Разные режимы и модели для разных задач.

Переключение режимов ИИ

Создание нового проекта

ИИ-док

Аккаунт

Редактирование кода с ИИ

Dev-сервер с ИИ

Webflow MCP

Публикация

Частыевопросыи ответы

Подробный обзор возможностей, логики работы и внутреннего устройства.
FAQ
NODE.DC
Это влияет на производительность?
NODE.DC
Где размещаются мои файлы?
NODE.DC
Что делать, если я опубликовал не те файлы?
NODE.DC
Что такое ИИ-агент Webflow?
NODE.DC
Что такое собственная база знаний?
NODE.DC
Как использовать это с Webflow?
NODE.DC
Какие ИИ-модели доступны?
NODE.DC
Как это работает?
NODE.DC
Как работает публикация?
NODE.DC
Это работает с MCP?
NODE.DC
Ответить
Это влияет на производительность?

Как и любой кастомный код, это добавляет только ту нагрузку, которую несёт сам код.

Все файлы собираются, минифицируются и сжимаются, чтобы минимально влиять на проект и не плодить внешние библиотеки и CDN-скрипты.

Отправлено с iPhone
NODE.DC
Ответить
Где размещаются мои файлы?

После сборки файлы загружаются в Cloudflare R2 и отдаются через CDN-ссылку на выделенном домене проекта, чтобы получить быстрый и совместимый с Webflow результат.

Отправлено с iPhone
NODE.DC
Ответить
Что делать, если я опубликовал не те файлы?

В панели деплоя есть мгновенный откат.

Нажмите откат, верните предыдущую рабочую версию, исправьте локально и опубликуйте заново.

Отправлено с iPhone
NODE.DC
Ответить
Что такое ИИ-агент Webflow?

Помимо @plan, @build и @explore стандартных режимов агентов мы готовим @webflow режим, специально заточенный под Webflow: структуру проекта, взаимодействие с ним и эффективную разработку.

Отправлено с iPhone
NODE.DC
Ответить
Что такое собственная база знаний?

Основано на многолетнем опыте написания кастомного кода для Webflow-анимаций.

WebGL, Three.js, GSAP и кастомная функциональность собраны в набор практик, пайплайнов и модульную систему, чтобы всё работало согласованно.

Также доступна библиотека компонентов: выберите компонент, добавьте в проект и попросите ИИ адаптировать его под задачу.

Отправлено с iPhone
NODE.DC
Ответить
Как использовать это с Webflow?

При запуске NODE.DC доступна отдельная вкладка для встраивания.

В зависимости от задачи можно получить скрипты для конкретной страницы или единый app.js для всего проекта.

Сгенерированная ссылка содержит и продакшен-версию, следующую за URL деплоя, и локальную версию для предпросмотра без влияния на посетителей сайта.

Отправлено с iPhone
NODE.DC
Ответить
Какие ИИ-модели доступны?

Мы используем основные доступные модели: OpenAI до Claude до Gemini.

Оркестратор выбирает модель под задачу автоматически, но вы можете вручную переключиться на нужную модель.

Отправлено с iPhone
NODE.DC
Ответить
Как это работает?

Во время работы NODE.DC выполняет две задачи параллельно.

Поднимает локальную среду разработки на Bun, синхронизирует JavaScript и TypeScript, включает HMR и держит webhook для автоматического обновления сайта при изменениях.

Одновременно работает оркестратор ИИ-агентов: обрабатывает запросы, меняет код, проверяет состояние сборки и при необходимости обновляет проект Webflow.

Отправлено с iPhone
NODE.DC
Ответить
Как работает публикация?

Процесс многоэтапный: сначала Bun собирает, сжимает, минифицирует и подготавливает проект вместе с библиотеками.

Затем файлы отправляются в CDN: cdn.node.dc/{USERNAME}/{PROJECT-NAME}. Ссылка уже содержит нужную структуру: вы видите локальную версию, а пользователи получают опубликованный скрипт.

Отправлено с iPhone
NODE.DC
Ответить
Это работает с MCP?

Система изначально рассчитана на работу с Webflow MCP.

Подключите проект и авторизацию, чтобы ИИ-агенты получили доступ к Webflow-сборке. Подключение приложения в Webflow Designer даёт агентам доступ к контенту, элементам, стилям и CSS, а кастомный код получает полный контекст проекта.

Отправлено с iPhone

Подключить.Поставить задачу.Опубликовать.

Единый путь от разработки до продакшена.
Настройка примерно в 12 кликов: от скачивания приложения до запуска в проекте.
Встать в лист ожидания
Тарифы

Коддля No-Code,усиленный ИИ.

Подписки на приложение с
включённым объёмом в каждом тарифе.
Токенная оплата сверх лимитов.
200 Founder мест с фиксированной ценой на первый год.
Тарифы.app

Бета

Бесплатно
1 месяц

Founder

310
/ год, навсегда
Скидка 50%

Basic

20
/ месяц

Advanced

50
/ месяц
Старт
Старт
Старт
Всего доступно
Расширение (20M)
Расширение (10M)
Глубина рассуждения
Базовый интеллект
Рабочее пространство
Объём токенов
Старт
Объём токенов
Объём токенов
Рабочее пространство
Всего доступно
Расширение (20M)
Расширение (10M)
Глубина рассуждения
Базовый интеллект
Рабочее пространство
Базовый интеллект
Глубина рассуждения
Расширение (10M)
Расширение (20M)
Всего доступно
Июнь 2026
Июнь 2026
Июнь 2026
Июнь 2026
Кредиты тарифа
Без ограничений
40 000 включено
12 000 включено
40 000 включено
Рабочее пространство
Без ограничений
Без ограничений
10 проектов
Без ограничений
Базовый интеллект
Все модели
Все быстрые
Все быстрые
Все быстрые
Глубина рассуждения
Полный
Полный
Ограниченный
Полный
Расширение SM 10€
Обновления без лимита
+ 10 000 кредитов
+ 8 000 кредитов
+ 10 000 кредитов
Расширение MD 20€
Обновления без лимита
+ 26 000 кредитов
+ 20 000 кредитов
+ 26 000 кредитов
Всего доступно
40 тестировщиков
200 мест
--
--
Подать заявку в бету
Оформить Founder-доступ
(*) Условия могут меняться по ходу тестирования, но мы постараемся сохранить заявленные обещания.
Enterprise BYOK-тарифы будут доступны с сентября 2026.
публикация-в-один-клик.png
Иконка MOV-файла.
публикация-в-один-клик.png
полноценный-редактор-кода.webp
Иконка MOV-файла.
полноценный-редактор-кода.webp
ИИ-док-режим.jpg
Иконка MOV-файла.
ИИ-док-режим.jpg
глубокая-интеграция-webflow.webp
Иконка MOV-файла.
глубокая-интеграция-webflow.webp
установка-настройка-запуск.jpg
Иконка MOV-файла.
установка-настройка-запуск.jpg
Тарифы

Коддля No-Code,усиленный ИИ.

Подписки на приложение с
включённым объёмом в каждом тарифе.
Токенная оплата сверх лимитов.
200 Founder мест с фиксированной ценой на первый год.
Логотип NODE.DC
Бета-релиз: июль 2026

Ранний доступ

Кастомный код, MCP и ИИ-агенты для Webflow в одном рабочем контуре.

Заявка принята. Спасибо.

Мы скоро свяжемся.

Подать заявку в бету?
Иконка текстового файла.
fff
fff
Иконка текстового файла.
Ergtrr
Ggg
Иконка текстового файла.
Paul
только что нашёл ваш сайт — выглядит отлично! -
Иконка текстового файла.
s
s
Иконка текстового файла.
rkxkr
пока не уверен, но да, интересно
Иконка текстового файла.
Ali Awan
Дайте, пожалуйста, посмотреть продукт!
Иконка текстового файла.
rox del toro
ХОЧУ ДОСТУП
Иконка текстового файла.
Flavio
Привет!
Иконка текстового файла.
Daniel Clydesdale
Мы работаем с Webflow с 2016 года и используем его постоянно. Сейчас внедряем ИИ в процессы, поэтому ваш продукт нам очень интересен. Удачи с запуском!
Иконка текстового файла.
Carter Ogunsola
Для всех разработчиков: я нашёл это очень рано. Уже один из фаворитов.
Иконка текстового файла.
Marin Trajkovski
Здравствуйте, можно получить ранний доступ? Очень хочу протестировать ИИ, это сейчас действительно нужно.
Иконка текстового файла.
Arul
Интересно. Хотелось бы узнать больше.
Иконка текстового файла.
Jeremy
Вау! +

Ваш Webflow ИИ-инструменты

Несколько агентов для проекта Webflow: от Designer до кастомного кода.

Полныйагентный контроль

Интеграция с Webflow MCP, мультиагентный режим позволяет работать с несколькими экземплярами параллельно.

Компонентнаябиблиотека

Собирайте с учетом ИИ-агентов разные компонентные заготовки дают основу, а стиль и сложную функциональность можно дорабатывать промптами.

Деплой пайплайн

Деплой в один клик, непрерывный пайплайн, мгновенный откат и быстрая доставка через CDN.
Логотип NODE.DC
Бета-релиз: июль 2026

Ранний доступ

Кастомный код, MCP и ИИ-агенты для Webflow в одном рабочем контуре.

Заявка принята. Спасибо.

Мы скоро свяжемся.

Подать заявку в бету?

Или оформить ранний Founder-доступ

Оформить Founder-доступ 350€
До 200 мест

Не получилось

Что-то пошло не так.
Попробуйте ещё раз чуть позже.

демо-видео.mp4

Всё в одномприложение.

Универсальный инструмент для ИИ-агентов в вашем Webflow-проекте.
Контекст проекта
Подключитесь к MCP чтобы агенты получили полный контекст вашей сборки.
Группы агентов
Используйте несколько агентов параллельно чтобы добавлять кастомный код, анимации и функциональность.
Среда разработки
Используйте быстрые Bun сборки и автообновление для вашего кастомного кода.
Деплой в один клик
Нажмите и публикуйте кастомный код, написанный ИИ, чтобы он стал доступен всем посетителям сайта.

АгентнаяКомпонентнаябиблиотека.

Готовая к работе с агентами компонентная библиотека: добавление в один клик через приложение NODE.DC для Webflow и дальнейшая настройка под проект.

Переключение режимов ИИ

Создание нового проекта

ИИ-док

Аккаунт

Редактирование кода с ИИ

Dev-сервер с ИИ

Webflow MCP

Публикация

Одинкликдобавления.

С помощью расширения NODE.DC для Webflow.
Понимание компонентов
Используйте несколько агентов параллельно чтобы добавлять кастомный код, анимации и функциональность.
Быстрый старт
Используйте быстрые Bun сборки и автообновление для вашего кастомного кода.

Получитеболее сильныйMCP.

Полностью переработанный и более быстрый MCP-сервер.
Понимание Webflow
Используйте несколько агентов параллельно чтобы добавлять кастомный код, анимации и функциональность.

Гибкиережимы ИИ.

Разные режимы и модели для разных задач.

Переключение режимов ИИ

Создание нового проекта

ИИ-док

Аккаунт

Редактирование кода с ИИ

Dev-сервер с ИИ

Webflow MCP

Публикация

Частыевопросыи ответы

Подробный обзор возможностей, логики работы и внутреннего устройства.
FAQ
NODE.DC
Это влияет на производительность?
NODE.DC
Где размещаются мои файлы?
NODE.DC
Что делать, если я опубликовал не те файлы?
NODE.DC
Что такое ИИ-агент Webflow?
NODE.DC
Что такое собственная база знаний?
NODE.DC
Как использовать это с Webflow?
NODE.DC
Какие ИИ-модели доступны?
NODE.DC
Как это работает?
NODE.DC
Как работает публикация?
NODE.DC
Это работает с MCP?
NODE.DC
Ответить
Это влияет на производительность?

Как и любой кастомный код, это добавляет только ту нагрузку, которую несёт сам код.

Все файлы собираются, минифицируются и сжимаются, чтобы минимально влиять на проект и не плодить внешние библиотеки и CDN-скрипты.

Отправлено с iPhone
NODE.DC
Ответить
Где размещаются мои файлы?

После сборки файлы загружаются в Cloudflare R2 и отдаются через CDN-ссылку на выделенном домене проекта, чтобы получить быстрый и совместимый с Webflow результат.

Отправлено с iPhone
NODE.DC
Ответить
Что делать, если я опубликовал не те файлы?

В панели деплоя есть мгновенный откат.

Нажмите откат, верните предыдущую рабочую версию, исправьте локально и опубликуйте заново.

Отправлено с iPhone
NODE.DC
Ответить
Что такое ИИ-агент Webflow?

Помимо @plan, @build и @explore стандартных режимов агентов мы готовим @webflow режим, специально заточенный под Webflow: структуру проекта, взаимодействие с ним и эффективную разработку.

Отправлено с iPhone
NODE.DC
Ответить
Что такое собственная база знаний?

Основано на многолетнем опыте написания кастомного кода для Webflow-анимаций.

WebGL, Three.js, GSAP и кастомная функциональность собраны в набор практик, пайплайнов и модульную систему, чтобы всё работало согласованно.

Также доступна библиотека компонентов: выберите компонент, добавьте в проект и попросите ИИ адаптировать его под задачу.

Отправлено с iPhone
NODE.DC
Ответить
Как использовать это с Webflow?

При запуске NODE.DC доступна отдельная вкладка для встраивания.

В зависимости от задачи можно получить скрипты для конкретной страницы или единый app.js для всего проекта.

Сгенерированная ссылка содержит и продакшен-версию, следующую за URL деплоя, и локальную версию для предпросмотра без влияния на посетителей сайта.

Отправлено с iPhone
NODE.DC
Ответить
Какие ИИ-модели доступны?

Мы используем основные доступные модели: OpenAI до Claude до Gemini.

Оркестратор выбирает модель под задачу автоматически, но вы можете вручную переключиться на нужную модель.

Отправлено с iPhone
NODE.DC
Ответить
Как это работает?

Во время работы NODE.DC выполняет две задачи параллельно.

Поднимает локальную среду разработки на Bun, синхронизирует JavaScript и TypeScript, включает HMR и держит webhook для автоматического обновления сайта при изменениях.

Одновременно работает оркестратор ИИ-агентов: обрабатывает запросы, меняет код, проверяет состояние сборки и при необходимости обновляет проект Webflow.

Отправлено с iPhone
NODE.DC
Ответить
Как работает публикация?

Процесс многоэтапный: сначала Bun собирает, сжимает, минифицирует и подготавливает проект вместе с библиотеками.

Затем файлы отправляются в CDN: cdn.node.dc/{USERNAME}/{PROJECT-NAME}. Ссылка уже содержит нужную структуру: вы видите локальную версию, а пользователи получают опубликованный скрипт.

Отправлено с iPhone
NODE.DC
Ответить
Это работает с MCP?

Система изначально рассчитана на работу с Webflow MCP.

Подключите проект и авторизацию, чтобы ИИ-агенты получили доступ к Webflow-сборке. Подключение приложения в Webflow Designer даёт агентам доступ к контенту, элементам, стилям и CSS, а кастомный код получает полный контекст проекта.

Отправлено с iPhone

Подключить.Поставить задачу.Опубликовать.

Единый путь от разработки до продакшена.
Настройка примерно в 12 кликов: от скачивания приложения до запуска в проекте.
Встать в лист ожидания
Тарифы

Коддля No-Code,усиленный ИИ.

Подписки на приложение с
включённым объёмом в каждом тарифе.
Токенная оплата сверх лимитов.
200 Founder мест с фиксированной ценой на первый год.
Тарифы.app

Бета

Бесплатно
1 месяц

Founder

310
/ год, навсегда
Скидка 50%

Basic

20
/ месяц

Advanced

50
/ месяц
Старт
Старт
Старт
Всего доступно
Расширение (20M)
Расширение (10M)
Глубина рассуждения
Базовый интеллект
Рабочее пространство
Объём токенов
Старт
Объём токенов
Объём токенов
Рабочее пространство
Всего доступно
Расширение (20M)
Расширение (10M)
Глубина рассуждения
Базовый интеллект
Рабочее пространство
Базовый интеллект
Глубина рассуждения
Расширение (10M)
Расширение (20M)
Всего доступно
Июнь 2026
Июнь 2026
Июнь 2026
Июнь 2026
Кредиты тарифа
Без ограничений
40 000 включено
12 000 включено
40 000 включено
Рабочее пространство
Без ограничений
Без ограничений
10 проектов
Без ограничений
Базовый интеллект
Все модели
Все быстрые
Все быстрые
Все быстрые
Глубина рассуждения
Полный
Полный
Ограниченный
Полный
Расширение SM 10€
Обновления без лимита
+ 10 000 кредитов
+ 8 000 кредитов
+ 10 000 кредитов
Расширение MD 20€
Обновления без лимита
+ 26 000 кредитов
+ 20 000 кредитов
+ 26 000 кредитов
Всего доступно
40 тестировщиков
200 мест
--
--
Подать заявку в бету
Оформить Founder-доступ
(*) Условия могут меняться по ходу тестирования, но мы постараемся сохранить заявленные обещания.
Enterprise BYOK-тарифы будут доступны с сентября 2026.
публикация-в-один-клик.png
Иконка MOV-файла.
публикация-в-один-клик.png
полноценный-редактор-кода.webp
Иконка MOV-файла.
полноценный-редактор-кода.webp
ИИ-док-режим.jpg
Иконка MOV-файла.
ИИ-док-режим.jpg
глубокая-интеграция-webflow.webp
Иконка MOV-файла.
глубокая-интеграция-webflow.webp
установка-настройка-запуск.jpg
Иконка MOV-файла.
установка-настройка-запуск.jpg
Логотип NODE.DC
Бета-релиз: июль 2026

Ранний доступ

Кастомный код, MCP и ИИ-агенты для Webflow в одном рабочем контуре.

Заявка принята. Спасибо.

Мы скоро свяжемся.

Подать заявку в бету?
Иконка TXT-файла
fff
fff
Иконка TXT-файла
Ergtrr
Ggg
Иконка TXT-файла
Paul
только что нашёл ваш сайт — выглядит отлично! +
Иконка TXT-файла
s
s
Иконка TXT-файла
rkxkr
пока не уверен, но да, интересно
Иконка TXT-файла
Ali Awan
Дайте, пожалуйста, посмотреть продукт!
Иконка TXT-файла
rox del toro
ХОЧУ ДОСТУП
Иконка TXT-файла
Flavio
Привет!
Иконка TXT-файла
Daniel Clydesdale
Мы работаем с Webflow с 2016 года и используем его постоянно. Сейчас внедряем ИИ в процессы, поэтому ваш продукт нам очень интересен. Удачи с запуском!
Иконка TXT-файла
Carter Ogunsola
Для всех разработчиков: я нашёл это очень рано. Уже один из фаворитов.
Иконка TXT-файла
Marin Trajkovski
Здравствуйте, можно получить ранний доступ? Очень хочу протестировать ИИ, это сейчас действительно нужно.
Иконка TXT-файла
Arul
Интересно. Хотелось бы узнать больше.
Иконка TXT-файла
Jeremy
Вау! -Пожалуйста, пустите меня в бету!
Иконка текстового файла.
Safin
С удовольствием протестировал бы продукт. Выглядит очень интересно.
Иконка текстового файла.
Ilja van Eck
Я теперь первый Founder? Берите деньги и запускайте это.
Иконка текстового файла.
Jordan Gilroy
Я ваш главный фанат
Иконка текстового файла.
hyun
привет
Иконка текстового файла.
kris
тестирую
Иконка текстового файла.
Syed Irfan
Интересно
Иконка текстового файла.
ramyar atlasi
Apm pflege schule Düsseldorf
Иконка текстового файла.
Muhammad Ashar
vv
Иконка текстового файла.
:DD
ka tu nx
Иконка текстового файла.
test
test
Иконка текстового файла.
Filip
Я знаю Fed!
Иконка текстового файла.
Arinbjørn
Пустите меня!
Иконка текстового файла.
Janarthanan
жду
Иконка текстового файла.
Jane Smith
Очень хочу ранний доступ к продукту!
Иконка текстового файла.
Daniel Apro
Привет, сайт огонь.
Иконка текстового файла.
Allonelabs
Нам очень нравится ваш дизайн. Спасибо!
Иконка текстового файла.
nicola romei
G.O.A.T. часто используют как сокращение от Greatest of All Time — «лучший за всё время».
Иконка TXT-файла
fff
.txt
Иконка TXT-файла
Ergtrr
.txt
Иконка TXT-файла
Paul
.txt
Иконка TXT-файла
s
.txt
Иконка TXT-файла
rkxkr
.txt
Иконка TXT-файла
Ali Awan
.txt
Иконка TXT-файла
rox del toro
.txt
Иконка TXT-файла
Flavio
.txt
Иконка TXT-файла
Daniel Clydesdale
.txt
Иконка TXT-файла
Carter Ogunsola
.txt
Иконка TXT-файла
Marin Trajkovski
.txt
Иконка TXT-файла
Arul
.txt
Иконка TXT-файла
Jeremy
.txt
Иконка TXT-файла
Safin
.txt
Иконка TXT-файла
Ilja van Eck
.txt
Иконка TXT-файла
Jordan Gilroy
.txt
Иконка TXT-файла
hyun
.txt
Иконка TXT-файла
kris
.txt
Иконка TXT-файла
Syed Irfan
.txt
Иконка TXT-файла
ramyar atlasi
.txt
Иконка TXT-файла
Muhammad Ashar
.txt
Иконка TXT-файла
:DD
.txt
Иконка TXT-файла
test
.txt
Иконка TXT-файла
Filip
.txt
Иконка TXT-файла
Arinbjørn
.txt
Иконка TXT-файла
Janarthanan
.txt
Иконка TXT-файла
Jane Smith
.txt
Иконка TXT-файла
Daniel Apro
.txt
Иконка TXT-файла
Allonelabs
.txt
Иконка TXT-файла
nicola romei
.txt
Иконка MOV-файла.
демо-видео.txt
ДАЛЕЕ — ИЮЛЬ 2026
Открытая бета
Открываем доступ всем. Будем собирать и отлаживать вместе.
ДАЛЕЕ ИЮЛЬ 2026
Альфа для Founder-доступа
На второй фазе тестирования бета открыта для всех подписчиков Founder-тарифа.
СЕЙЧАС
Инвайты в закрытую бету уже отправлены.
Сейчас тестируем базовую функциональность и ИИ-интеграцию.
\ No newline at end of file +Пожалуйста, пустите меня в бету!
Иконка TXT-файла
Safin
С удовольствием протестировал бы продукт. Выглядит очень интересно.
Иконка TXT-файла
Ilja van Eck
Я теперь первый Founder? Берите деньги и запускайте это.
Иконка TXT-файла
Jordan Gilroy
Я ваш главный фанат
Иконка TXT-файла
hyun
привет
Иконка TXT-файла
kris
тестирую
Иконка TXT-файла
Syed Irfan
Интересно
Иконка TXT-файла
ramyar atlasi
Apm pflege schule Düsseldorf
Иконка TXT-файла
Muhammad Ashar
vv
Иконка TXT-файла
:DD
ka tu nx
Иконка TXT-файла
test
test
Иконка TXT-файла
Filip
Я знаю Fed!
Иконка TXT-файла
Arinbjørn
Пустите меня!
Иконка TXT-файла
Janarthanan
жду
Иконка TXT-файла
Jane Smith
Очень хочу ранний доступ к продукту!
Иконка TXT-файла
Daniel Apro
Привет, сайт огонь.
Иконка TXT-файла
Allonelabs
Нам очень нравится ваш дизайн. Спасибо!
Иконка TXT-файла
nicola romei
G.O.A.T. часто используют как сокращение от Greatest of All Time — «лучший за всё время».
Иконка TXT-файла
fff
.txt
Иконка TXT-файла
Ergtrr
.txt
Иконка TXT-файла
Paul
.txt
Иконка TXT-файла
s
.txt
Иконка TXT-файла
rkxkr
.txt
Иконка TXT-файла
Ali Awan
.txt
Иконка TXT-файла
rox del toro
.txt
Иконка TXT-файла
Flavio
.txt
Иконка TXT-файла
Daniel Clydesdale
.txt
Иконка TXT-файла
Carter Ogunsola
.txt
Иконка TXT-файла
Marin Trajkovski
.txt
Иконка TXT-файла
Arul
.txt
Иконка TXT-файла
Jeremy
.txt
Иконка TXT-файла
Safin
.txt
Иконка TXT-файла
Ilja van Eck
.txt
Иконка TXT-файла
Jordan Gilroy
.txt
Иконка TXT-файла
hyun
.txt
Иконка TXT-файла
kris
.txt
Иконка TXT-файла
Syed Irfan
.txt
Иконка TXT-файла
ramyar atlasi
.txt
Иконка TXT-файла
Muhammad Ashar
.txt
Иконка TXT-файла
:DD
.txt
Иконка TXT-файла
test
.txt
Иконка TXT-файла
Filip
.txt
Иконка TXT-файла
Arinbjørn
.txt
Иконка TXT-файла
Janarthanan
.txt
Иконка TXT-файла
Jane Smith
.txt
Иконка TXT-файла
Daniel Apro
.txt
Иконка TXT-файла
Allonelabs
.txt
Иконка TXT-файла
nicola romei
.txt
Иконка MOV-файла.
демо-видео.txt
ДАЛЕЕ — ИЮЛЬ 2026
Открытая бета
Открываем доступ всем. Будем собирать и отлаживать вместе.
ДАЛЕЕ ИЮЛЬ 2026
Альфа для Founder-доступа
На второй фазе тестирования бета открыта для всех подписчиков Founder-тарифа.
СЕЙЧАС
Инвайты в закрытую бету уже отправлены.
Сейчас тестируем базовую функциональность и ИИ-интеграцию.
Белая иконка корзины.
Сб, 10 июня
09:41
\ No newline at end of file diff --git a/templates/pages/home/blocks/demo-video-folder.html b/templates/pages/home/blocks/demo-video-folder.html index 24bf4bb..35b8bd2 100644 --- a/templates/pages/home/blocks/demo-video-folder.html +++ b/templates/pages/home/blocks/demo-video-folder.html @@ -1 +1 @@ -
Иконка MOV-файла.
демо-видео.txt
\ No newline at end of file +
{{attr:content.iconAlt}}
{{text:content.label}}
\ No newline at end of file diff --git a/templates/pages/home/blocks/footer.html b/templates/pages/home/blocks/footer.html index fac8221..f3d192d 100644 --- a/templates/pages/home/blocks/footer.html +++ b/templates/pages/home/blocks/footer.html @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/templates/pages/home/blocks/pricing-intro.html b/templates/pages/home/blocks/pricing-intro.html index 232f5b0..0184f3c 100644 --- a/templates/pages/home/blocks/pricing-intro.html +++ b/templates/pages/home/blocks/pricing-intro.html @@ -1 +1 @@ -
Тарифы

Коддля No-Code,усиленный ИИ.

Подписки на приложение с
включённым объёмом в каждом тарифе.
Токенная оплата сверх лимитов.
200 Founder мест с фиксированной ценой на первый год.
\ No newline at end of file +
{{text:content.eyebrow}}

{{text:content.heading.muted}}{{text:content.heading.middle}}{{text:content.heading.main}}

{{html:content.introHtml}}
{{html:content.tokenBillingHtml}}
{{html:content.founderLimitHtml}}
\ No newline at end of file diff --git a/templates/pages/home/blocks/pricing-table.html b/templates/pages/home/blocks/pricing-table.html index 381a1b3..1ab22a7 100644 --- a/templates/pages/home/blocks/pricing-table.html +++ b/templates/pages/home/blocks/pricing-table.html @@ -1 +1 @@ -
{{text:content.pricing.eyebrow}}

{{text:content.pricing.heading.muted}}{{text:content.pricing.heading.middle}}{{text:content.pricing.heading.main}}

{{html:content.pricing.introHtml}}
{{html:content.pricing.tokenBillingHtml}}
{{html:content.pricing.founderLimitHtml}}
{{text:content.pricing.windowTitle}}

{{text:content.plans.0.name}}

{{html:content.plans.0.priceHtml}}
{{text:content.plans.0.period}}

{{text:content.plans.1.name}}

{{html:content.plans.1.priceHtml}}
{{text:content.plans.1.period}}
{{text:content.pricing.discountLabel}}

{{text:content.plans.2.name}}

{{html:content.plans.2.priceHtml}}
{{text:content.plans.2.period}}

{{text:content.plans.3.name}}

{{html:content.plans.3.priceHtml}}
{{text:content.plans.3.period}}
Старт
Старт
Старт
Всего доступно
Расширение (20M)
Расширение (10M)
Глубина рассуждения
Базовый интеллект
Рабочее пространство
Объём токенов
Старт
Объём токенов
Объём токенов
Рабочее пространство
Всего доступно
Расширение (20M)
Расширение (10M)
Глубина рассуждения
Базовый интеллект
Рабочее пространство
Базовый интеллект
Глубина рассуждения
Расширение (10M)
Расширение (20M)
Всего доступно
Июнь 2026
Июнь 2026
Июнь 2026
Июнь 2026
Кредиты тарифа
Без ограничений
40 000 включено
12 000 включено
40 000 включено
Рабочее пространство
Без ограничений
Без ограничений
10 проектов
Без ограничений
Базовый интеллект
Все модели
Все быстрые
Все быстрые
Все быстрые
Глубина рассуждения
Полный
Полный
Ограниченный
Полный
Расширение SM 10€
Обновления без лимита
+ 10 000 кредитов
+ 8 000 кредитов
+ 10 000 кредитов
Расширение MD 20€
Обновления без лимита
+ 26 000 кредитов
+ 20 000 кредитов
+ 26 000 кредитов
Всего доступно
40 тестировщиков
200 мест
--
--
{{text:content.pricing.betaButtonLabel}}
{{text:content.pricing.founderButtonLabel}}
{{html:content.pricing.noteHtml}}
{{html:content.pricing.enterpriseNoteHtml}}
публикация-в-один-клик.png
Иконка MOV-файла.
публикация-в-один-клик.png
полноценный-редактор-кода.webp
Иконка MOV-файла.
полноценный-редактор-кода.webp
ИИ-док-режим.jpg
Иконка MOV-файла.
ИИ-док-режим.jpg
глубокая-интеграция-webflow.webp
Иконка MOV-файла.
глубокая-интеграция-webflow.webp
установка-настройка-запуск.jpg
Иконка MOV-файла.
установка-настройка-запуск.jpg
\ No newline at end of file +
{{text:content.pricing.eyebrow}}

{{text:content.pricing.heading.muted}}{{text:content.pricing.heading.middle}}{{text:content.pricing.heading.main}}

{{html:content.pricing.introHtml}}
{{html:content.pricing.tokenBillingHtml}}
{{html:content.pricing.founderLimitHtml}}
{{text:content.pricing.windowTitle}}

{{text:content.plans.0.name}}

{{html:content.plans.0.priceHtml}}
{{text:content.plans.0.period}}

{{text:content.plans.1.name}}

{{html:content.plans.1.priceHtml}}
{{text:content.plans.1.period}}
{{text:content.pricing.discountLabel}}

{{text:content.plans.2.name}}

{{html:content.plans.2.priceHtml}}
{{text:content.plans.2.period}}

{{text:content.plans.3.name}}

{{html:content.plans.3.priceHtml}}
{{text:content.plans.3.period}}
{{html:content.pricingCells.0.textHtml}}
{{html:content.pricingCells.1.textHtml}}
{{html:content.pricingCells.2.textHtml}}
{{html:content.pricingCells.3.textHtml}}
{{html:content.pricingCells.4.textHtml}}
{{html:content.pricingCells.5.textHtml}}
{{html:content.pricingCells.6.textHtml}}
{{html:content.pricingCells.7.textHtml}}
{{html:content.pricingCells.8.textHtml}}
{{html:content.pricingCells.9.textHtml}}
{{html:content.pricingCells.10.textHtml}}
{{html:content.pricingCells.11.textHtml}}
{{html:content.pricingCells.12.textHtml}}
{{html:content.pricingCells.13.textHtml}}
{{html:content.pricingCells.14.textHtml}}
{{html:content.pricingCells.15.textHtml}}
{{html:content.pricingCells.16.textHtml}}
{{html:content.pricingCells.17.textHtml}}
{{html:content.pricingCells.18.textHtml}}
{{html:content.pricingCells.19.textHtml}}
{{html:content.pricingCells.20.textHtml}}
{{html:content.pricingCells.21.textHtml}}
{{html:content.pricingCells.22.textHtml}}
{{html:content.pricingCells.23.textHtml}}
{{html:content.pricingCells.24.textHtml}}
{{html:content.pricingCells.25.textHtml}}
{{html:content.pricingCells.26.textHtml}}
{{html:content.pricingCells.27.textHtml}}
{{html:content.pricingCells.28.textHtml}}
{{html:content.pricingCells.29.textHtml}}
{{html:content.pricingCells.30.textHtml}}
{{html:content.pricingCells.31.textHtml}}
{{html:content.pricingCells.32.textHtml}}
{{html:content.pricingCells.33.textHtml}}
{{html:content.pricingCells.34.textHtml}}
{{html:content.pricingCells.35.textHtml}}
{{html:content.pricingCells.36.textHtml}}
{{html:content.pricingCells.37.textHtml}}
{{html:content.pricingCells.38.textHtml}}
{{html:content.pricingCells.39.textHtml}}
{{html:content.pricingCells.40.textHtml}}
{{html:content.pricingCells.41.textHtml}}
{{html:content.pricingCells.42.textHtml}}
{{html:content.pricingCells.43.textHtml}}
{{html:content.pricingCells.44.textHtml}}
{{html:content.pricingCells.45.textHtml}}
{{html:content.pricingCells.46.textHtml}}
{{html:content.pricingCells.47.textHtml}}
{{html:content.pricingCells.48.textHtml}}
{{html:content.pricingCells.49.textHtml}}
{{html:content.pricingCells.50.textHtml}}
{{html:content.pricingCells.51.textHtml}}
{{html:content.pricingCells.52.textHtml}}
{{html:content.pricingCells.53.textHtml}}
{{html:content.pricingCells.54.textHtml}}
{{html:content.pricingCells.55.textHtml}}
{{html:content.pricingCells.56.textHtml}}
{{html:content.pricingCells.57.textHtml}}
{{html:content.pricingCells.58.textHtml}}
{{html:content.pricingCells.59.textHtml}}
{{html:content.pricingCells.60.textHtml}}
{{html:content.pricingCells.61.textHtml}}
{{html:content.pricingCells.62.textHtml}}
{{html:content.pricingCells.63.textHtml}}
{{text:content.pricing.betaButtonLabel}}
{{text:content.pricing.founderButtonLabel}}
{{html:content.pricing.noteHtml}}
{{html:content.pricing.enterpriseNoteHtml}}
{{#each content.galleryItems}}
{{text:windowTitle}}
{{attr:imageAlt}}
{{attr:iconAlt}}
{{text:folderLabel}}
{{/each}}
\ No newline at end of file diff --git a/templates/pages/home/blocks/waitlist-files.html b/templates/pages/home/blocks/waitlist-files.html index ae631f1..39d44d5 100644 --- a/templates/pages/home/blocks/waitlist-files.html +++ b/templates/pages/home/blocks/waitlist-files.html @@ -1,4 +1 @@ -
Логотип NODE.DC
Бета-релиз: июль 2026

Ранний доступ

Кастомный код, MCP и ИИ-агенты для Webflow в одном рабочем контуре.

Заявка принята. Спасибо.

Мы скоро свяжемся.

Подать заявку в бету?
Иконка текстового файла.
fff
fff
Иконка текстового файла.
Ergtrr
Ggg
Иконка текстового файла.
Paul
только что нашёл ваш сайт — выглядит отлично! -
Иконка текстового файла.
s
s
Иконка текстового файла.
rkxkr
пока не уверен, но да, интересно
Иконка текстового файла.
Ali Awan
Дайте, пожалуйста, посмотреть продукт!
Иконка текстового файла.
rox del toro
ХОЧУ ДОСТУП
Иконка текстового файла.
Flavio
Привет!
Иконка текстового файла.
Daniel Clydesdale
Мы работаем с Webflow с 2016 года и используем его постоянно. Сейчас внедряем ИИ в процессы, поэтому ваш продукт нам очень интересен. Удачи с запуском!
Иконка текстового файла.
Carter Ogunsola
Для всех разработчиков: я нашёл это очень рано. Уже один из фаворитов.
Иконка текстового файла.
Marin Trajkovski
Здравствуйте, можно получить ранний доступ? Очень хочу протестировать ИИ, это сейчас действительно нужно.
Иконка текстового файла.
Arul
Интересно. Хотелось бы узнать больше.
Иконка текстового файла.
Jeremy
Вау! - -Пожалуйста, пустите меня в бету!
Иконка текстового файла.
Safin
С удовольствием протестировал бы продукт. Выглядит очень интересно.
Иконка текстового файла.
Ilja van Eck
Я теперь первый Founder? Берите деньги и запускайте это.
Иконка текстового файла.
Jordan Gilroy
Я ваш главный фанат
Иконка текстового файла.
hyun
привет
Иконка текстового файла.
kris
тестирую
Иконка текстового файла.
Syed Irfan
Интересно
Иконка текстового файла.
ramyar atlasi
Apm pflege schule Düsseldorf
Иконка текстового файла.
Muhammad Ashar
vv
Иконка текстового файла.
:DD
ka tu nx
Иконка текстового файла.
test
test
Иконка текстового файла.
Filip
Я знаю Fed!
Иконка текстового файла.
Arinbjørn
Пустите меня!
Иконка текстового файла.
Janarthanan
жду
Иконка текстового файла.
Jane Smith
Очень хочу ранний доступ к продукту!
Иконка текстового файла.
Daniel Apro
Привет, сайт огонь.
Иконка текстового файла.
Allonelabs
Нам очень нравится ваш дизайн. Спасибо!
Иконка текстового файла.
nicola romei
G.O.A.T. часто используют как сокращение от Greatest of All Time — «лучший за всё время».
Иконка TXT-файла
fff
.txt
Иконка TXT-файла
Ergtrr
.txt
Иконка TXT-файла
Paul
.txt
Иконка TXT-файла
s
.txt
Иконка TXT-файла
rkxkr
.txt
Иконка TXT-файла
Ali Awan
.txt
Иконка TXT-файла
rox del toro
.txt
Иконка TXT-файла
Flavio
.txt
Иконка TXT-файла
Daniel Clydesdale
.txt
Иконка TXT-файла
Carter Ogunsola
.txt
Иконка TXT-файла
Marin Trajkovski
.txt
Иконка TXT-файла
Arul
.txt
Иконка TXT-файла
Jeremy
.txt
Иконка TXT-файла
Safin
.txt
Иконка TXT-файла
Ilja van Eck
.txt
Иконка TXT-файла
Jordan Gilroy
.txt
Иконка TXT-файла
hyun
.txt
Иконка TXT-файла
kris
.txt
Иконка TXT-файла
Syed Irfan
.txt
Иконка TXT-файла
ramyar atlasi
.txt
Иконка TXT-файла
Muhammad Ashar
.txt
Иконка TXT-файла
:DD
.txt
Иконка TXT-файла
test
.txt
Иконка TXT-файла
Filip
.txt
Иконка TXT-файла
Arinbjørn
.txt
Иконка TXT-файла
Janarthanan
.txt
Иконка TXT-файла
Jane Smith
.txt
Иконка TXT-файла
Daniel Apro
.txt
Иконка TXT-файла
Allonelabs
.txt
Иконка TXT-файла
nicola romei
.txt
\ No newline at end of file +
{{attr:content.app.wordmarkAlt}}
{{text:content.app.release}}

{{text:content.app.heading}}

{{text:content.app.description}}

{{text:content.form.successHeading}}

{{html:content.form.successTextHtml}}

{{text:content.form.betaCtaLabel}}
{{html:content.legalHtml}}
{{#each content.files}}
{{attr:iconAlt}}
{{text:name}}
{{html:bodyHtml}}
{{/each}}
{{#each content.files}}
{{attr:iconAlt}}
{{text:name}}
.txt
{{/each}}
\ No newline at end of file diff --git a/tools/admin-server.mjs b/tools/admin-server.mjs index d90a821..c12c801 100644 --- a/tools/admin-server.mjs +++ b/tools/admin-server.mjs @@ -9,6 +9,7 @@ const repoRoot = join(dirname(fileURLToPath(import.meta.url)), ".."); const port = Number(process.env.PORT || 8090); const host = process.env.HOST || "127.0.0.1"; const pagePath = join(repoRoot, "content", "pages", "home.json"); +const blockTemplatesPath = join(repoRoot, "content", "block-templates", "home.json"); const uploadRoot = join(repoRoot, "assets", "uploads"); const MIME = { @@ -223,6 +224,11 @@ const server = createServer(async (req, res) => { return; } + if (req.method === "GET" && url.pathname === "/api/block-templates/home") { + send(res, 200, await readFile(blockTemplatesPath, "utf8"), "application/json; charset=utf-8"); + return; + } + if (req.method === "PUT" && url.pathname === "/api/page/home") { const body = await readBody(req); const parsed = JSON.parse(body); diff --git a/tools/render-home.mjs b/tools/render-home.mjs index c622ef1..9d7cccd 100644 --- a/tools/render-home.mjs +++ b/tools/render-home.mjs @@ -83,6 +83,18 @@ function renderTemplateTokens(html, block) { }); } +function renderEachBlocks(html, block) { + return html.replace(/\{\{#each\s+([a-zA-Z0-9_.-]+)\s*\}\}([\s\S]*?)\{\{\/each\}\}/g, (_match, path, innerHtml) => { + const items = getByPath(block, path); + + if (!Array.isArray(items)) { + throw new Error(`Each token "${path}" in block "${block.id}" must point to an array`); + } + + return items.map((item) => renderTemplateTokens(innerHtml, item ?? {})).join(""); + }); +} + function scopeDuplicateIds(html, scope) { const ids = [...html.matchAll(/\sid="([^"]+)"/g)].map((match) => match[1]); if (!ids.length) { @@ -112,7 +124,7 @@ async function renderBlock(block, renderCounts) { const renderCount = renderCounts.get(templateName) ?? 0; renderCounts.set(templateName, renderCount + 1); - const html = renderTemplateTokens(await readTemplate(templateName), block); + const html = renderTemplateTokens(renderEachBlocks(await readTemplate(templateName), block), block); if (renderCount === 0 && block.scopeIds !== true) { return html;