AI tools will happily recommend “a local indie band” or “a popular nearby brand” that nobody checked. For a café or pop-up, a wrong reference costs money. We wanted a system where every claim can be traced to real audience-affinity data, and where the parts that can’t be grounded are labelled honestly.

What it does

You give AuraSync or Async a concept, an audience and a city. Three agents build a brief:

Analyst: resolves real artists, brands, places and taste tags in the Qloo Taste Graph, then pulls recommendations using demographic and location signals. If a type of recommendation comes back thin, it picks new seed entities and asks again, within a call budget. Architect: writes the brief, citing Qloo entity and tag ids for music, brands, venues, menu themes and audience. Auditor: plain code, no LLM. It scores the brief and sends specific failures back to the Architect, for at most three loops.

Every item is labelled Qloo-sourced or LLM-inferred. Lighting, materials and styling can’t be grounded in Qloo, so they are shown as inferred and left out of the score.

How we built it

TypeScript on Node 22 with a small HTTP and server-sent-events server and no agent framework. The Qloo client handles search, semantic tags and insights, with a shared rate limiter, and the LLM sits behind one OpenAI-compatible interface. The server aborts a run when the user leaves, enforces per-IP and daily limits, and stops taking runs when Qloo’s monthly quota is nearly spent. We checked the Qloo response shapes against the live API with a probe script, and the project has [60] automated tests.

What we learned

Grounding is not the same as quality. Our score measures whether claims are backed by data, not whether the design is good, and we say that up front. Qloo’s affinity scores for top results were about 0.97–0.999 in our probe, so a numeric affinity threshold barely discriminates. The checks that matter are structural: the right entity type, the text actually naming the cited entity, and tags that match the wording. Real data is messier than documentation. One tag in about 95 had no id at all, and a parser written from other people’s notes failed on it until we checked the live response.

Challenges

Gaming the Auditor. Early versions let a music item pass by citing a place, or by attaching a high-scoring id to unrelated text. We found this by testing and fixed it with strict type, naming and tag-relevance rules, each with a regression test. Runs that kept running. Abandoned or timed-out requests kept calling paid APIs. We threaded cancellation through every call. Fuzzy matching. Qloo’s search and semantic tags return something for almost any query, so we only accept results whose type and wording match what we asked for, and we report anything unresolved instead of guessing.

Built With

Share this project:

Updates

Submission history