Studiov1.1.0

Brand Entities

Complete reference for the brand hierarchy, ownership model, and brand-to-app mapping

Brand Entities

Brand Studio manages all brands through the brand_entities table. Each brand has a slug, display name, owner, and optional parent, forming a hierarchical tree rooted at the global entity.

Brand Hierarchy

global  (Global Brand Defaults)
└── rdc  (Regenerative Development Corporation)
    ├── prt              (Planetary Regenerative Trust)
    ├── life_ai          (Life AI)
    ├── place_fund       (The Place Fund)
    ├── rccs             (Regenerative Capital Credit System)
    ├── zoen             (Zoen)
    ├── keystone_species (Keystone Species Co.)
    └── evergreen_foundry (Evergreen Foundry LLC)

All Brand Entities

SlugDisplay NameTypeOwnerTagline
globalGlobal Brand Defaultsglobal(none)(none)
rdcRegenerative Development CorporationcompanyrdcLife before Profits.
prtPlanetary Regenerative TrustproductrdcLife thrives through regeneration...
life_aiLife AIcompanyrdcMachines handle calculation; humans handle conscience.
place_fundThe Place FundproductrdcWhere places become investable.
rccsRegenerative Capital Credit SystemproductrdcVerification that earns its weight.
zoenZoenproductrdcLiving is zoen.
keystone_speciesKeystone Species Co.productrdc(none)
evergreen_foundryEvergreen Foundry LLCprojectevergreen-foundry(none)

Brand Type Enum

Every brand entity has a brand_type value:

TypeMeaningExample
globalThe single root entity. is_global = true. Cannot be deleted.global
companyA legal entity or operating company.rdc, life_ai
productA product, platform, or service owned by a company.prt, zoen, rccs
projectA time-bound project with its own branding needs.evergreen_foundry

Ownership Model

Every brand (except global) must have an owner_slug pointing to a valid brand_entities row. The database trigger rejects inserts without an owner.

  • owner_slug identifies who controls the brand's tokens and assets.
  • parent_entity_slug defines the inheritance chain for token resolution. A brand inherits tokens from its parent, which in turn inherits from its parent, up to global.

For most brands, the owner and parent are the same entity (rdc). The exception is evergreen_foundry, which is owned by evergreen-foundry (its own entity).

Slug to App Mapping

Each monorepo app is associated with a brand slug. The app loads tokens for that brand via the Brand Studio API or direct Supabase queries.

AppPackageBrand SlugInclude Pattern
apps/prt@regen/prtprtA (Next.js)
apps/rdc@regen/rdcrdcA (Next.js)
apps/rdc-marketing-engine@regen/rdc-marketing-enginerdcA (Next.js)
apps/place-fund@regen/place-fundplace_fundA (Next.js)
apps/lifeai@regen/lifeailife_aiA (Next.js)
apps/rccs-admin@regen/rccs-adminrccsA (Next.js)
apps/regenity@regen/regenityrdcA (Next.js)

Include patterns are defined in the design system global rule. Pattern A fetches tokens server-side via the Brand Studio API and injects CSS variables in the layout.

Querying Brands

List all brands

SELECT slug, display_name, owner_slug, brand_type, is_global, tagline
FROM brand_entities
ORDER BY slug;

Fetch a single brand with its token overrides

const { data: brand } = await supabase
  .from("brand_entities")
  .select("*")
  .eq("slug", "prt")
  .single();
 
const { data: overrides } = await supabase
  .from("brand_token_overrides")
  .select("*")
  .eq("entity_id", brand.id);

Fetch a brand with legacy tables

const { data } = await supabase
  .from("brand_entities")
  .select("*, brand_colors(*), brand_typography(*), brand_spacing(*)")
  .eq("slug", "prt");

Registering a New Brand

New brands require an owner. The database trigger rejects inserts without a valid owner_slug.

INSERT INTO brand_entities (
  slug,
  display_name,
  parent_entity_slug,
  owner_type,
  owner_slug,
  brand_type,
  is_active
) VALUES (
  'my_new_brand',
  'My New Brand',
  'rdc',
  'company',
  'rdc',
  'product',
  true
);

Alternatively, use the New Brand Wizard at /brands/new in Brand Studio. The wizard has three steps:

  1. Identity -- set display_name, slug, tagline, and parent_entity_slug.
  2. Token Source -- choose blank (inherit 100% from global), fork from global (copy all 54 tokens as overrides), or fork from an existing brand (copy that brand's overrides).
  3. Confirm -- creates the brand_entities row and, if forking, bulk-inserts override rows into brand_token_overrides.

Database Schema

brand_entities

ColumnTypeDescription
iduuidPrimary key
slugtextUnique identifier used in URLs and API calls
display_nametextHuman-readable name
taglinetextBrand tagline
parent_entity_slugtextFK to brand_entities.slug for inheritance chain
owner_typetextType of the owning entity
owner_slugtextSlug of the owning brand entity
brand_typetextOne of: global, company, product, project
is_globalbooleanTrue only for the global root entity
is_activebooleanWhether the brand is active
TablePurpose
global_design_tokens54 base tokens inherited by all brands
brand_token_overridesPer-brand delta overrides (Phase 22+)
brand_colorsLegacy per-brand color rows (pre-Phase 22)
brand_typographyLegacy per-brand typography rows
brand_spacingLegacy per-brand spacing rows
brand_table_stylesTable rendering styles per brand
brand_assetsAsset metadata with R2 storage paths
brand_design_docsPer-brand DESIGN.md content for the Voice page

On this page

Brand Entities