Підготовка контенту платформи Ring
Підготовка контенту платформи Ring
Підготовка контенту платформи Ring
Concepts, value, and typical clone scenarios — less code.
Concepts, value, and typical clone scenarios — less code.
Concepts, value, and typical clone scenarios — less code.
Time estimate: 1–4 hours for branding + feature toggles. Prerequisites: Quick Start completed locally.
Ring clones share one codebase. Customization is config-first (ring-config.json, env, locales), then optional component overrides. The legacy portal layer is removed — the public home is HomeWrapper + HomeContent, not a separate portal app.
ring-config.json (install-time SSOT)Created by ./install.sh or copied from ring-config.template.json. Merged with the template at runtime in lib/ring-config-core.ts (also exposed server-side via 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"
}
}Used for SEO (lib/seo-metadata.ts), JSON-LD, and getSiteBaseUrl().
branding.logo, branding.colors, branding.darkColors, branding.fonts in the template — place assets under public/images/ (see template paths).
Optional env overrides (lib/site-branding.ts):
Toggle modules without deleting code:
Server checks: isFeatureEnabled() in lib/ring-config-core.ts and whitelabel/features.ts. Disable routes in navigation when turning features off.
Install-time AI matcher thresholds live under matcher in ring-config.json (getMatcherInstallDefaults()). Runtime DB overlay may apply for production rings — see AI customization.
sidebar and navigation.links in ring-config.json feed public instance config (getPublicInstanceConfig()). Primary chrome is implemented in:
components/navigation/navigation.tsxcomponents/navigation/desktop-sidebar.tsxcomponents/navigation/bottom-navigation.tsxFor a custom desktop nav variant, follow Whitelabel navigation.
| Layer | File | Role |
|---|---|---|
| Route | app/(public)/[locale]/page.tsx | Static metadata + renders HomeWrapper |
| Layout shell | components/wrappers/home-wrapper.tsx | Responsive grid, right rail, session-aware chrome |
| Hero body | components/common/pages/home.tsx | DaVinci hero, CTAs, feature rotator |
| Copy | locales/{locale}/pages.json → home | Primary hero title, subtitle, features[], right-rail strings |
Do not configure a separate “portal” app or lib/portal-config.ts — that path is deprecated. Marketing home is always HomeWrapper on /.
Edit locales/en/pages.json (mirror uk, ru):
HomeContent reads via useTranslations('pages.home').
HomeRightRail inside home-wrapper.tsx, strings in pages.home.rightRailhome-wrapper.tsx or home.tsx; add paths to .reggie-propagate-exclude.jsonring-config.json hero block remains for clones that read it elsewhere; the flagship home hero is i18n-driven as above.
lib/locale-config.tslocales/{locale}/**/*.json, loaded by lib/i18n.ts@/i18n/routing — never hand-strip locale prefixes in client codeFull guide: Localization.
Protected locale files (often per-clone) are listed in .reggie-propagate-exclude.json — e.g. locales/*/config.json, vendor.json, calculator.json.
Ring uses Tailwind 4 with CSS variables for light/dark (next-themes).
branding.colors / darkColors in ring-config.json (template documents keys aligned to shadcn tokens)public/favicon.ico, public/images/logo-*.svg, apple-touch-icon.pngring-config.json → "theme": { "default": "system" }Avoid editing generated design tokens in unrelated clones — prefer ring-config + env brand overrides.
features.store in ring-config.jsonContract addresses and treasury: env + Token economics. Set tokens.ring in ring-config.json for display metadata.
When pulling updates from ring-greenfood-live (or upstream), protect fork-specific files:
File: .reggie-propagate-exclude.json at repo root.
Branding — logo, favicon, NEXT_PUBLIC_BRAND_NAME, OG image on share previews
Home — / hero matches pages.home in each supported locale
Features — disabled modules 404 or hide from nav; no dead sidebar links
Auth — login/logout, role-gated admin at /admin
Build — npm run build clean; smoke tests if payments enabled
DB_BACKEND_MODE and migration strategy
WayForPay, Stripe, webhooks
Matcher tuning and agent costs
Fork discipline: Config + locales first, component forks second, exclusions before propagation. Your clone should upgrade without merge wars.
Time estimate: 1–4 hours for branding + feature toggles. Prerequisites: Quick Start completed locally.
Ring clones share one codebase. Customization is config-first (ring-config.json, env, locales), then optional component overrides. The legacy portal layer is removed — the public home is HomeWrapper + HomeContent, not a separate portal app.
ring-config.json (install-time SSOT)Created by ./install.sh or copied from ring-config.template.json. Merged with the template at runtime in lib/ring-config-core.ts (also exposed server-side via 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"
}
}Used for SEO (lib/seo-metadata.ts), JSON-LD, and getSiteBaseUrl().
branding.logo, branding.colors, branding.darkColors, branding.fonts in the template — place assets under public/images/ (see template paths).
Optional env overrides (lib/site-branding.ts):
Toggle modules without deleting code:
Server checks: isFeatureEnabled() in lib/ring-config-core.ts and whitelabel/features.ts. Disable routes in navigation when turning features off.
Install-time AI matcher thresholds live under matcher in ring-config.json (getMatcherInstallDefaults()). Runtime DB overlay may apply for production rings — see AI customization.
sidebar and navigation.links in ring-config.json feed public instance config (getPublicInstanceConfig()). Primary chrome is implemented in:
components/navigation/navigation.tsxcomponents/navigation/desktop-sidebar.tsxcomponents/navigation/bottom-navigation.tsxFor a custom desktop nav variant, follow Whitelabel navigation.
| Layer | File | Role |
|---|---|---|
| Route | app/(public)/[locale]/page.tsx | Static metadata + renders HomeWrapper |
| Layout shell | components/wrappers/home-wrapper.tsx | Responsive grid, right rail, session-aware chrome |
| Hero body | components/common/pages/home.tsx | DaVinci hero, CTAs, feature rotator |
| Copy | locales/{locale}/pages.json → home | Primary hero title, subtitle, features[], right-rail strings |
Do not configure a separate “portal” app or lib/portal-config.ts — that path is deprecated. Marketing home is always HomeWrapper on /.
Edit locales/en/pages.json (mirror uk, ru):
HomeContent reads via useTranslations('pages.home').
HomeRightRail inside home-wrapper.tsx, strings in pages.home.rightRailhome-wrapper.tsx or home.tsx; add paths to .reggie-propagate-exclude.jsonring-config.json hero block remains for clones that read it elsewhere; the flagship home hero is i18n-driven as above.
lib/locale-config.tslocales/{locale}/**/*.json, loaded by lib/i18n.ts@/i18n/routing — never hand-strip locale prefixes in client codeFull guide: Localization.
Protected locale files (often per-clone) are listed in .reggie-propagate-exclude.json — e.g. locales/*/config.json, vendor.json, calculator.json.
Ring uses Tailwind 4 with CSS variables for light/dark (next-themes).
branding.colors / darkColors in ring-config.json (template documents keys aligned to shadcn tokens)public/favicon.ico, public/images/logo-*.svg, apple-touch-icon.pngring-config.json → "theme": { "default": "system" }Avoid editing generated design tokens in unrelated clones — prefer ring-config + env brand overrides.
features.store in ring-config.jsonContract addresses and treasury: env + Token economics. Set tokens.ring in ring-config.json for display metadata.
When pulling updates from ring-greenfood-live (or upstream), protect fork-specific files:
File: .reggie-propagate-exclude.json at repo root.
Branding — logo, favicon, NEXT_PUBLIC_BRAND_NAME, OG image on share previews
Home — / hero matches pages.home in each supported locale
Features — disabled modules 404 or hide from nav; no dead sidebar links
Auth — login/logout, role-gated admin at /admin
Build — npm run build clean; smoke tests if payments enabled
DB_BACKEND_MODE and migration strategy
WayForPay, Stripe, webhooks
Matcher tuning and agent costs
Fork discipline: Config + locales first, component forks second, exclusions before propagation. Your clone should upgrade without merge wars.
Time estimate: 1–4 hours for branding + feature toggles. Prerequisites: Quick Start completed locally.
Ring clones share one codebase. Customization is config-first (ring-config.json, env, locales), then optional component overrides. The legacy portal layer is removed — the public home is HomeWrapper + HomeContent, not a separate portal app.
ring-config.json (install-time SSOT)Created by ./install.sh or copied from ring-config.template.json. Merged with the template at runtime in lib/ring-config-core.ts (also exposed server-side via 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"
}
}Used for SEO (lib/seo-metadata.ts), JSON-LD, and getSiteBaseUrl().
branding.logo, branding.colors, branding.darkColors, branding.fonts in the template — place assets under public/images/ (see template paths).
Optional env overrides (lib/site-branding.ts):
Toggle modules without deleting code:
Server checks: isFeatureEnabled() in lib/ring-config-core.ts and whitelabel/features.ts. Disable routes in navigation when turning features off.
Install-time AI matcher thresholds live under matcher in ring-config.json (getMatcherInstallDefaults()). Runtime DB overlay may apply for production rings — see AI customization.
sidebar and navigation.links in ring-config.json feed public instance config (getPublicInstanceConfig()). Primary chrome is implemented in:
components/navigation/navigation.tsxcomponents/navigation/desktop-sidebar.tsxcomponents/navigation/bottom-navigation.tsxFor a custom desktop nav variant, follow Whitelabel navigation.
| Layer | File | Role |
|---|---|---|
| Route | app/(public)/[locale]/page.tsx | Static metadata + renders HomeWrapper |
| Layout shell | components/wrappers/home-wrapper.tsx | Responsive grid, right rail, session-aware chrome |
| Hero body | components/common/pages/home.tsx | DaVinci hero, CTAs, feature rotator |
| Copy | locales/{locale}/pages.json → home | Primary hero title, subtitle, features[], right-rail strings |
Do not configure a separate “portal” app or lib/portal-config.ts — that path is deprecated. Marketing home is always HomeWrapper on /.
Edit locales/en/pages.json (mirror uk, ru):
HomeContent reads via useTranslations('pages.home').
HomeRightRail inside home-wrapper.tsx, strings in pages.home.rightRailhome-wrapper.tsx or home.tsx; add paths to .reggie-propagate-exclude.jsonring-config.json hero block remains for clones that read it elsewhere; the flagship home hero is i18n-driven as above.
lib/locale-config.tslocales/{locale}/**/*.json, loaded by lib/i18n.ts@/i18n/routing — never hand-strip locale prefixes in client codeFull guide: Localization.
Protected locale files (often per-clone) are listed in .reggie-propagate-exclude.json — e.g. locales/*/config.json, vendor.json, calculator.json.
Ring uses Tailwind 4 with CSS variables for light/dark (next-themes).
branding.colors / darkColors in ring-config.json (template documents keys aligned to shadcn tokens)public/favicon.ico, public/images/logo-*.svg, apple-touch-icon.pngring-config.json → "theme": { "default": "system" }Avoid editing generated design tokens in unrelated clones — prefer ring-config + env brand overrides.
features.store in ring-config.jsonContract addresses and treasury: env + Token economics. Set tokens.ring in ring-config.json for display metadata.
When pulling updates from ring-greenfood-live (or upstream), protect fork-specific files:
File: .reggie-propagate-exclude.json at repo root.
Branding — logo, favicon, NEXT_PUBLIC_BRAND_NAME, OG image on share previews
Home — / hero matches pages.home in each supported locale
Features — disabled modules 404 or hide from nav; no dead sidebar links
Auth — login/logout, role-gated admin at /admin
Build — npm run build clean; smoke tests if payments enabled
DB_BACKEND_MODE and migration strategy
WayForPay, Stripe, webhooks
Matcher tuning and agent costs
Fork discipline: Config + locales first, component forks second, exclusions before propagation. Your clone should upgrade without merge wars.
One Ring deployment per organization
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,
"ringToken": true,
"defaultChain": "polygon"
}
}
}
{
"exclude_paths": [
"ring-config.json",
".env.local",
"locales/en/config.json",
"components/wrappers/home-wrapper.tsx"
]
}One Ring deployment per organization
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,
"ringToken": true,
"defaultChain": "polygon"
}
}
}
{
"exclude_paths": [
"ring-config.json",
".env.local",
"locales/en/config.json",
"components/wrappers/home-wrapper.tsx"
]
}One Ring deployment per organization
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,
"ringToken": true,
"defaultChain": "polygon"
}
}
}
{
"exclude_paths": [
"ring-config.json",
".env.local",
"locales/en/config.json",
"components/wrappers/home-wrapper.tsx"
]
}