thehonestape/brand-voice-spec
Brand Voice Spec A machine-readable format for steering an LLM toward a specific brand voice, with a complete worked example. The point is not the example brand. The point is the method: treat brand voice as data a model can load and enforce, and as a living artifact that learns from its own corrections. Most brand voice lives in a slide deck no model can read. When an LLM writes copy, it falls back to the median of its training data: hedging, buzzwords, passive voice, the… See the full description on the dataset page: https://huggingface.co/datasets/thehonestape/brand-voice-spec.
Brand Voice Spec
A machine-readable format for steering an LLM toward a specific brand voice, with a complete worked example. The point is not the example brand. The point is the method: treat brand voice as data a model can load and enforce, and as a living artifact that learns from its own corrections.
Most brand voice lives in a slide deck no model can read. When an LLM writes copy, it falls back to the median of its training data: hedging, buzzwords, passive voice, the corporate gray. This spec is the inverse. The same file a human maintains is the file that conditions the model.
The worked example is a fictional brand, Lantern Coffee, an independent roaster. It is invented. Fork it, delete the contents, and write your own.
What's in here
The canonical artifact is `voice.json`. `SCHEMA.md` documents the format. Everything under data/ is derived from voice.json and loads in the dataset viewer.
Two ideas worth stealing
Registers. One brand can hold more than one voice. Lantern has a cafe register (guest-facing, warm, plain) and a trade register (wholesale, precise, price-transparent). Same brand, different surface, different voice. Every example and prompt is tagged with the register it belongs to.
The loop. Voice rots when it's written once and frozen. Here, a wrong draft becomes a note in voiceQueue, a periodic sweep promotes adopted notes into guidelines, the revision bumps, and the changelog records what changed and why. changelog joins back to the originating correction, so you can read the whole voice as cause and effect:
{"revision": 2, "change": "Added 'Talk like a regular, not a sommelier' after repeated sommelier-speak in menu drafts.",
"derived_from_rule": "Ban tasting poetry. Concrete anchors only.",
"derived_from_why": "'Notes of bergamot dance across the palate' kept reappearing in menu copy."}The rule is not an opinion someone had in a meeting. It is the scar from a specific mistake.
Load it
from datasets import load_dataset
rules = load_dataset("thehonestape/brand-voice-spec", "rules")
pairs = load_dataset("thehonestape/brand-voice-spec", "preference_pairs")Uses
- Few-shot conditioning. Drop
rules+bannedTerms+ a handful ofpreference_pairsinto a system prompt. - Preference tuning. The pairs are ready for DPO or reward-model experiments on style.
- Voice-lint evaluation. Score generated copy against
bannedTermsand the rules. - A template. Fork
voice.json, write your own brand, regenerate the data.
Provenance and license
Built by Abe Garcia at Workhorse, an independent design studio. The format is the one we use in production to keep AI-written copy on-brand across every surface. Lantern Coffee is fictional. Released under CC BY 4.0.
