# Brand first, creative second

A product photo and an approximate font are not a brand system. Each brand should have a versioned kit derived from its primary storefront, checked with the customer before campaigns run.

## Working extraction

`scripts/extract_brand_kit.py` runs on Sydney and records public HTML/computed typography roles, stylesheet URLs, exact `@font-face` declarations, served font file provenance/checksums, text and background colours, letter spacing, line height, and visible logo image URLs. It saves structured JSON alongside the captured font assets. This is observable storefront evidence, not a private brand manual or a font licence. Source URLs and capture dates travel with the kit. The extractor accepts `--id`, `--url` and `--families` for another approved primary storefront; the present live extraction is OLIPOP. For example, `python3 scripts/extract_brand_kit.py --id olipop --url https://drinkolipop.com/ --families "windsor|ano"` on Sydney. Family selection is explicit so unrelated widget fonts are not mistaken for the brand.

## OLIPOP: source-verified correction

[Source storefront](https://drinkolipop.com/) · [machine-readable capture](brand-kits/olipop.json), captured 19 October 2026.

The storefront uses **WindsorEF** for its characterful display headlines and **Ano** for navigation/body copy. The captured CSS declares WindsorEF Bold and UltraHeavy, and Ano Regular, Bold and Black. Visible collection headings use WindsorEF at computed weight 800; navigation uses Ano 700. The reference previews now use the captured WindsorEF UltraHeavy face, with Ano supporting type, instead of the earlier Garamond approximation. The badge editor exposes both native families.

Colours vary by product/flavour and placement. The studio's citrus/green badge palette is a curated campaign preset, not a claim that those few colours constitute OLIPOP's complete official palette. Its nutrition stickers are product data, not decorative filler: the observed site has both 9g and 6g fibre contexts. No universal fibre badge is automatically inserted.

## Kit contract for each customer

- Fonts: exact family, role, weight/style, approved font asset, licence/permission status, fallback, and export embedding strategy. No silent substitution. Block native-brand claims until the actual font is mapped and loaded.
- Palette: observed values tied to UI roles; customer-approved campaign palette separately identified. Product/flavour colours must stay faithful.
- Marks: actual authorised logo variants and clear space, favicon and approved monochrome versions. Never regenerate a wordmark with a text font.
- Shapes: configurable standard circles, starbursts, scallops, tickets, pills and soft squares; brand-approved presets can constrain fill, text, stroke, rotation and safe placement.
- Photography: source image, product ID, cutout review, allowed crop/overlap and exact product facts. Separate source pixels from generated settings.
- Tone: headline casing, vocabulary, forbidden claims, legal/product-specific copy, sale requirements and approval owner.
- Version: source URLs, capture time, reviewer, differences from the previous kit and an explicit approved/not-approved state.

Hope & Me retains its approved DM Sans core type. Other existing reference studies still use their concept font mappings; they have not all been certified as native brand matches. Their cached source observations remain research, not approved kits. Extract and approve each kit before presenting new customer work as brand-faithful. Do not silently replace one commercial display face with a vaguely similar serif.

## Composition

Generate physical settings without words. Composite exact product pixels, source-authorised logos, approved native fonts and editable elements afterwards. Reference-guided full photographs remain a separate experiment because packaging and labels can drift. Brand kit version and product facts should be saved with each draft so an update can invalidate stale creative. Keep campaign copy readable when a product crosses a letter edge, and review each output ratio separately.
