Inspiration
What it does
How we built it
Challenges we ran into
Accomplishments that we're proud of
What we learned
What's next for Cold-Open
What it does
Cold-Open turns a brand name into ranked, evidence-cited partnership leads using Qloo's cross-category taste affinity data. Enter a brand and it:
- Resolves the subject to a Qloo entity (
GET /search) and to a Qloo tag (GET /v2/tags), showing the pick, the type URN, the tag, and every alternative it considered — so the resolution is auditable instead of hidden. - Scans three lead buckets across five Insights entity types: brand collaborations (
urn:entity:brand), artist/podcast partnerships (urn:entity:artist,urn:entity:podcast), event/venue activations (urn:entity:place,urn:entity:destination). OneGET /v2/insightsrequest per bucket, parameters in the query string (a POST with a JSON body fails against this API). - Ranks candidates by affinity, drops direct competitors (same category as your subject) and caps each bucket.
- Pitches one paragraph per lead citing the Qloo evidence, followed by an explicit "what this does not establish" block on every result set.
The same pipeline module runs in three places: the hosted browser demo, the local web demo, and the CLI. Two transports (fetch in the browser, qloo api / qloo exec on Node) and one shared shape module.
What is Qloo-powered
Entity resolution, every affinity score, the ranking inputs and the evidence all come from Qloo Insights output. the ranking and pitch layer is deliberately template-based (no LLM call) so each sentence traces back to a field in a Qloo response.
Two request decisions the judges should check
- Entity signals, not tag signals.
signal.interests.entities=<entity_id>returns subject-dependent results with varying affinity for every supported entity type (measured: Patagonia -> REI / The North Face / Moab / Rich Roll Podcast; Red Bull -> GoPro / Skrillex / Saas-Fee). Tag signals (signal.interests.tags) only move the needle for tag/type pairs that are graph-connected; for most pairs the API answers with the same default list at a constant affinity (0.7649962877984056), which makes every subject look identical. Tag-signalled requests againsturn:entity:placeadditionally took 32-46 s (and 504s), against 1-2 s for entity signals. - Supported
filter.typevalues only.urn:entity:music_artistandurn:entity:place:restaurantare rejected with HTTP 400.test/api_contract.test.mjspins the whole category -> entity-type map to the developer guide's supported list, so that class of bug cannot come back.
Live demo
https://nicolasesanchez50.github.io/cold-open/
It runs keyless on responses recorded from the live hackathon API by scripts/record_fixtures.py (field selection only, nothing invented — the page labels the state RECORDED and lists the recorded subjects). Paste an event API key in the page to switch to live mode: every call then goes straight to https://hackathon.api.qloo.com from the browser (the endpoint answers access-control-allow-origin: *, so no backend proxy exists). The key is never committed, never embedded in the page and never written to a fixture — per the starter-kit rule, it stays on the visitor's machine.
Reproduce
git clone https://github.com/nicolasesanchez50/cold-open && cd cold-open
node --test # 10 tests, incl. the API-contract test
node src/agent/cli.mjs Patagonia # recorded mode, no credential needed
node src/web/server.mjs 3737 # local web demo
Live CLI and fixture re-recording are documented in the README. No npm dependencies; Node 22+ only.
Responsible data handling and limits
- No personal data is sent to Qloo — inputs are brand/product names only.
- Affinities are aggregate group-level correlations, never claims about individuals and never causal; every result set carries the caveat block.
- A wrong entity resolution would change the results, so the alternatives are printed next to the pick rather than hidden.
- Scores describe taste affinity only — not budget, availability, exclusivity or brand safety. A human still qualifies the shortlist.
Built With
- api
- javascript
- node.js
- qloo
- web
Log in or sign up for Devpost to join the conversation.