Inspiration

On 27 July 2026 the American Red Cross declared its second-ever national blood supply crisis, and donors under 30 are down about 39% since 2015 (Blood Centers of America). Fandoms already fill blood drives: the Red Cross × NFL partnership brought in 150,000+ first-time donors, and at the Metallica donation experience in Las Vegas 61% of donors were first-timers, against 26–31% at a typical Red Cross drive (FOX5 Las Vegas, Oct 2026). But partners are chosen by gut feel, and famous isn't the same as young. Across Metallica's whole partnership only 16% were first-timers, below a typical drive, and on Qloo its fans skew 45–54.

So I asked myself: what if a blood bank could see which fan bases in its city are young, where they live and which hall nearby can host, before it picks a partner?

What it does

You type a city. An AI agent then:

  1. Finds candidates. It proposes artists, teams, shows, games and creators. Qloo adds its own local taste: the artists and athletes young people in that city over-index on compared with 10 reference cities.
  2. Scores each one with Qloo. It measures how young the fans are, how much the city's young people love it, and how concentrated its fans are (heatmap lift over a baseline of mass brands).
  3. Picks the partners. Older-skewing fan bases can't outrank young ones, and every report leads with one local pick. In Houston it chose Astros star Jeremy Peña (+0.98); in Seattle, Seattle-born Paolo Banchero (+0.99); in Mumbai, the band Indian Ocean (+0.77).
  4. Maps the fans and finds venues. It shows the neighbourhoods where those fans live and venues nearby that can host (schools, colleges, halls, gyms, places of worship). Bars and lounges only get flyers.
  5. Writes the campaign. A poster, three social posts, a friend invite and a partnership pitch email, all guarded against invented numbers and fake endorsements.
  6. Hands over a campaign calendar. Every step from the pitch email three weeks out to a return drive 56 days later, when US whole-blood donors can give again. It downloads as an .ics calendar, a venue spreadsheet and a printable brief.
  7. Checks itself. An AI fit check screens every named person for deaths, age and controversies, and says so plainly if it couldn't run. The same model is also asked without Qloo, and every one of its picks is fact-checked against Qloo's age data.

Every Qloo request is listed as a receipt you can re-run with curl. FanDrive is also an MCP server, so any agent can call plan_blood_drive, score_fandoms or city_strength.

How I built it

  • App: Next.js 16 on Vercel, Vercel AI SDK 7 with Google Gemini (a fallback chain across four models), Upstash Redis and MapLibre.
  • Qloo calls:
    • /search to resolve and confirm names.
    • /v2/insights with five filter types: urn:demographics for age skew; urn:entity:<type> with location and age for local love, and without an entity filter for local taste; urn:heatmap for fan zones; urn:entity:place with filter.tags for host venues; and urn:tag for what the fans also love.
    • /v2/tags to look up venue tags, and /v2/trending for momentum.
  • Agent tools: score partners, map a partner, finish. The app always adds the user's own names and Qloo's local taste. If the AI is down, autopilot finishes the plan with the same Qloo tools.
  • Quality: 226 tests (Vitest), CI typecheck and lint, a 20-city evaluation (pnpm eval) and a safety report (pnpm safety).

Challenges I ran into

  • Making "local" mean local. Qloo's city lists for young people are full of national teen stars (one actor topped five US cities). I filter names that top more than one other reference city, keep athletes and artists, and compare Indian cities only with US ones because Qloo's Indian city data is national.
  • Safety on a public health campaign. Live Qloo data surfaced identity and religion tags, a children's museum as a "host venue", and band names with profanity. Each now has a filter and a test. When I audited every venue Qloo had returned (4,673), I found 7 bar-like event spaces and a children's theatre still allowed to host, so venues are now judged by their name too.
  • Free-tier AI. Gemini's free tier allows about 20 requests per model per day. A fallback chain, deadlines and an autopilot path mean a plan always finishes. I also found the fit check was failing silently on timeouts and reporting "no concerns", so it now retries and warns when no names were screened.

Accomplishments that I'm proud of

  • Qloo's age signal checked against the real world. Across 8 leagues, Qloo's young-vs-old lean matches Nielsen's ages of TV viewers with a rank correlation of −0.71. Golf, NASCAR and baseball, the three oldest audiences, are the only three Qloo scores as older-leaning.
  • A 20-city evaluation. Of 96 partners a plain LLM suggested, 31% have fans who skew older than average and 60% were not young-skewing or had no Qloo data. FanDrive's top 3 averaged youth skew +0.75 vs +0.25, and every city got a local pick (20 different fandoms).
  • Safety, measured. 0 unsafe-sounding host venues out of 4,673 audited, 24 of 24 red-team copy tests blocked, and the fit check caught 8 of 8 names with a death or legal case with 0 false alarms on 8 clean names.
  • Every plan shows its work: the agent's steps, the evidence for each score and every Qloo request.
  • Private by design. Only public names, cities and coordinates go to Qloo, and results describe crowds, never individuals.

What I learned

Taste data changes the answer. An LLM suggests famous names; Qloo shows which fan bases are actually young, actually local and actually near a hall that can host. The most useful signal wasn't a single score but Qloo's local taste: hometown athletes and artists an LLM rarely thinks of. I also learned to measure my own safety claims instead of assuming them: the first audit found problems my tests had missed.

What's next

  • Organiser mode for student groups (NSS units, Rotaract, college clubs), with a simpler form and a shareable drive page.
  • A pilot with a blood centre, to measure first-time donors from a fandom-themed drive against its usual drives.

Built With

  • google-gemini
  • maplibre
  • mcp
  • nextjs
  • qloo
  • react
  • tailwindcss
  • typescript
  • upstash-redis
  • vercel
  • vercel-ai-sdk
Share this project:

Updates

Submission history