-
Beat the model: guess a real restaurant's Friday closing time against GPT-6 Astra alone and with Qloo.
-
The same question, asked four ways. Alone, both models fail to answer. With Qloo's record, both give the right closing time.
-
Qloo against the baseline, test by test. Every test was written down before its result existed.
-
How we know: every claim on the site is tied to a test, the protocol was committed before the result, and the full record is published.
-
30 real NYC restaurants. Alone, GPT-6 Astra got 0% of closing times right. With Qloo, it got 97%.
-
The business: about 3,000 restaurants open in the four boroughs every year, and each one needs a block.
-
Find the block before you sign the lease. Every dot is a real NYC restaurant or vacant storefront: 26,043 and 6,767 of them.
-
The agent at work. It picks a storefront for a Korean cafe for students while the agent radar shows each call to Qloo as it happens.
-
Every rival around the top pick, sized up with Qloo: Friday closing times on one timeline and what reviewers rave about.
-
Drop a pin on any block in four boroughs and compare lease scores side by side.
-
A positioning brief built on Qloo's taste evidence for Flushing. Every business named comes from Qloo and is highlighted.
Inspiration
Opening a restaurant is a bet on one block. An independent founder in New York signs a lease that runs for years, often with their savings behind it, and most of them choose the block by walking past it, asking friends and trusting a broker who gets paid when they sign. Chains have real-estate teams for this. Independents have a hunch.
The questions a founder actually needs answered are about specific places. Who is already on this street? When do they close on a Friday night? What do their regulars rave about? Where else do those regulars go? What could a new place do that nobody nearby is doing?
We tried asking a language model first, and it failed in a way that told us exactly what to build. We picked 30 real NYC restaurants and asked when each one closes on Friday. GPT-6 Astra got 0 of 30 right (it declined every time). Gemini 3.8 Flash got 3 of 30 and gave 6 wrong answers with full confidence. A model can reason about a neighbourhood, but it has no record of the places in it. This is the "culturally blind agent" problem the hackathon describes, and it shows up on the one block that matters.
Then we gave the same two models Qloo's record of each place. Both got 29 of 30 right.
That result shaped the whole project. Whitespace is an agent that does the reasoning itself and takes every fact about a real place from Qloo. The name comes from what a founder is looking for: white space, a block where people want something and nobody serves it yet.
What it does
A founder describes the concept and the customers in plain words, for example: "Korean cafe for college students on a budget, anywhere in Manhattan or Brooklyn, not next to other Korean places." Whitespace then:
- Scouts storefronts. A tool-calling agent picks neighbourhoods from census data, searches the NYC Storefront Registry for vacant storefronts in several of them, and checks competition, cuisine fit and subway traffic before it hands back a shortlist.
- Ranks the leases with a score built on NYC restaurant inspection records and tested against real openings.
- Sizes up every rival around the top pick with Qloo. This is the heart of the product. For each nearby competitor, Qloo supplies its Friday closing time and what its reviewers talk about, so a founder sees on one timeline who closes at 10 pm, who stays open past midnight, and which dishes people come for. Qloo also shows which places it tags with the cuisine even when the city files them under something else, and which neighbours fans of the cuisine rate highest.
- Writes a positioning brief from Qloo's taste evidence. Qloo tells the agent which places, brands and tags are unusually popular around the address compared with a 10-area New York baseline. That way the brief is built on what is distinctive about this neighbourhood, not on what every New Yorker likes. The brief covers audience, brand voice, menu emphasis, music and decor, and launch partners, and every business it names is highlighted with its source.
- Lists local partners and next steps from city data, each with a source link: the nearest business improvement district, independent neighbours to cross-promote with, and the permits every new NYC restaurant needs.
- Answers follow-up questions with twelve tools. Two of them,
competitor_hoursandplace_hours, ask Qloo for opening hours. The agent is told never to state hours from memory, so every answer about when a place is open comes from Qloo. - Explores a crowd's taste. In the scene explorer, a founder names up to three places their customers love. Qloo returns where those fans also go, plus the music artists and brands that crowd follows. No language model is involved; the answer is Qloo's.
On the page you can also score any block in the four boroughs on a map of all 26,043 active restaurants and 6,767 vacant storefronts. A live "ask the model" duel sits beside every rival: one click asks GPT-6 Astra when the place closes, once alone and once with Qloo's record, side by side. Finished runs replay in seconds with no API calls, and every Qloo call shows up in a live agent radar and trace, so you can watch the agent reach for Qloo as it works.
How we built it
The agent. A Python FastAPI server runs GPT-6 Astra (through Kie) with function calling. Every step, every tool call and every Qloo call is streamed to the browser over server-sent events, so judges and founders watch the agent work in real time.
Qloo is the agent's knowledge of real places. We use the Qloo Insights API in five places:
| Where | What we ask Qloo | What the founder sees |
|---|---|---|
| Rivals around the top pick | Place records for nearby restaurants of the cuisine (/v2/insights with filter.type=urn:entity:place, the cuisine tag and a location radius) |
Each rival's Friday closing time on a timeline, and what its reviewers mention |
| Fans of the cuisine | Places ranked by affinity for the cuisine tag (signal.interests.tags) |
The neighbours fans of this cuisine rate highest |
| The positioning brief | Places, brands and tags that over-index around the address (signal.location), compared against the same query for 10 reference areas, with a popularity cap so citywide giants don't crowd out local favourites |
Highlighted Qloo evidence in every section of the brief |
| Follow-up answers | Hours for any named place within 2 km, and hours for every nearby competitor | Accurate opening hours in the chat, with the tool call shown |
| Scene explorer | Entity search, then places, artists and brands with affinity to 1 to 3 named places (signal.interests.entities) |
Where these fans also go, and what they listen to and buy |
Code checks the model against Qloo. The model's job is to plan; Qloo and the city records hold the facts. Every business the brief names is traced to Qloo, to inspection records near the address, or to a business improvement district. Names with no source behind them are rewritten or removed, and the page shows the count: for example, "3 businesses and brands named: 3 from Qloo, 0 unverified." On the scout's shortlist, every address must come from a search in this run and every number must appear in a tool result. Numbers in follow-up answers that appear in no tool result are flagged.
The lease score. For each cuisine it is a logistic regression on two facts about a city block:
$$P(\text{a new } c \text{ restaurant opens}) = \sigma\big(\beta_0 + \beta_1 \log(1 + d) + \beta_2 \log(1 + s_c)\big)$$
Here \(d\) is the number of restaurants in the block and \(s_c\) is the number of same-cuisine restaurants in the block and its 8 neighbours. It covers 25 cuisines, about 83% of the city's active restaurants. In our test, adding Qloo's taste signal raised it from an AUC of 0.851 to 0.893, and the page offers a "Qloo taste" ranking alongside the city-records one.
Treating Qloo data with care. One client handles every Qloo call. It caches responses on disk and reads the monthly quota from Qloo's rate-limit headers, stopping uncached calls before the quota runs out, so the live demo can't burn through it. We asked Qloo Support how their data may be stored. Private server-side caching is fine; publishing responses in a public repository is not. So the full saved runs live only on the server, the public repo holds redacted copies, and the live site publishes a SHA-256 hash of each full run so anyone can confirm a replay matches the recording.
City data. NYC restaurant inspections, the Storefront Registry, US Census ACS and LODES jobs data, MTA subway ridership, business improvement districts and NYC Planning GeoSearch.
The page. Plain HTML, CSS and JavaScript with no build step: a canvas dot map of the city, a Leaflet pin map, SVG charts, and day and night themes. Tomato red marks Qloo throughout the page and steel blue marks city records, so you can always see which facts came from Qloo. It is hosted on Vercel, with live runs rate limited per visitor and capped by a daily model budget.
Challenges we ran into
Proving Qloo's value instead of assuming it. It would have been easy to plug Qloo in and say it helps. We wanted numbers a judge could check, so every claim got its own test with the rule written down first. That took real time: building the closing-time check meant a person looking up every restaurant on Google Maps, and the brief tests needed blind raters. It was worth it, because now every Qloo claim on the site is a measured one.
Finding the right job for each source. Not every signal does every job. Qloo's audience tags matched census data for only 2 of 7 groups, so demographics come from the census. Where Qloo is unmatched is facts about specific places: hours, prices, competitors and what fans love. We rebuilt the product around that strength, and it got much better for it.
The agent misread empty streets. In an early live run for a Caribbean restaurant in the Bronx, the agent saw "no Caribbean restaurants nearby" as an opening and picked storefronts at the 14th to 16th percentile for cuisine fit, where an empty street more likely means low demand. We gave it neighbourhood-level fit scores and a code check that sends weak picks back. On the next run its picks sat at the 49th to 94th percentile.
The model named businesses it couldn't back up. Early briefs mentioned real-sounding places that no source near the address confirmed. That is why the brief is now grounded in Qloo evidence and every name is traced. In one Flushing run the agent kept H Mart and Kung Fu Tea, both from Qloo, and replaced three names it could not trace.
Slow model calls. Some turns stalled for 1 to 4 minutes while the model reasoned. We now start one duplicate request after 45 seconds and take whichever answer comes first, with a cap so a slow spell can't multiply the cost.
Messy city data. The storefront registry had broken addresses: unit codes, ordinals, and 372 Queens storefronts that had lost the hyphenated part of their house number. We repaired them from the city's PLUTO tax lot data where we could.
Running a public demo on a budget. Qloo has a monthly quota and the model costs money on every call, so we added a quota guard, per-visitor limits, a daily budget, a Vercel Firewall rule and replayable saved runs that cost nothing to show.
Accomplishments that we're proud of
We measured what Qloo adds, and it adds a lot. We committed each test's protocol before writing its code or seeing a result, so the commit history is the timestamp. There are 13 tests behind the product. The headline results:
| Question | Without Qloo | With Qloo |
|---|---|---|
| When does this NYC restaurant close on an average weekday? (30 places, Google Maps as truth) | GPT-6 Astra 0 of 30, Gemini 3.8 Flash 3 of 30 | 97% for both models |
| Are Qloo's Friday closing times right? (checked by a person on Google Maps) | 97% of them | |
| Are Qloo's price levels right? | 25 of 27 | |
| Does Qloo find the real competitors? | 92.4% of them | |
| Do blind human raters prefer the brief written with Qloo? | 78% of the time | |
| Does a blind judge prefer it? | 76% (95% interval 0.68 to 0.83) | |
| Which block gets the next opening of a cuisine? (AUC) | 0.851 | 0.893 |
| Do cuisine heatmaps find where a cuisine opens next? (AUC) | restaurant count 0.742 | Qloo 0.812 |
| Given a storefront, which cuisine opens there? | city records | +0.087 AUC with Qloo |
Results you can trust because we published all of them. We kept the tests where Qloo did not move the number on the site, next to the wins. For example, a survival model gained about as much from a placebo as from Qloo, so we make no survival claim. Because nothing was hidden, every Qloo win above is one a judge can take at face value.
Qloo is visible everywhere. Every Qloo call appears in the live trace and agent radar. Every Qloo fact in the brief is highlighted in red. And anyone can rerun the closing-time question live with the duel button and watch the model miss alone and get it right with Qloo.
An agent you can check. Before each change we ran a reliability suite of normal requests, edge cases and prompt injection attempts, and a case passed only if all 3 of its runs passed.
It works for everyone. Finished runs replay in seconds with no API calls, and if a live run can't start, the page shows the closest finished run and labels it as such.
What we learned
- Qloo fills exactly the gap a language model leaves. A model can plan, compare and write, but it doesn't know when a real restaurant closes or what its regulars order. Qloo does, and accurately. Together they make an agent that is both smart and right.
- Taste data is most powerful when it is local and specific. Comparing an address against a city baseline turned Qloo's evidence from "New Yorkers like coffee" into "this part of Flushing over-indexes on H Mart and Kung Fu Tea", and briefs written that way won blind comparisons.
- Write the rule before you look at the data. Testing first told us where Qloo shines, and that let us build the product around those strengths with confidence.
- Let the model plan and let code check the facts. The agent got far more reliable once every name and number had to trace back to Qloo or a city record.
What's next for Whitespace
- More of Qloo in every answer. Price levels on the rivals timeline now that they test at 25 of 27, Qloo-backed menu and price positioning against the nearest competitors, and taste trends over time so a founder can see where a neighbourhood is heading.
- Beyond New York. Qloo's place data is not limited to New York, and the agent's design does not depend on NYC. Any city with open business records and a vacancy list could get a Whitespace.
- Real founders and brokers. Feedback from people signing leases, and two outside raters for the brief.
- Rent data and Staten Island, the two gaps we still have.
- A business. A paid site report for founders and paid listings for landlords with vacant storefronts, priced once real users tell us what it is worth to them.
Built With
- css3
- fastapi
- gemini
- gpt-6-astra
- html5
- javascript
- kie
- leaflet.js
- lodes
- mta
- numpy
- nyc-geosearch
- nyc-open-data
- openstreetmap
- pydantic
- python
- qloo
- scikit-learn
- scipy
- server-sent-events
- shapely
- us-census
- uvicorn
- vercel
Log in or sign up for Devpost to join the conversation.