Inspiration

Every brand talks to a dozen audiences, but each piece of copy is written by one person with one set of cultural reflexes. "Picture a Seinfeld marathon" lands with a 55-year-old and slides straight past a 22-year-old. "Dinner like a Friday at Olive Garden" means something different in every city.

Spellcheck fixes typos and Grammarly fixes tone, but nothing checks culture. Translation tools change the language, not the references. AI-written copy makes it worse: a model reaches for the most famous reference, not the one this audience actually loves.

Qloo's taste graph can tell, across music, film, TV, brands and places, for a specific audience. So we built the missing tool: a spell-checker for culture.

What it does

Paste copy (or upload a storyboard or a video ad) and pick who it's for. Vernacular:

  1. Finds every cultural reference. Claude extracts every named artist, show, film, brand, place and public figure, with the role it plays in its sentence.
  2. Scores each one on Qloo for that exact audience, defined by taste anchors, an age band, Qloo audience segments and interest tags. Each reference gets a verdict (lands, mixed or misses) and the evidence behind it.
  3. Swaps the weak ones. A Claude agent with Qloo tools finds equivalents the audience over-indexes on, verifies each with the same scoring, and rewrites only the words it needs. Qloo's explainability shows which of the audience's favourites pulled each swap in.

Around that core:

  • Dial Test: an AI voice reads the copy while a live reaction curve swings to each reference's Qloo score as it's spoken. Then hear the swapped version land.
  • Predicted comments: a simulated comment section before you post. Each commenter's favourites come from Qloo for the audience, and their reactions have to match each reference's score.
  • Where it lands: Qloo neighbourhood heatmaps show where an audience lives in a city, and whether each reference's fans live there too. Useful for billboards and geo-targeted runs.
  • Culture Translator: one reference, five audiences. Seinfeld already lands with 55+ classic-rock fans; for Gen Z Latin-pop fans it becomes On My Block.
  • Tour Mode: the same copy against up to five audiences side by side.
  • Real-world scenarios: twelve one-click cases, from a podcast ad read and a radio spot to a Chicago billboard and a Spanish-language promo.
  • Vernacular Anywhere: a Chrome extension that checks culture in any text box.
  • An MCP server with five tools, so any AI agent can check its copy before it publishes.

How we built it

Stack: Next.js 15 (App Router) on Vercel, React 19, TypeScript, Tailwind CSS 4. Claude (claude-opus-5-5) runs through the Anthropic SDK, with structured outputs and the SDK's tool runner. OpenAI gpt-4o-mini-tts and whisper-1 power the voice features, and the MCP server is built on the official TypeScript SDK. Checks stream over server-sent events, so the first verdicts appear in about 7 seconds.

Scoring that means something. Raw Qloo affinity isn't comparable across audiences, so each reference \(r\) is scored in the same Qloo request as a panel \(B\) of about 40 well-known entities of the same type, all for the same audience, and ranked against them:

$$p(r) = 100 \cdot \frac{\left|{\, b \in B : a_b \le a_r \,}\right|}{|B|}$$

where \(a\) is Qloo's affinity for that audience. A reference lands at \(p \ge 65\) and misses below 35. If Qloo's demographic data shows its fans skew away from the audience's age, the verdict drops a step.

Qloo, end to end. /search resolves every reference, with a check that the match plausibly is what was asked for (using Qloo's alternative names). /v2/insights does the rest:

  • scoring with interest, age, audience-segment and tag signals;
  • recommendations with feature.explainability;
  • demographics for age skew;
  • location for local places;
  • heatmaps with Qloo's locality boundaries for the map.

/v2/audiences and /v2/tags turn a plain-language audience into Qloo signals.

An agent with guardrails in its tools. One agent runs per sentence, in parallel. The rules are enforced in the tools, not just the prompt:

  • a swap must come from Qloo in this run;
  • it must verify as landing, or be mixed and clearly above the original;
  • the rewrite must name it and drop the original.

The prompt adds judgment the data can't make: keep references that state facts (credits, venues), and prefer household names when a reference is a yardstick ("funnier than X").

Proof. We built a public benchmark: 8 pieces of ad copy × 5 audiences. Each pair is rewritten by Claude alone (same model, same brief, no Qloo) and by Vernacular, and every final text is graded the same way on Qloo.

Original Claude alone Vernacular
Mean percentile p51 p73 p88
References that miss 49% 24% 4%

Vernacular scored higher in 26 of 40 pairs: +14.4 percentile points on average, with a 95% bootstrap interval of 9.0 to 19.7. A blind judge rated meaning kept at 4.60/5 for Vernacular against 4.65/5 for Claude alone.

Challenges we ran into

  • Affinity isn't comparable across audiences. Our first data test compared raw numbers across audiences and failed. Ranking within an audience against a panel scored in the same request fixed it.
  • Search always answers. Qloo returns its closest match, so a made-up band ("Zorblax Quartet") borrowed Vitamin String Quartet's score, and a TV search for "Bob Ross" returned Bob's Burgers. We added a plausibility check that still accepts real aliases: La Casa de Papel finds Money Heist.
  • Local places need local peers. With a city set, Qloo scores only nearby places, so comparisons against global landmarks came back empty. Places are now ranked among that city's well-known places.
  • Facts aren't references. "From the studio that gave you Jurassic Park" is a claim about the studio, and swapping it would make the ad untrue.
  • Speed and load. One agent for all references took about a minute. One per sentence, in parallel, plus request queuing and Qloo pacing brought a fresh check to about 38 seconds, with five simultaneous checks completing in our load test.

Accomplishments that we're proud of

  • A measurable answer to "would it work without Qloo?": a reproducible benchmark against the strongest baseline we could find, the same model with no Qloo data.
  • A live adversarial suite of 16 cases that all pass: prompt injection inside the copy, made-up names, Spanish copy, misspellings, possessives, Atlanta the show vs the city, and more. Plus 63 unit tests, and CI on every push.
  • Taste data you can feel: hearing a reference miss in the Dial Test, reading the comments it would get, and seeing on a map where its fans live.
  • A complete product: guided tour, real-world scenarios, light and dark themes, zero axe-core accessibility violations on the main pages, and a mobile layout that works.

What we learned

  • Without data, a model repeats the brief. In the benchmark, 36 of Claude alone's references were the very examples we used to describe the audience: Bad Bunny for Bad Bunny fans. Qloo leaves the examples you give it out of its suggestions, so every Vernacular swap is a new name the audience already loves.
  • Popularity isn't recognisability. Qloo rated a little-known film about as popular as Boy Meets World. A yardstick needs a household name, and that judgment belongs to the model.
  • Where fans live isn't what they like. Olive Garden's fans live where Los Angeles' Gen Z Latin-pop fans live, yet it misses on taste. The map is for placement, next to the verdicts, never instead of them.
  • The model writes; Qloo decides. The value is in the verification loop.

What's next for Vernacular: the spell-checker for culture

  • Your audiences, not presets: audiences built from a brand's own customer segments and Qloo's audience data.
  • Where teams write: Google Docs, Figma, CMS integrations, and the extension on the Chrome Web Store.
  • More markets and languages: Spanish copy already works, and Qloo's taste graph is global.
  • A feedback loop: every accepted or rejected swap is a labelled example of what lands with whom, which no general model sees.

Built With

  • anthropic
  • chrome
  • claude
  • github-actions
  • model-context-protocol
  • next.js
  • node.js
  • openai
  • qloo
  • react
  • server-sent-events
  • svg
  • tailwindcss
  • typescript
  • vercel
  • vitest
  • whisper
  • zod
Share this project:

Updates

Submission history