# Brand profile schema

Every firm using this skill needs a `brand-profile.json` — a single file with the firm's name, contact details, palette, and type system. The deck builder reads this file on every run and uses it to brand the output. This is what makes the skill work for any tenant rep firm, not just one.

## Where the profile lives

The profile is **outside the skill** so different firms can use the same skill with their own branding. Recommended locations:

- A dedicated folder per firm: `<firm-folder>/brand-profile.json`
- Or alongside each report: `<report-root>/brand-profile.json`

The skill orchestration (see `SKILL.md`) checks both `<report-root>/brand-profile.json` and `<report-root>/../brand-profile.json` before falling back to prompting the user.

## Schema

```json
{
  "firm": {
    "name": "Veracity Commercial Partners",
    "address_line1": "220 Montgomery Street, Suite 430",
    "address_line2": "San Francisco, CA 94104",
    "url": "veracitycommercial.com",
    "tagline_line1": "Tenant representation.",
    "tagline_line2": "All day. Every day."
  },
  "logo": {
    "main": "VERACITY",
    "sub": "COMMERCIAL PARTNERS"
  },
  "service_label": "TENANT REPRESENTATION",
  "palette": {
    "ink": "#1A1A1A",
    "accent": "#D9540F",
    "stone": "#E5E0D8",
    "tile_bg": "#F2EEE5",
    "cream_text": "#C8C0B0",
    "grey_m": "#9E9E9E",
    "grey_l": "#D8D2C5",
    "divider_dark": "#3A3A3A"
  },
  "fonts": {
    "serif": "Playfair Display",
    "sans": "Inter",
    "mono": "JetBrains Mono"
  },
  "copy": {
    "matrix_subtitle": "MATRIX · THE SHORT LIST",
    "report_eyebrow": "SPACE REPORT"
  }
}
```

## Field notes

- **firm.tagline_line1 / line2** — two lines that appear in the closing slide's bottom-right, in italic display serif. If you only have one line, leave `tagline_line2` empty.
- **logo.main / logo.sub** — the wordmark. The skill renders these in a small white card on every slide. If you have a graphical logo PNG, drop it at `<report-root>/logo.png` and the deck builder will use it instead of the text card.
- **service_label** — your firm's primary service tagline (e.g. "TENANT REPRESENTATION," "ADVISORY & BROKERAGE"). Used as the eyebrow on the matrix slide and in the footer of every interior slide.
- **palette** — all eight colors are required. The two that matter most for differentiation are `ink` (background of dark slides) and `accent` (italic-accent words, badges, vertical rules). Stone, tile_bg, cream_text, grey_m, grey_l, and divider_dark are utility colors and most firms will use sensible defaults close to the example.
- **fonts** — must be installed on the machine that opens the .pptx. The deck builder writes the font names verbatim; if a font isn't installed, PowerPoint substitutes. Recommended pairing: a high-contrast display serif + a clean body sans + a mono for small-caps labels.
- **copy.matrix_subtitle / copy.report_eyebrow** — small editorial details. Keep them short and uppercase.

## Default behavior when fields are missing

The skill's defaults match the example deck (Veracity colors and fonts). If a field is absent from a profile, the default is used and the skill warns once. Required fields with no fallback: `firm.name`, `firm.address_line1`, `firm.url`, `logo.main`.

## How to set one up

Run `python scripts/setup_brand.py` interactively — it walks through each field, validates the JSON, and writes the profile. Or copy `assets/brand-profile.example.json` and edit it directly.
