---
title: "Руководство по кастомизации"
description: "Бренд и конфигурация клона Ring — пресеты ring-config, локали, thin overlay exclusions (v1.7.0 Preset SSOT)"
locale: "ru"
---
# Руководство по кастомизации

> **Info**
> **Оценка времени:** 1–4 часа на брендинг + feature toggles. **Требования:** локально выполнен [Quick Start](/docs/customization/quick-start.md).

Клоны Ring разделяют одну кодовую базу (`ring-platform.org`). Кастомизация — **config-first** (пресеты `ring-config.json`, env, локали). Вертикальные ниши поставляются как **in-repo presets** — не форкайте niche TypeScript в клон. См. [Vertical presets](/docs/customization/vertical-presets.md).

## Карта кастомизации

```mermaid
flowchart TB
  RC[ring-config.json presets]
  ENV[.env.local overrides]
  I18N[locales/ JSON deltas]
  HW[home-wrapper.tsx]
  HC[HomeContent / home.tsx]
  NAV[navigation + sidebar]
  PRE[features/*/presets]
  EX[.reggie-propagate-exclude.json]

  RC -->|productFields entities productBadges| Core[ring-config-core.ts]
  Core -->|getEntityTypes etc| PRE
  ENV -->|NEXT_PUBLIC_BRAND_*| Brand[lib/site-branding.ts]
  I18N -->|pages.home hero copy| HC
  HW -->|layout right rail| Page[app/.../page.tsx]
  HC --> HW
  Core --> NAV
  EX -->|thin overlay only| Reggie[Reggie propagate from platform]
```

## 1. `ring-config.json` (install-time SSOT)

Создаётся `./install.sh` или копируется из `ring-config.template.json`. На runtime мержится с шаблоном в `lib/ring-config-core.ts` (также доступен server-side через `lib/ring-config.ts`).

### Идентичность клона

```json
{
  "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()`.

### Vertical presets (предпочтительнее code forks)

```json
{
  "entities": { "preset": "platform" },
  "productFields": { "preset": "platform" },
  "productBadges": { "preset": "platform" }
}
```

Клоны в стиле Agricultural / GreenFood используют `"agricultural"` для всех трёх. Полный реестр: [Vertical presets](/docs/customization/vertical-presets.md).

### Блок branding

`branding.logo`, `branding.colors`, `branding.darkColors`, `branding.fonts` в шаблоне — положите ассеты в `public/images/` (см. пути в шаблоне).

Опциональные env overrides (`lib/site-branding.ts`):

```env
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
```

### Feature flags

Включайте и выключайте модули без удаления кода:

```json
{
  "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 }
  }
}
```

Проверки на сервере: `isFeatureEnabled()` в `lib/ring-config-core.ts` и `whitelabel/features.ts`. При отключении фич убирайте маршруты из навигации.

### Matcher defaults

Install-time пороги AI matcher живут под `matcher` в `ring-config.json` (`getMatcherInstallDefaults()`). Runtime DB overlay может применяться для production rings — см. [AI customization](/docs/customization/ai-customization.md).

### Метаданные sidebar и navigation

`sidebar` и `navigation.links` в `ring-config.json` питают публичный instance config (`getPublicInstanceConfig()`). Основной chrome реализован в:

- `components/navigation/navigation.tsx`
- `components/navigation/desktop-sidebar.tsx`
- `components/navigation/bottom-navigation.tsx`

Для кастомного варианта desktop nav следуйте [Whitelabel navigation](/docs/development/whitelabel-navigation.md).

## 2. Главная страница (заменяет устаревший portal)

| 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 |

> **Warning**
> Не настраивайте отдельное приложение «portal» или `lib/portal-config.ts` — этот путь устарел. Маркетинговая главная всегда `HomeWrapper` на `/`.

### Кастомизация hero copy (самый быстрый путь)

Отредактируйте `locales/en/pages.json` (зеркала `uk`, `ru`):

