Inspiration

I act in small-theatre productions, where promoting a show is hard. A show can be easy to describe artistically and still hard to connect with a potential audience. That gap inspired a tool that starts with familiar creative references rather than invented audience demographics.

What it does

Give the agent a public show brief, two or three comparison works, and a venue neighborhood. It resolves those works in Qloo, explores cross-domain taste affinities, and looks for nearby places ranked using the selected cultural interests. It proposes an audience hypothesis, three hooks, social-post drafts, and a two-week outreach schedule with inspectable Qloo evidence IDs.

The interface exposes tool parameters, evidence, provider usage, and an independent LLM-only comparison generated from the original brief. Suggestions are hypotheses, not verified ticket demand. Locations are research candidates, not consenting partners. Nothing is posted or sent. If research is incomplete, the interface shows the gaps instead of inventing missing businesses or evidence.

How we built it

The app uses dependency-free JavaScript, HTML and CSS, and a Node.js 22 serverless API function deployed on Vercel (a small local server mirrors it for development). Gemini (gemini-3.8-flash) uses native function calling with three tools:

  • search_entities: Qloo GET /search, for title resolution and candidate inspection.
  • taste_insights: GET /v2/insights, with filter.type=urn:entity:{category} and signal.interests.entities, for cross-domain affinities.
  • nearby_places: the same insights endpoint for urn:entity:place, with filter.location=POINT(longitude latitude) and filter.location.radius, for geographically constrained local candidates.

The server checks that seed IDs came from search results, reduces provider responses to relevant fields, and validates recommendation references. An empty local search gets one wider-radius retry. An incomplete plan gets one repair request with explicit validation feedback. A total cap of five Gemini calls, provider timeouts, an overall request budget, six runs per IP per hour and a daily demo cap limit each run and the hosting cost. Keys remain server-side. An AI coding agent wrote the application code; local checks and live-provider tests are documented separately from deployment status.

Challenges we ran into

Qloo title resolution can be ambiguous, and place coverage depends on geography and selected seeds. Another concrete failure was a Gemini response reaching MAX_TOKENS: it stopped inside a schedule item and produced invalid JSON, despite returning useful evidence earlier. We shortened the output, disabled the model's thinking budget for these constrained calls, added a single validation-guided repair, and built an honest partial-results path.

Keeping a comparison fair also mattered: the LLM-only baseline is generated independently from the original brief and never receives the Qloo discoveries. Affinity values are exposed as supplied, not relabeled as purchase probabilities.

Accomplishments that we're proud of

The app connects cultural references, aggregate taste evidence, nearby research candidates, and actionable draft copy in one inspectable workflow. Every displayed recommendation retains valid evidence references, while missing information is labeled explicitly. It includes usage reporting, bounded requests, server-side keys, and no automatic outreach.

What we learned

Retrieving evidence and producing a complete, valid plan are separate engineering problems. A usable research assistant must explain missing data, show where suggestions came from, and distinguish creative hypotheses from measured facts. Cultural affinity can suggest where to investigate; it cannot establish that a venue wants a partnership or that an audience will buy tickets.

What's next

Add human confirmation of matched works and a verified venue map pin; evaluate suggestions with theatre teams; improve source-quality checks and accessibility; and add durable rate limiting before broader traffic. Validate actual usefulness rather than claiming audience or sales impact from API associations alone.

Built With

Share this project:

Updates

Submission history