Backstory
Every report wore our orange
- The Strive Studio report skill hardcoded our orange, slate and Inter, so every customer’s report looked like ours.
- Then a client said the artifacts they’d made with Claude looked better. On checking, we felt their brand was the gap.
The bet
Extract once, read anywhere
- Nothing about a brand is specific to reports. So we read it off the customer’s website at onboarding, and keep it as one file in the knowledge base.
- Reports read it first. Chat, artifacts or emails can read the same file the day they need it.
Their website
read once, at onboarding
Knowledge base
brand/design.md
tokens + usage rules
- Reports live the first reader
- Chat answers
- Chat artifacts
- Emails and decks
ready whenever they ask
Design call · extraction
Let the model read, then check it
- Parsing CSS finds hundreds of hex codes, and can’t tell a button from a border. A model can.
- So one LLM call reads the raw page, handed a count of every colour on it, so the real brand colour can’t be missed.
CSS heuristics
- Hundreds of hex codes per page
- A button fill looks like a border
- No idea how the brand uses them
vs
One LLM call · anchoredthe call
- Reads the page and its stylesheets
- Weighs the logo and CTAs over the chrome
- Writes how the brand uses each colour
Trust
A guessed colour never ships
- The model says how sure it is, and every colour it returns must exist on the page and hold up on white.
- If any check says no, nothing is written. The customer keeps our default rather than a wrong brand.
- Shape A strict schema parsed, then validated again
- Confidence Is it sure? a low-confidence primary is thrown away
- Grounding Is it on the page? every colour checked against the count
- Contrast Does it hold on white? 2.2:1, or a darker shade, or nothing
any check says no: nothing is written, and our default stays
Design call · delivery
A file, not a prompt
- I first composed the report skill per customer. The copy in the sandbox and the one we served drifted apart.
- So the skill stays one static document that tells the agent to read the kit like any other file, with a default for every gap.
Composed per customer
- Tokens baked into the prompt at load
- The sandbox copy says something else
- A function’s output, hard to review
vs
A static skill reads the filethe fix
- One document, the same for everyone
- The kit read like any other file
- A default for every gap
Design call · the page
Your brand, editable
- The kit has its own knowledge-base page. Every token is an inline row, beside a live report preview that repaints as you edit.
- The preview runs the same checks as the server, so what you see is what a report gets. A refresh never overwrites your edits without asking.
Colours
-
Primary
#4F46E5 -
Secondary
#0EA5E9 -
Accent
–
empty -
Background
#FAFAFF -
Text
#1E1B4B
Type and shape
- Heading font Manrope
- Body font Inter
- Corner radius lg
- Theme Light
Live preview
● Live · updates as you edit
the preview runs the server’s checks
Misses & lessons
What the first brands taught us
-
MissSliced the page before reading it. One site sent the model zero colours, and it invented a jade green for a blue brand.
LessonMeasure the whole page, then trim. Hand the model the evidence, not a prefix.
-
MissComposed the report skill per customer. The copy in the sandbox and the one we served drifted apart.
LessonContext belongs in a file the agent reads. Keep the prompt one reviewable document.
-
MissLet our server fetch stylesheet links that the scraped page supplied.
LessonA page-supplied URL is untrusted. Fetch it behind the app boundary, through the same safety check.
-
MissGave the feature its own router, status endpoint and environment flag.
LessonMake it the platform’s, not the feature’s. One seed route, status on the file, safety in the seeder.
Read the brand once, at onboarding. Every surface that comes after gets it for free.Deep dive · ~10 min read Read once, used everywhere: a brand kit for every Strive customer Reading a brand off a website, the checks that keep a guessed colour out, why it’s a file and not a prompt, and the page that makes it yours. Read the full story