Концепции, ценность и типичные сценарии клонирования — меньше кода.
Концепции, ценность и типичные сценарии клонирования — меньше кода.
Preparing Ring content
Preparing Ring content
Preparing Ring content
Оценка времени: 1–4 часа на брендинг + feature toggles. Требования: локально выполнен Quick Start.
Клоны Ring разделяют одну кодовую базу (ring-platform.org). Кастомизация — config-first (пресеты ring-config.json, env, локали). Вертикальные ниши поставляются как in-repo presets — не форкайте niche TypeScript в клон. См. Vertical presets.
ring-config.json (install-time SSOT)Создаётся ./install.sh или копируется из ring-config.template.json. На runtime мержится с шаблоном в lib/ring-config-core.ts (также доступен server-side через lib/ring-config.ts).
{
"clone": {
"name": "my-ring-clone",
"displayName": "My Platform",
"description": "Regional opportunities network",
"organization": "Your Org",
"contactEmail": "contact@example.com"
},
"domains": {
"production": "https://example.com",
"development": "http://localhost:3000"
},
"platform": {
"baseUrl": "https://example.com"
}
}Используется для SEO (lib/seo-metadata.ts), JSON-LD и getSiteBaseUrl().
{
"entities": { "preset": "platform" },
"productFields": { "preset": "platform" },
"productBadges": { "preset": "platform" }
}Клоны в стиле Agricultural / GreenFood используют "agricultural" для всех трёх. Полный реестр: Vertical presets.
branding.logo, branding.colors, branding.darkColors, branding.fonts в шаблоне — положите ассеты в public/images/ (см. пути в шаблоне).
Опциональные env overrides (lib/site-branding.ts):
Включайте и выключайте модули без удаления кода:
Проверки на сервере: isFeatureEnabled() в lib/ring-config-core.ts и whitelabel/features.ts. При отключении фич убирайте маршруты из навигации.
Install-time пороги AI matcher живут под matcher в ring-config.json (getMatcherInstallDefaults()). Runtime DB overlay может применяться для production rings — см. AI customization.
sidebar и navigation.links в ring-config.json питают публичный instance config (getPublicInstanceConfig()). Основной chrome реализован в:
components/navigation/navigation.tsxcomponents/navigation/desktop-sidebar.tsxcomponents/navigation/bottom-navigation.tsxДля кастомного варианта desktop nav следуйте Whitelabel navigation.
| Layer | File | Role |
|---|---|---|
| Route | app/(public)/[locale]/page.tsx | Static metadata + рендер HomeWrapper |
| Layout shell | components/wrappers/home-wrapper.tsx | Responsive grid, right rail, session-aware chrome |
| Hero body | components/common/pages/home.tsx | DaVinci hero, CTA, feature rotator |
| Copy | locales/{locale}/pages.json → home | Primary hero title, subtitle, features[], строки right-rail |
Не настраивайте отдельное приложение «portal» или lib/portal-config.ts — этот путь устарел. Маркетинговая главная всегда HomeWrapper на /.
Отредактируйте locales/en/pages.json (зеркала uk, ru):
HomeContent читает через useTranslations('pages.home').
HomeRightRail внутри home-wrapper.tsx, строки в pages.home.rightRailhome-wrapper.tsx или home.tsx; добавьте пути в .reggie-propagate-exclude.jsonБлок hero в ring-config.json остаётся для клонов, которые читают его в другом месте; flagship home hero ведётся через i18n, как выше.
lib/locale-config.tslocales/{locale}/**/*.json, загружает lib/i18n.ts@/i18n/routing — никогда не снимайте locale prefixes вручную в client codeПолное руководство: Localization.
Защищённые locale-файлы (overlay deltas) перечислены в .reggie-propagate-exclude.json — обычно только locales/*/config.json, vendor.json.
Ring использует Tailwind 4 с CSS-переменными для light/dark (next-themes).
branding.colors / darkColors в ring-config.json (шаблон документирует ключи, выровненные с токенами shadcn)public/favicon.ico, public/images/logo-*.svg, apple-touch-icon.pngring-config.json → "theme": { "default": "system" }Избегайте правки сгенерированных design tokens в чужих клонах — предпочитайте ring-config + env brand overrides.
features.store в ring-config.jsonАдреса контрактов и treasury: env + Token economics. Задайте tokens.native в ring-config.json для display metadata.
Источник истины: всегда propagate из ring-platform.org. Exclude защищает brand/locale overlay — не vertical code.
Файл: .reggie-propagate-exclude.json в корне репозитория. Не исключайте niche fields, entity catalogs или форки home-wrapper — выбирайте presets. Подробности: Vertical presets.
Branding — logo, favicon, NEXT_PUBLIC_BRAND_NAME, OG image на share previews
Home — hero на / совпадает с pages.home в каждой поддерживаемой локали
Presets — entities / productFields / productBadges соответствуют вертикали
Features — отключённые модули отдают 404 или скрыты из nav; нет мёртвых ссылок в sidebar
Auth — login/logout, role-gated admin на /admin
Build — чистый npm run build; smoke-тесты, если включены payments
Ниши живут в platform; выбор через ring-config
DB_BACKEND_MODE и стратегия миграций
WayForPay, Stripe, webhooks
Тюнинг matcher и стоимость агентов
Дисциплина форка: сначала config + локали, затем форки компонентов, exclusions перед propagation. Клон должен апгрейдиться без merge wars.
Оценка времени: 1–4 часа на брендинг + feature toggles. Требования: локально выполнен Quick Start.
Клоны Ring разделяют одну кодовую базу (ring-platform.org). Кастомизация — config-first (пресеты ring-config.json, env, локали). Вертикальные ниши поставляются как in-repo presets — не форкайте niche TypeScript в клон. См. Vertical presets.
ring-config.json (install-time SSOT)Создаётся ./install.sh или копируется из ring-config.template.json. На runtime мержится с шаблоном в lib/ring-config-core.ts (также доступен server-side через lib/ring-config.ts).
{
"clone": {
"name": "my-ring-clone",
"displayName": "My Platform",
"description": "Regional opportunities network",
"organization": "Your Org",
"contactEmail": "contact@example.com"
},
"domains": {
"production": "https://example.com",
"development": "http://localhost:3000"
},
"platform": {
"baseUrl": "https://example.com"
}
}Используется для SEO (lib/seo-metadata.ts), JSON-LD и getSiteBaseUrl().
{
"entities": { "preset": "platform" },
"productFields": { "preset": "platform" },
"productBadges": { "preset": "platform" }
}Клоны в стиле Agricultural / GreenFood используют "agricultural" для всех трёх. Полный реестр: Vertical presets.
branding.logo, branding.colors, branding.darkColors, branding.fonts в шаблоне — положите ассеты в public/images/ (см. пути в шаблоне).
Опциональные env overrides (lib/site-branding.ts):
Включайте и выключайте модули без удаления кода:
Проверки на сервере: isFeatureEnabled() в lib/ring-config-core.ts и whitelabel/features.ts. При отключении фич убирайте маршруты из навигации.
Install-time пороги AI matcher живут под matcher в ring-config.json (getMatcherInstallDefaults()). Runtime DB overlay может применяться для production rings — см. AI customization.
sidebar и navigation.links в ring-config.json питают публичный instance config (getPublicInstanceConfig()). Основной chrome реализован в:
components/navigation/navigation.tsxcomponents/navigation/desktop-sidebar.tsxcomponents/navigation/bottom-navigation.tsxДля кастомного варианта desktop nav следуйте Whitelabel navigation.
| Layer | File | Role |
|---|---|---|
| Route | app/(public)/[locale]/page.tsx | Static metadata + рендер HomeWrapper |
| Layout shell | components/wrappers/home-wrapper.tsx | Responsive grid, right rail, session-aware chrome |
| Hero body | components/common/pages/home.tsx | DaVinci hero, CTA, feature rotator |
| Copy | locales/{locale}/pages.json → home | Primary hero title, subtitle, features[], строки right-rail |
Не настраивайте отдельное приложение «portal» или lib/portal-config.ts — этот путь устарел. Маркетинговая главная всегда HomeWrapper на /.
Отредактируйте locales/en/pages.json (зеркала uk, ru):
HomeContent читает через useTranslations('pages.home').
HomeRightRail внутри home-wrapper.tsx, строки в pages.home.rightRailhome-wrapper.tsx или home.tsx; добавьте пути в .reggie-propagate-exclude.jsonБлок hero в ring-config.json остаётся для клонов, которые читают его в другом месте; flagship home hero ведётся через i18n, как выше.
lib/locale-config.tslocales/{locale}/**/*.json, загружает lib/i18n.ts@/i18n/routing — никогда не снимайте locale prefixes вручную в client codeПолное руководство: Localization.
Защищённые locale-файлы (overlay deltas) перечислены в .reggie-propagate-exclude.json — обычно только locales/*/config.json, vendor.json.
Ring использует Tailwind 4 с CSS-переменными для light/dark (next-themes).
branding.colors / darkColors в ring-config.json (шаблон документирует ключи, выровненные с токенами shadcn)public/favicon.ico, public/images/logo-*.svg, apple-touch-icon.pngring-config.json → "theme": { "default": "system" }Избегайте правки сгенерированных design tokens в чужих клонах — предпочитайте ring-config + env brand overrides.
features.store в ring-config.jsonАдреса контрактов и treasury: env + Token economics. Задайте tokens.native в ring-config.json для display metadata.
Источник истины: всегда propagate из ring-platform.org. Exclude защищает brand/locale overlay — не vertical code.
Файл: .reggie-propagate-exclude.json в корне репозитория. Не исключайте niche fields, entity catalogs или форки home-wrapper — выбирайте presets. Подробности: Vertical presets.
Branding — logo, favicon, NEXT_PUBLIC_BRAND_NAME, OG image на share previews
Home — hero на / совпадает с pages.home в каждой поддерживаемой локали
Presets — entities / productFields / productBadges соответствуют вертикали
Features — отключённые модули отдают 404 или скрыты из nav; нет мёртвых ссылок в sidebar
Auth — login/logout, role-gated admin на /admin
Build — чистый npm run build; smoke-тесты, если включены payments
Ниши живут в platform; выбор через ring-config
DB_BACKEND_MODE и стратегия миграций
WayForPay, Stripe, webhooks
Тюнинг matcher и стоимость агентов
Дисциплина форка: сначала config + локали, затем форки компонентов, exclusions перед propagation. Клон должен апгрейдиться без merge wars.
Оценка времени: 1–4 часа на брендинг + feature toggles. Требования: локально выполнен Quick Start.
Клоны Ring разделяют одну кодовую базу (ring-platform.org). Кастомизация — config-first (пресеты ring-config.json, env, локали). Вертикальные ниши поставляются как in-repo presets — не форкайте niche TypeScript в клон. См. Vertical presets.
ring-config.json (install-time SSOT)Создаётся ./install.sh или копируется из ring-config.template.json. На runtime мержится с шаблоном в lib/ring-config-core.ts (также доступен server-side через lib/ring-config.ts).
{
"clone": {
"name": "my-ring-clone",
"displayName": "My Platform",
"description": "Regional opportunities network",
"organization": "Your Org",
"contactEmail": "contact@example.com"
},
"domains": {
"production": "https://example.com",
"development": "http://localhost:3000"
},
"platform": {
"baseUrl": "https://example.com"
}
}Используется для SEO (lib/seo-metadata.ts), JSON-LD и getSiteBaseUrl().
{
"entities": { "preset": "platform" },
"productFields": { "preset": "platform" },
"productBadges": { "preset": "platform" }
}Клоны в стиле Agricultural / GreenFood используют "agricultural" для всех трёх. Полный реестр: Vertical presets.
branding.logo, branding.colors, branding.darkColors, branding.fonts в шаблоне — положите ассеты в public/images/ (см. пути в шаблоне).
Опциональные env overrides (lib/site-branding.ts):
Включайте и выключайте модули без удаления кода:
Проверки на сервере: isFeatureEnabled() в lib/ring-config-core.ts и whitelabel/features.ts. При отключении фич убирайте маршруты из навигации.
Install-time пороги AI matcher живут под matcher в ring-config.json (getMatcherInstallDefaults()). Runtime DB overlay может применяться для production rings — см. AI customization.
sidebar и navigation.links в ring-config.json питают публичный instance config (getPublicInstanceConfig()). Основной chrome реализован в:
components/navigation/navigation.tsxcomponents/navigation/desktop-sidebar.tsxcomponents/navigation/bottom-navigation.tsxДля кастомного варианта desktop nav следуйте Whitelabel navigation.
| Layer | File | Role |
|---|---|---|
| Route | app/(public)/[locale]/page.tsx | Static metadata + рендер HomeWrapper |
| Layout shell | components/wrappers/home-wrapper.tsx | Responsive grid, right rail, session-aware chrome |
| Hero body | components/common/pages/home.tsx | DaVinci hero, CTA, feature rotator |
| Copy | locales/{locale}/pages.json → home | Primary hero title, subtitle, features[], строки right-rail |
Не настраивайте отдельное приложение «portal» или lib/portal-config.ts — этот путь устарел. Маркетинговая главная всегда HomeWrapper на /.
Отредактируйте locales/en/pages.json (зеркала uk, ru):
HomeContent читает через useTranslations('pages.home').
HomeRightRail внутри home-wrapper.tsx, строки в pages.home.rightRailhome-wrapper.tsx или home.tsx; добавьте пути в .reggie-propagate-exclude.jsonБлок hero в ring-config.json остаётся для клонов, которые читают его в другом месте; flagship home hero ведётся через i18n, как выше.
lib/locale-config.tslocales/{locale}/**/*.json, загружает lib/i18n.ts@/i18n/routing — никогда не снимайте locale prefixes вручную в client codeПолное руководство: Localization.
Защищённые locale-файлы (overlay deltas) перечислены в .reggie-propagate-exclude.json — обычно только locales/*/config.json, vendor.json.
Ring использует Tailwind 4 с CSS-переменными для light/dark (next-themes).
branding.colors / darkColors в ring-config.json (шаблон документирует ключи, выровненные с токенами shadcn)public/favicon.ico, public/images/logo-*.svg, apple-touch-icon.pngring-config.json → "theme": { "default": "system" }Избегайте правки сгенерированных design tokens в чужих клонах — предпочитайте ring-config + env brand overrides.
features.store в ring-config.jsonАдреса контрактов и treasury: env + Token economics. Задайте tokens.native в ring-config.json для display metadata.
Источник истины: всегда propagate из ring-platform.org. Exclude защищает brand/locale overlay — не vertical code.
Файл: .reggie-propagate-exclude.json в корне репозитория. Не исключайте niche fields, entity catalogs или форки home-wrapper — выбирайте presets. Подробности: Vertical presets.
Branding — logo, favicon, NEXT_PUBLIC_BRAND_NAME, OG image на share previews
Home — hero на / совпадает с pages.home в каждой поддерживаемой локали
Presets — entities / productFields / productBadges соответствуют вертикали
Features — отключённые модули отдают 404 или скрыты из nav; нет мёртвых ссылок в sidebar
Auth — login/logout, role-gated admin на /admin
Build — чистый npm run build; smoke-тесты, если включены payments
Ниши живут в platform; выбор через ring-config
DB_BACKEND_MODE и стратегия миграций
WayForPay, Stripe, webhooks
Тюнинг matcher и стоимость агентов
Дисциплина форка: сначала config + локали, затем форки компонентов, exclusions перед propagation. Клон должен апгрейдиться без merge wars.
Один деплой Ring на организацию
NEXT_PUBLIC_BRAND_NAME=My Platform
NEXT_PUBLIC_BRAND_TAGLINE=Your tagline
NEXT_PUBLIC_BRAND_LOGO=/images/logo-light.svg
NEXT_PUBLIC_BRAND_OG_IMAGE=/og-image.png
{
"features": {
"entities": { "enabled": true },
"opportunities": { "enabled": true, "types": ["offer", "request"] },
"store": { "enabled": true, "multiVendor": true },
"web3": { "enabled": false },
"ai": { "enabled": true, "matcher": true },
"messaging": { "enabled": true }
}
}
{
"home": {
"hero": {
"title": "Your headline",
"subtitle": "One sentence value prop",
"features": ["Bullet 1", "Bullet 2"]
}
}
}
NEXT_PUBLIC_SUPPORTED_LOCALES=en,uk,ru
NEXT_PUBLIC_DEFAULT_LOCALE=en
{
"features": {
"web3": {
"enabled": true,
"nativeToken": true,
"defaultChain": "solana"
}
}
}
{
"customized_files": [
"ring-config.json",
"public/logo.svg",
"public/logo-light.svg",
"public/logo-dark.svg",
"public/favicon.ico",
"locales/en/config.json",
"locales/uk/config.json",
"locales/ru/config.json",
"locales/en/vendor.json",
"locales/uk/vendor.json",
"locales/ru/vendor.json"
],
"customized_directories": ["public/branding/"]
}Один деплой Ring на организацию
NEXT_PUBLIC_BRAND_NAME=My Platform
NEXT_PUBLIC_BRAND_TAGLINE=Your tagline
NEXT_PUBLIC_BRAND_LOGO=/images/logo-light.svg
NEXT_PUBLIC_BRAND_OG_IMAGE=/og-image.png
{
"features": {
"entities": { "enabled": true },
"opportunities": { "enabled": true, "types": ["offer", "request"] },
"store": { "enabled": true, "multiVendor": true },
"web3": { "enabled": false },
"ai": { "enabled": true, "matcher": true },
"messaging": { "enabled": true }
}
}
{
"home": {
"hero": {
"title": "Your headline",
"subtitle": "One sentence value prop",
"features": ["Bullet 1", "Bullet 2"]
}
}
}
NEXT_PUBLIC_SUPPORTED_LOCALES=en,uk,ru
NEXT_PUBLIC_DEFAULT_LOCALE=en
{
"features": {
"web3": {
"enabled": true,
"nativeToken": true,
"defaultChain": "solana"
}
}
}
{
"customized_files": [
"ring-config.json",
"public/logo.svg",
"public/logo-light.svg",
"public/logo-dark.svg",
"public/favicon.ico",
"locales/en/config.json",
"locales/uk/config.json",
"locales/ru/config.json",
"locales/en/vendor.json",
"locales/uk/vendor.json",
"locales/ru/vendor.json"
],
"customized_directories": ["public/branding/"]
}Один деплой Ring на организацию
NEXT_PUBLIC_BRAND_NAME=My Platform
NEXT_PUBLIC_BRAND_TAGLINE=Your tagline
NEXT_PUBLIC_BRAND_LOGO=/images/logo-light.svg
NEXT_PUBLIC_BRAND_OG_IMAGE=/og-image.png
{
"features": {
"entities": { "enabled": true },
"opportunities": { "enabled": true, "types": ["offer", "request"] },
"store": { "enabled": true, "multiVendor": true },
"web3": { "enabled": false },
"ai": { "enabled": true, "matcher": true },
"messaging": { "enabled": true }
}
}
{
"home": {
"hero": {
"title": "Your headline",
"subtitle": "One sentence value prop",
"features": ["Bullet 1", "Bullet 2"]
}
}
}
NEXT_PUBLIC_SUPPORTED_LOCALES=en,uk,ru
NEXT_PUBLIC_DEFAULT_LOCALE=en
{
"features": {
"web3": {
"enabled": true,
"nativeToken": true,
"defaultChain": "solana"
}
}
}
{
"customized_files": [
"ring-config.json",
"public/logo.svg",
"public/logo-light.svg",
"public/logo-dark.svg",
"public/favicon.ico",
"locales/en/config.json",
"locales/uk/config.json",
"locales/ru/config.json",
"locales/en/vendor.json",
"locales/uk/vendor.json",
"locales/ru/vendor.json"
],
"customized_directories": ["public/branding/"]
}