尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Qloo-powered agent that finds where your business idea has hidden demand
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗Find where your business idea has hidden demand.
Try it: https://open-here.vercel.app · Made for the Qloo Agentic Hackathon
Tell Open Here what you want to open, where, and what you're going for, like "Italian restaurant, Austin, cozy date-night spot for young couples". An agent digs through Qloo's data while you watch and comes back with:
Click Compare with plain AI under any plan. The same model gets the same request, just without Qloo and in a single answer. Then Open Here puts the plain AI's neighborhood on the same map and scores both picks exactly the same way: average taste lift within 1 km, and popular competitors within 1 km.
From the examples on the site:
| Example | Plain AI's pick | Open Here's pick |
|---|---|---|
| Italian date night, Austin | East Austin: −1 | Downtown, on Rainey Street: +5 |
| Ramen, Los Angeles | Little Tokyo: +2, with 8 popular competitors within 1 km | Venice: +12 |
| Wine bar, Brooklyn | Bushwick North: −7 | Red Hook: +4 |
| Taqueria, Chicago | Pilsen: +15, a good pick near my #4 spot | Brighton Park: +25 |
To be fair about what this shows: Open Here picks spots using this same map, so it has a home advantage here. The comparison shows that a plain AI picks without seeing the map, not that Open Here's picks will sell more. Sometimes the plain AI's instinct is good, like Pilsen, and the app says so.
Before it commits to a plan, the agent flags one to three results that look off and says what it did about each, without inventing explanations the data doesn't support. In Austin it noticed the crowd's top artists are Texas country acts rather than classic Italian dinner music, so it kept the mellow ones for quiet evenings. In Los Angeles it passed over the top-ranked spot because it's a drive-heavy stretch that doesn't suit a quick after-work bowl, and picked Venice instead. When something can't be explained from the data, it says so. You'll find these under "What the agent double-checked" in every plan.
concept + city + brief
│
▼
Agent (LLM with tools) ──► analyze_market Qloo tags, places, heatmap, demographics, taste
│ ──► zone_taste what people who go to one spot's places are into
│ ──► audience_taste the audience's taste, optionally for some age groups
▼
submit_playbook ──► checked on the server, names verified against what Qloo returned
Taste lift. Qloo's raw heatmap mostly follows how busy an area is (r ≈ 0.95 in Austin), so on its own it just says "go downtown". I compare interest in your concept against general popularity across the city, and a spot's taste lift is the average gap within 1 km of it. That's the same measure used for the plain AI's pick. Then I keep only spots with real businesses around them, so no airports, parks or zoos. It measures taste, not sales or rent, so treat it as a lead worth checking in person.
One spot's crowd. Qloo quietly ignores or barely weighs some parameters, so I tested the ones I use. A location point on its own hardly changed the taste results: two Austin zones 15 km apart got almost the same artists. Using the places actually in a zone works much better. Fans of South Lamar's record and vintage shops lean toward Rayland Baxter and Nikki Lane, while The Domain mall's crowd leans mainstream country and Louis the Child.
Calling Qloo. The server talks to Qloo's REST API directly (/v2/tags, /v2/insights, /search), the way Qloo's developer guide shows. I skipped the @qloo/qloo-harness CLI because I wanted fine control over heatmaps, demographics and location. The key stays on the server. Results are cached for 30 minutes, at most 4 calls run at once and no more than 8 start per second, and 429 or 5xx errors get a short retry.
Checking names. An artist only gets the "✓ Qloo" mark if Qloo returned it as an artist, and a partner only if Qloo returned it as a brand. Anything else shows up as an "AI suggestion".
Speed. You see each step as it happens. The map shows up after about 3 seconds and the plan after 15 to 20. The example buttons replay real recorded runs, so they load instantly.
What the Austin example actually asks Qloo (key left out, numbers from the example):
GET /v2/tags?filter.query=Italian restaurant returns a handful of tags. I only keep place categories and pick urn:tag:category:place:italian_restaurant, since it matches the main word with nothing extra.GET /v2/insights?filter.type=urn:entity:place&filter.tags=urn:tag:category:place:italian_restaurant&filter.location.query=Austin&take=50 returns the most popular matching places. Qloo reads the city as "Austin, Travis County, Texas". After dropping the wrong kinds of places and anything outside the city, 43 are left.GET /v2/insights?filter.type=urn:heatmap&output.heatmap.boundary=urn:geohash&filter.location.query=Austin&signal.interests.entities=<top 3 competitors> returns map cells with interest and popularity scores. These turn into taste lift, and candidate spots are ranked by their average within 1 km.GET /v2/insights?filter.type=urn:entity:place&filter.location=POINT(lon lat)&filter.location.radius=700 lists what's around it. Their categories decide whether there's a real street of businesses, which well-known place to name the spot after ("Emmer & Rye"), and the neighborhood ("Downtown"). Spots near airports are dropped.filter.type=urn:demographics gives the age and gender lean. Artists, films and brands with signal.location.query=Austin show what they're into. For one spot, the agent uses that spot's own places instead.The result: Downtown on Rainey Street near Emmer & Rye, taste lift +5, with 2 of the top 43 competitors within 1 km. Another Downtown spot also scored +5 but had 10 competitors nearby, so the agent set it aside.
You need Node 22. There's nothing to install.
cp .env.example .env # add QLOO_API_KEY, QLOO_BASE_URL and DEEPSEEK_API_KEY
npm test
npm run dev # http://127.0.0.1:3000
The example buttons on the live site replay recorded runs. Those recordings are cached Qloo results, and Qloo asks participants to keep those out of public repos, so they aren't in here. To make your own: node --env-file=.env scripts/record-example.mjs austin-italian "Italian restaurant" Austin "cozy date-night spot for young couples", then node --env-file=.env scripts/record-baseline.mjs austin-italian.
Optional settings: LLM_BASE_URL, LLM_MODEL (default deepseek-flash) and LLM_DAILY_CAP_USD (default 2). Any OpenAI-compatible Responses API works.
| Path | What's in it |
|---|---|
lib/analyze.mjs | Market analysis: concept matching, competitors, taste-lift spots, audience |
lib/lift.mjs | The taste-lift math |
lib/agent.mjs | The agent: tools, checks, name verification |
lib/baseline.mjs | The "without Qloo" comparison |
lib/llm.mjs | LLM client with a daily spending cap |
api/ | Vercel functions: analyze, agent (streams its steps) and baseline |
public/ | The web app (plain JavaScript and Leaflet) |
scripts/ | Live test runs, a coverage check and example recording |
API keys only live in server environment variables. Every endpoint is rate limited per visitor. The agent has a deadline that fits the hosting limit, stops when you leave the page, and sets aside budget before each model call. The city and concept sent to Qloo always come from you, not from the model.
Taste data from the Qloo API. Open Here is an independent hackathon project, not affiliated with or endorsed by Qloo.
MIT. See LICENSE.