---
title: Branding
description: One place that knows what the product is called.
type: reference
related:
- /en/docs/packages/design-system/colors
- /en/docs/packages/seo/metadata
---
# Branding
`@kreogen/branding` is a single frozen object. It exists because "Acme Inc" was
hardcoded in the dashboard title, the unauthenticated layout, the marketing
header and the marketing footer — and the legal entity appeared nowhere at all,
so renaming a client project meant grepping for a string and hoping.
```ts
import { branding } from '@kreogen/branding';
{branding.name}
```
## What it holds
| Field | Used for |
| -------------- | --------------------------------------------------------- |
| `name` | Navigation, page titles, email signatures |
| `legalName` | The legal entity, for terms, privacy and copyright lines |
| `description` | Default meta description and `og:description` |
| `supportEmail` | Where support mail goes; the address legal pages point at |
| `url` | Canonical marketing origin |
| `social` | `x`, `github`, `linkedin` |
`name` and `legalName` are separate on purpose. "Acme" belongs in a nav bar;
"Acme, Inc." belongs in a copyright line and a terms of service, and a project
that conflates them ends up with a legal document naming a brand rather than a
company.
## Why it is not environment variables
These are build-time constants that differ per project, not per deployment. A
missing environment variable would render an empty page title in production; a
missing field here fails a typecheck.
`url` is the exception that proves the rule. It is the canonical marketing
origin, which is fixed for the project — the app, API and docs origins differ
per environment and live in `NEXT_PUBLIC_*_URL` instead, because one Docker
image has to serve staging and production.
## Rebranding a project
Edit `packages/branding/index.ts`, then the
[brand ramp](/en/docs/packages/design-system/colors#rebranding) in
`globals.css`. Between them that is the name and the colours; the rest of the
repository reads from both.
Anything user-visible and product-specific belongs here. If you find yourself
writing the product's name into a component, that is the signal to add a field
instead.
---
For a semantic overview of all documentation, see [/sitemap.md](/sitemap.md)
For an index of all available documentation, see [/llms.txt](/llms.txt)