Live: https://crossover-henna.vercel.app Repo: https://github.com/esbuilds/crossover (MIT)

What it does

Crossover is for the partnerships lead at a brand, an artist's team or an agency. Type one name and an agent measures in Qloo, step by step, then names who to call first and two backups, with the reason for each. When you have a close rival, it shows where your two audiences split on a US map. Everything lands on a one-page call sheet you forward to your boss or your client before the first call.

Four things set it apart:

  • It makes a call. It doesn't stop at a list of affinities. One name in, one first call out. When taste can't separate the candidates, the page says so instead of ordering them by decimals.
  • It reads taste both ways. Each Qloo call ranks from one side: how much your fans like a candidate. Crossover also asks the other side, where each candidate's fans rank you. For Allbirds, Bombas fans rank Allbirds first; the other seven rank it 9th to 31st or leave it out of their top 50.
  • It was tested on real deals, and every test is public. On 23 real collaborations, the real partner landed in the top three 17 times, where popularity alone would land it about 10.6 times. I also attacked my own checker with 230 altered answers, and it caught 219. What the tests didn't show is on /audit too.
  • It runs on real Qloo data, live. Every number on the page came back from Qloo. Names already asked replay from the cache, so you can open them without waiting.

Try it in 20 seconds

The front page opens on a question already asked: who should Allbirds call first? Before each step the agent says in one sentence what it needs to know, then measures it. It finds Allbirds' closest rival, Outdoor Voices, and maps where the two audiences split: Allbirds leads in San Francisco, New York and Denver, Outdoor Voices in Austin, Seattle and Dallas.

Then it picks eight candidates by a fixed rule and scores them under Allbirds' fans. By taste alone all eight sit within 0.05 (Bombas 0.94, Warby Parker and ClassPass 0.93), so taste can't order them. One fact separates Bombas, and the card shows it under "First call: Bombas": Bombas fans rank Allbirds first. A slopegraph draws both directions, one line per candidate, and Bombas is the only line that climbs.

The both-ways read doesn't always decide. Click "An artist: Mt. Joy" for the other route. There's no same-field rival, so the agent works from the fans' top 50. Its first call is Outdoor Voices, whose fans rank Mt. Joy only 26th, and the card calls it the agent's pick, not a measured lead. Read from the seller's side, Allbirds fans rank Mt. Joy 4th. When the second direction can't separate the tie, Crossover says so.

Under the ask box, a row of names already answered (Coca-Cola, Taylor Swift, Patagonia, YETI, Tyler Childers and the Dodgers) opens at once. A new name runs live in Qloo and takes up to about 45 seconds.

What Qloo does here that a plain LLM can't

Ask a chat model who Allbirds should partner with and it names brands it remembers. Crossover's candidates are the brands Allbirds' fans over-index on in Qloo; the scores are Qloo affinities; the map is two Qloo heatmaps compared cell by cell; the both-ways read is two Qloo rankings compared. Take Qloo out and there's no list, no tie, no map and nothing for the agent to cite. The 0.05 tie rule, the map's lean rule and the audit counts are mine, and the page says so where it uses them.

What the tests showed, and what they didn't

The checker. The agent's answer shows only if every name and number in it matches the step it cites. That checks where each fact came from, not whether the reasoning is sound, and /audit says so. I attacked it: a script copied every cached answer, changed one fact per copy (a score, a rank, a brand, a citation) and re-checked each. It rejected 219 of 230. The 11 that got through are listed on /audit, and every answer has a "Try to fool the checker" box that runs the same code on your edit. In normal use the checker has blocked 7 answers. Under the current rule 3 still block, and each was a real error. One of the 7 was a true answer for Noah Kahan that an over-strict rule caught; the rule was fixed, and the fix is on /audit.

The replay. For 23 public collaborations, the real partner sits among seven decoys from its own Qloo category and fame band, chosen by rule before any taste score was read. What it shows: the eight-name lists Crossover builds held the real partner in the top three 17 of 23 times, against three in eight by chance and about 10.6 for popularity alone. What it doesn't show: that the asking brand's own taste did the picking. Two controls, each frozen in git before its first call, tested that, and both failed their bars. Under a wrong seed drawn at random, the partner still landed 17 times, so the lists favor the real partner whoever is asking. Ranked the other way, it landed 5 times against 3 for a scrambled seed, because the seed was missing from 172 of the 184 fans' top-50 lists. So the replay doesn't prove the picks are right, and I don't claim it does. /replay lets you play all 23 cases, misses included.

Where taste doesn't decide. On a Liquid Death shortlist, e.l.f. measured 0.62, in the lowest group, though Corpse Paint sold out in 45 minutes (Marketing Dive). Taste is one input for who to call first, not a verdict on a deal.

The whole product

One name in: the answer card, the split map, the eight candidates drawn once, each step opened to why it ran, and a one-page call sheet (buyer's side) or pitch sheet (seller's side) that prints on one page. Two names in (/vs): the split map on its own. Real deals (/replay): play the 23 cases. The audit: everything I tried and what broke. /api/mcp returns any cached checked answer with its steps, so another agent can use Crossover as a tool. Every page reads on a phone, and the prepared answers render with scripts off.

Who it's for, and who pays

Partnership agencies and in-house teams already pay for SponsorUnited and Zoomph, which tell them who did what deal, who to contact and what it reached. Neither tool says who to call first. That's the step before outreach, and today a lead does it with a spreadsheet, a gut feeling and a deadline. Over half of event sponsorship teams call finding new sponsors their biggest challenge (Showcare, 2026).

Crossover is that step on one page. On Monday: type the client's name, read the first call and the reason, open the split map to see which cities to pitch, print the call sheet and forward it. The seller's side is the same page read the other way: down the right of the both-ways table is the pitch line, "your fans rank us first". Every line on the sheet names the step it came from, so when the boss or the client asks "says who?", the answer is on the page. And when taste can't separate the candidates, the sheet says so instead of inventing an order.

The price I'd open with: $300 per seat per month, agencies first, because one agency seat covers every client brand on its roster. What none of this establishes: purchases, visits, commercial eligibility, or whether a deal makes money. Crossover tells you who to call first and why; the deal is still yours to make.

The agent

The agent, Claude Opus 5.5 (claude-opus-5-5), decides what to measure next and why, through Crossover's own tools: fixed code over Qloo, with no model inside, that confirms the name, finds the rival, splits the two audiences, picks eight candidates by rule, scores them, and checks whether two reach the same audience. It never sees a number the tools didn't return. The order of tools is set in its instructions; the branches follow what Qloo returned. Across 39 cached asks it took 5 distinct routes, and 3 stopped at the name. Each step on the page says where it forked.

What I found out along the way

Crossover works for names Qloo knows: established brands, artists and shows. It confirms every name in Qloo before it spends a call, because the small CPG brands I probed weren't in Qloo and search returned confident wrong matches. Of the 39 names asked so far, 36 reached a decision and 3 stopped at the name, and the page says so instead of guessing. Where Qloo has no popularity for a brand, the page says "no measurement" instead of showing a zero. Qloo's developer guide asks that its response data stay out of public repos, so the public repo ships a made-up demo world and the live site runs on real Qloo data.

The README says where each Qloo endpoint is used and traces one ask from request to result.

Built with

Next.js on Vercel, the Qloo Insights API, Claude Opus 5.5 (claude-opus-5-5) for the agent, Claude Haiku 5.5 (claude-haiku-5-5) for name matching, and Upstash Redis for a cache keyed by request and prompt version. The tools, the checker, the tie rule, the split and the audit are deterministic code with 262 offline tests.

Built With

Share this project:

Updates

Submission history