WallpaperMachine
당신이 사랑하는 배경화면, 맥에서 새롭게 만나보세요
저장소 정보는 아직 수집하지 않았습니다.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
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.