Inspiration
Development directors at small nonprofits plan partnerships and benefit nights on instinct and a spreadsheet of brands they have heard of. The question they can never answer is the one that decides whether a pitch lands: who already cares about this cause, culturally, and which brands, artists and rooms do those people already share. Qloo's graph holds exactly that answer. Causeway turns it into a plan a person can act on the same afternoon.
What it does
Give it an organization, a cause and a place. It returns a six part plan, built live while you watch:
- Anchors. Resolves the organization in the graph, finds the audience segments and tags that fit the cause, and picks comparable organizations whose followers the graph knows.
- Portrait. Who these supporters are culturally: the tags they over-index on, age and gender skew against the population, and shelves of the artists, podcasts, brands, shows, books and people they share.
- Ground. A heatmap of affinity across the city, clustered into named neighborhoods, with the venues and cafes in each.
- Partners. Brands pulled sector by sector, with the shared ground between each brand's audience and the cause audience spelled out in tags, and a one sentence angle for each.
- Lineup. A headliner, support acts, a host and a wildcard, plus a primary room and two backups inside the densest neighborhood.
- Drafts. A partner pitch, an event brief and a hotspot by hotspot outreach plan, written from the evidence above.
Every name on the page came back from a Qloo call. Nothing is invented. A ledger on the page shows each call as it happens.
How we built it
Next.js 16 on Vercel, Upstash Redis for plans, MapLibre on OpenFreeMap tiles for the ground map. The agent is a tool calling loop over fifteen typed tools that wrap the Qloo endpoints: entity search, tag search with semantic matching, audience browsing by parent, insights for every entity type, taste analysis, demographics, heatmaps, audience comparison and trending. A system prompt holds the method, the house writing rules and what we learned about the graph from a probe battery run before any product code was written.
The run streams over server sent events. Because a full plan can take longer than a Vercel function may live, the run works in chunks: it stops at a turn boundary, saves its thread, and the page or the server itself asks for the next chunk. One worker holds a plan at a time, so a closed tab never loses a plan and two workers never overlap.
Challenges we ran into
The documentation and the live graph disagree in places: tag objects use different field names than the docs show, taste analysis only scores tags when the signal includes entities, and audience only signals rank brands toward credit cards. We probed every endpoint first and built the agent on what the graph actually returns. The partner stage pulls by sector tag with commercial brands only, which is why the partners read like a partnerships lead's shortlist rather than a list of banks.
The other challenge was time. A judge should see a plan build, not wait on a spinner. Parallel tool calls and a snapshot after every tool mean sections land one after another from the first minute.
Accomplishments that we're proud of
Plans for literacy in Chicago, ocean protection in Los Angeles, food access in Brooklyn, men's mental health in London, refugee resettlement in Dallas and more, each with partners and venues a human could pitch tomorrow. The writing stays plain and specific because the data is specific.
What we learned
The graph is strongest when you give it entities. Comparable organizations resolved as brands are the best signal for a cause that has no audience segment of its own. Shared tags between two audiences are only useful once the generic ones are filtered out. And a plan is only credible when every name is traceable to a call, which is why the ledger is on the page.
What's next for Causeway
Saved plans per organization, a calendar view for benefit dates, and exports to the tools development teams already use.
Log in or sign up for Devpost to join the conversation.