Shipseal

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.background and colors.foreground are required. The rest are derived if absent.
  • fonts.*.file optionally points at a TTF, OTF, WOFF or WOFF2 file. WOFF2 works.
  • theme is the default theme. Templates render both, and --themes both emits both.
  • tokens optionally points at a W3C Design Tokens file. Shipseal reads that standard rather than inventing one.

What detection looks at

FieldSources, in order
namepackage.json#name (private roots skipped), README H1, directory name
taglinepackage.json#description, first README paragraph
urlpackage.json#homepage or repository, git remote origin
logologo.svg or logo.png in the root, assets/, assets/brand/, public/, .github/, docs/, static/, branding/, then icon and favicon
colorsTailwind v4 @theme, Tailwind v3 config, CSS variables on :root, html, .light, .dark and [data-theme], then the dominant colour of the logo
fontsfont 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

  1. CLI flags
  2. .shipseal/brand.json
  3. The design tokens file named by tokens
  4. Auto-detection
  5. Built-in defaults