Brand kit
.shipseal/brand.json is written by init and committed to your repository. It is meant to be edited by hand afterwards.
{
"version": 1,
"name": "PDFx",
"tagline": "React PDF components, shadcn style",
"url": "https://github.com/akii09/pdfx",
"logo": { "light": "./assets/logo.svg", "dark": "./assets/logo-dark.svg" },
"colors": {
"background": "#0b0b0c",
"foreground": "#fafafa",
"muted": "#a1a1aa",
"primary": "#ff4d4d",
"accent": "#fbbf24"
},
"fonts": {
"heading": { "family": "Geist", "weight": 700 },
"body": { "family": "Geist", "weight": 400 },
"mono": { "family": "Geist Mono", "weight": 400 }
},
"radius": 16,
"theme": "dark",
"style": "minimal",
"tokens": null
}Fields
colors.backgroundandcolors.foregroundare required. The rest are derived if absent.fonts.*.fileoptionally points at a TTF, OTF, WOFF or WOFF2 file. WOFF2 works.themeis the default theme. Templates render both, and--themes bothemits both.tokensoptionally points at a W3C Design Tokens file. Shipseal reads that standard rather than inventing one.
What detection looks at
| Field | Sources, in order |
|---|---|
name | package.json#name (private roots skipped), README H1, directory name |
tagline | package.json#description, first README paragraph |
url | package.json#homepage or repository, git remote origin |
logo | logo.svg or logo.png in the root, assets/, assets/brand/, public/, .github/, docs/, static/, branding/, then icon and favicon |
colors | Tailwind v4 @theme, Tailwind v3 config, CSS variables on :root, html, .light, .dark and [data-theme], then the dominant colour of the logo |
fonts | font files in public/fonts or assets/fonts, otherwise bundled Geist |
Project files are parsed statically. Shipseal never executes your config to read it, so atailwind.config.ts that computes colours at runtime falls back to defaults rather than being run.
Colours it could not find
A default is not your brand. Every colour that falls back to a built-in value is named in the
init output. If you see that note, open brand.json and set those colours yourself.Contrast is checked as well. If a detected foreground fails against the background, Shipseal adjusts it and tells you, rather than shipping text nobody can read.
Precedence
- CLI flags
.shipseal/brand.json- The design tokens file named by
tokens - Auto-detection
- Built-in defaults