```json
{
  "home": {
    "hero": {
      "title": "Your headline",
      "subtitle": "One sentence value prop",
      "features": ["Bullet 1", "Bullet 2"]
    }
  }
}
```

`HomeContent` читает через `useTranslations('pages.home')`.

### Кастомизация layout главной

- **Right rail** (OSS marketplace / CTA Ringdom): `HomeRightRail` внутри `home-wrapper.tsx`, строки в `pages.home.rightRail`
- **Глубже UX** — форкните `home-wrapper.tsx` или `home.tsx`; добавьте пути в `.reggie-propagate-exclude.json`

Блок `hero` в `ring-config.json` остаётся для клонов, которые читают его в другом месте; flagship home hero **ведётся через i18n**, как выше.

## 3. Интернационализация

```env
NEXT_PUBLIC_SUPPORTED_LOCALES=en,uk,ru
NEXT_PUBLIC_DEFAULT_LOCALE=en
```

- SSOT: `lib/locale-config.ts`
- Messages: `locales/{locale}/**/*.json`, загружает `lib/i18n.ts`
- Routing: `@/i18n/routing` — никогда не снимайте locale prefixes вручную в client code

Полное руководство: [Localization](/docs/customization/localization.md).

Защищённые locale-файлы (overlay deltas) перечислены в `.reggie-propagate-exclude.json` — обычно только `locales/*/config.json`, `vendor.json`.

## 4. Тема и визуальная полировка

Ring использует **Tailwind 4** с CSS-переменными для light/dark (`next-themes`).

1. Задайте `branding.colors` / `darkColors` в `ring-config.json` (шаблон документирует ключи, выровненные с токенами shadcn)
2. Замените `public/favicon.ico`, `public/images/logo-*.svg`, `apple-touch-icon.png`
3. Тема по умолчанию: `ring-config.json` → `"theme": { "default": "system" }`

Избегайте правки сгенерированных design tokens в чужих клонах — предпочитайте `ring-config` + env brand overrides.

## 5. Payments и store (уровень клона)

- **PaymentConductor** processors: env vars — [Payment integration](/docs/customization/payment-integration.md)
- **Валюта / налог store:** `features.store` в `ring-config.json`
- **WayForPay / Stripe:** никогда не коммитьте секреты; в production используйте k8s secrets

## 6. Web3 и токены (опционально)

```json
{
  "features": {
    "web3": {
      "enabled": true,
      "nativeToken": true,
      "defaultChain": "solana"
    }
  }
}
```

Адреса контрактов и treasury: env + [Token economics](/docs/customization/token-economics.md). Задайте `tokens.native` в `ring-config.json` для display metadata.

## 7. Propagation Reggie — только thin overlay

**Источник истины:** всегда propagate **из `ring-platform.org`**. Exclude защищает brand/locale overlay — **не** vertical code.

```json
{
  "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/"]
}
```

Файл: `.reggie-propagate-exclude.json` в корне репозитория. **Не** исключайте niche fields, entity catalogs или форки home-wrapper — выбирайте presets. Подробности: [Vertical presets](/docs/customization/vertical-presets.md).

## 8. Чеклист проверки

**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

## Следующие шаги

  
- **[Vertical presets](/docs/customization/vertical-presets.md)** — Ниши живут в platform; выбор через ring-config

  
- **[Database selection](/docs/customization/database-selection.md)** — `DB_BACKEND_MODE` и стратегия миграций

  
- **[Payment integration](/docs/customization/payment-integration.md)** — WayForPay, Stripe, webhooks

  
- **[AI customization](/docs/customization/ai-customization.md)** — Тюнинг matcher и стоимость агентов

  
- **[Quick Start (new clone)](/docs/customization/quick-start.md)** — Один деплой Ring на организацию

  
- **[Token economics](/docs/customization/token-economics.md)** — Контракты RING и membership

  
- **[Architecture](/docs/architecture.md)** — Раскладка системы и backend modes

> **Success**
> **Дисциплина форка:** сначала config + локали, затем форки компонентов, exclusions перед propagation. Клон должен апгрейдиться без merge wars.
