-
Lineup poster: the bigger the name, the better the cultural fit. Struck-through names are the weakest fit on the shortlist.
-
Compare tab: raw Qloo affinity, generic LLM score and fit for every pick, side by side.
-
First page: Headliner tells event organizers who to book and who to sponsor, ranked by fit with their crowd.
-
Sponsors on the poster: brands ranked by fit with the crowd. The weakest fit on the shortlist is struck through.
-
Evidence sheet: a generic LLM scores Red Bull 55, Qloo's taste data scores it 94 for this crowd, with the evidence behind it.
-
Example builder: the crowd's favourites and the shortlist for the fictional Skyline Festival.
Inspiration
Picture a festival that signs a headline sponsor on a handshake and a hunch. The brand clashes with the crowd, the activation falls flat, and the money is gone. Organizers make their two biggest spending calls, who headlines and who sponsors, on gut feel, past sales, or whoever's agent called first. They choose by fame, not fit. A generic AI makes the same mistake: ask it who to book and it names the biggest names. We wanted an agent that answers with the artists and brands this specific crowd actually gravitates toward, and that shows its evidence instead of asking you to trust it.
What it does
Headliner is an agentic decision-support tool for festival, conference and brand-event organizers.
- Describe the crowd through things attendees already love: artists, brands, anything.
- Bring a shortlist: artists considered for headline slots and brands considered as sponsors.
- The agent runs. A live trace shows it matching every name to a Qloo entity, pulling taste signals and ranking.
- The result is a lineup poster: the better the cultural fit, the bigger the billing. The weakest fits on the shortlist are small and struck through.
- Tap any name for the evidence: a fit score, a verdict (book, consider or weakest fit), the reason in plain language, evidence bars showing which of the crowd's favourites drive the match, and a "fame vs fit" panel that sets a generic LLM's answer (general knowledge only, no Qloo data) beside Qloo's. A Compare tab lines up every pick: raw Qloo affinity, the generic LLM score and fit.
It never invents candidates and never contacts anyone: it ranks what the organizer brings. A one-tap example (the fictional Skyline Festival) shows a finished run in seconds. It's an installable, mobile-first web app, built as decision support and not a chat window.
How it's Qloo-powered
Qloo is the whole ranking. For each request the agent:
- resolves every name to a Qloo entity with
/search(artists and brands, near matches only, never an unrelated top hit); - asks
/v2/insightsto score only the organizer's shortlist (filter.results.entities) against the crowd (signal.interests.entities), artists and brands in separate calls, withfeature.explainabilityso every score shows which crowd favourites drove it; - turns Qloo's affinity into a fit score, and keeps the raw affinity visible next to it.
So a famous act that doesn't fit the crowd is flagged, and a lesser-known act that does is surfaced. The fame-vs-fit panel makes that visible on every pick. All Qloo calls run server-side with the key never reaching the browser, responses are cached privately to stay inside the quota, and nothing about individuals is sent to Qloo.
How we built it
- Next.js (App Router), React, TypeScript, Tailwind CSS and shadcn/ui, deployed on Vercel as an installable PWA.
- A small server-only Qloo client (search, insights, explainability) with a shared cache, retries and a cap on concurrent calls, behind three route handlers with per-visitor and global rate limits.
- Google Gemini (free tier) supplies the "generic LLM" baseline for the fame-vs-fit panel, with a fallback model if the first is over quota.
- A lineup-poster visual language where type size carries the ranking, designed mobile-first and checked on phone sizes from 320 to 440 px wide.
- Tested with real Qloo data across single items, brand-only and artist-only crowds, accents and non-English names, local Malaysian names, ambiguous names, emoji, maximum sizes and hostile input.
Challenges we ran into
- Qloo's scores sit close together. For well-known names raw affinity clusters in a narrow band, so a raw score alone makes everything look equally good. We show fit as each pick's standing within the shortlist and always show the raw affinity beside it.
- Honesty when picks really are tied. Early on the poster made a 2-point gap look like a clear win and called an act "overlooked". We added a close-call check: when Qloo scores a group within a few points, the app says the order is a tiebreak and suppresses big claims.
- Matching real-world names. Qloo spells some brands with typographic apostrophes or differently-encoded accents (Haagen-Dazs, L'Oreal), so exact matching silently dropped them. Matching now ignores case, accents and punctuation, and unrecognised names are listed, never silently lost.
- Quotas and bursts. Qloo answers bursts with HTTP 429 and Gemini's free tier runs out. We cap concurrent calls, cache responses, fall back to a second Gemini model, and tell visitors plainly when they hit a limit.
Accomplishments that we're proud of
- A poster where name size is the ranking, readable at a glance on a phone.
- A fame-vs-fit panel that makes the difference between a generic answer and taste data visible on every pick.
- An app that is honest about uncertainty: raw affinity always shown, close calls called out, skipped names listed, limits explained.
- Real Qloo data end to end, with a security review and a broad test pass before launch.
What we learned
Taste data is most useful when it is shown with its limits. A single confident number invites over-trust; showing the raw score, the close calls and the evidence builds it. We also learned how much real-world entity data needs forgiving name matching.
What's next for Headliner
Saved events and side-by-side comparison of lineups, an exportable sponsor-pitch sheet, suggesting brands the organizer hadn't considered from Qloo's data, and extending beyond artists and brands to other Qloo entity types.
Known limitations
Qloo results describe what groups tend to like, not any individual, and are not a guarantee. Fit is relative to the shortlist; raw scores are shown. Names Qloo doesn't know are skipped and listed. Gemini's generic score is an estimate and can vary slightly. A fit score says nothing about fees, availability, contracts or brand safety. No personal data is sent to Qloo. Headliner is an independent project and is not affiliated with or endorsed by Qloo.
Reproducibility
Clone the repo (https://github.com/jeretc/headliner-events), copy .env.example to .env.local, add your own Qloo and Gemini keys, run npm install, then npm run dev. Full steps, the redacted request-to-result example and the limitations are in the README.
Built With
- google-gemini
- next.js
- qloo
- react
- tailwind
- typescript
- vercel
Log in or sign up for Devpost to join the conversation.