Inspiration
Every street has a "For Lease" sign, and behind it someone about to bet their savings on a guess. Commercial real estate has a tool for this question, void analysis: it finds the businesses an area is missing. But it is sold to landlords and brokers, and it is built on which chains are already present or on foot traffic counted from phones. It counts chains and phones rather than taste, and it is made for the landlord, not for the person opening the business. Asked about 15 storefronts in 15 cities, a plain chatbot's top pick was a coffee shop, café or bakery at 10.
Qloo's own client story shows that taste answers this question: Clarion Partners, a real estate investor, used Qloo's audience insights "down to a city block" to win an athleisure brand as a tenant on Chicago's Magnificent Mile. We wanted to make that self-serve, for the owner.
What it does
Walk-in is taste-based void analysis for the owner. What is new:
- Demand from taste. Qloo measures what the people in this exact area love, and where they travel to get it, independents included.
- An owner as the user, not a broker.
- A real walk or drive, traced over the streets, not a ring drawn around a pin.
- A concept and a free launch kit, not a tenant list.
It answers one of three questions about a storefront:
- Find what's missing. What the area lacks, ranked by evidence, and the three businesses that fit the unit best.
- Test my idea. Type "bakery" or "sports bar". Walk-in ranks it among the site's gaps and gives a verdict (strong, possible, weak, thin data, or doesn't fit) with the main reason, then designs it next to the two strongest alternatives. Name a chain, and Qloo's brand graph counts its stores in the area while the verdict judges the category its stores are filed under: "50+ Starbucks locations are already inside the 15-minute drive."
- Improve my place. Compare the place you run with the ones people nearby love, like with like, and get a list of changes, each with its evidence.
Each survey:
- Traces the real area. A walk or a drive of 5 to 60 minutes, or a road distance of 1 to 100 km, over the street network, so rivers, parks and highways cut it. A short walk suits a city block; big areas suit towns, suburbs and destination businesses.
- Reads the area through Qloo. Every place inside it; the place types people here engage with, against six same-size areas around; the places they love more than the rest of the city does, and how far they travel for them; and what they over-index on in music, film, TV, podcasts and brands. An optional age focus (under 25, 25–34, 35–54 or 55+) leans all of it toward one age group with Qloo's demographic signal. In Williamsburg, Under 25 surfaces Cheesesteak, Jeans shop and T-shirt store as gaps; 55+ surfaces Mexican, Sandwich shop and Diner.
- Ranks what is missing, with demand, supply, pull and fit on every row. Supply is compared with what a trip twice as long reaches over the streets, so the far bank of a river counts only where a bridge crosses it. "Missing" is double-checked against OpenStreetMap, so Walk-in never calls a kind of place absent when it is there.
- Designs the business. An agent tests its own hunches live against Qloo and turns the top gaps into three concepts, plus at most one marked, untested wild card that combines two separate loves into something no place inside the area is. The owner's rules (no alcohol, halal, vegetarian, family friendly, budget, the unit's size, no extraction hood) are hard rules, checked after the model answers.
- Makes it concrete. Each concept opens into a design sheet built from the evidence: the offer, from what the places people here love are known for (an item needs evidence: a lone word that one place's reviews mention once or twice is left out); the hours those places keep; the unit's capacity under the building code; who you'd win, from Qloo's audience data on those places, with the ad setting it implies ("Ages 30–44, women"), and a positioning tip when the places already inside the area miss people the loved places draw (rare on real data); an experience plan (what to play, screen and host); a launch plan with ad audiences ready to paste; and how it meets each of the owner's rules.
- Hands over a free launch kit. Ad copy for each channel of the plan (Spotify, Nextdoor, Google Ads, Meta), every line checked against the evidence; a window poster with a real street map and a QR code to the owner's own page; tracked links per channel; and a report of up to 12 sections to take to a landlord or a lender, saved as a PDF. The street map comes from OpenStreetMap's Overpass servers or, when they don't answer, from a second source, OpenFreeMap's vector tiles.
The map shows its work: the area, numbered pins for the competitors that match the lists, lettered pins for the places people here love and the trips to them, and Qloo's taste heatmap. A dropped pin shows its street address (OpenStreetMap's Nominatim), and the site's name links to Google Maps. Sign in with Google to keep surveys in My places, or share any survey by its link.
From your AI assistant. Walk-in also runs as an MCP server (mcp_server/walkin_mcp.py). It speaks MCP over stdio,
so any MCP client that launches stdio servers can use it; it was tested with the MCP SDK's client in the tests. It
calls only Walk-in's public API and needs no keys. Its tools:
survey_storefronttakes aplace(an address or a neighborhood) orlatandlon;travel(walk, drive or distance) withminutes(5–60) orkm(1–100);ages(all, under 25, 25–34, 35–54 or 55+); and an optionalbusinessto test. It returns the area, the age focus, the top 5 gaps with their evidence, the concepts, the verdict and chain line for a business tested, and the survey's link, where the design sheets and the free launch kit are. A survey takes 1 to 3 minutes and sends a progress note for each step.list_examplestakes nothing and returns the finished example surveys, with links to each survey, its launch kit and its report.get_surveytakes a run id or a survey's link and returns that survey, summarized the same way, or what a survey still running has found so far.
Setup and limits: mcp_server/README.md.
See it first. Finished example surveys, each with its launch kit and report, are on the first screen and at https://walkin-app.pages.dev/examples, for every visitor: opening one replays a saved survey, so it costs nothing and needs no sign-in.
How we built it
A Python and FastAPI backend streams each survey to the browser as server-sent events, and a React and TypeScript frontend draws it live on a Leaflet map. Walks and drives come from Valhalla on OpenStreetMap data; the cross-check and the kit's street maps come from OpenStreetMap's Overpass API, with OpenFreeMap's vector tiles, read by a small pure-Python decoder, as the street maps' second source. Nominatim finds addresses and names a dropped pin's.
The agent is a tool-using model with three tools: test a category live against Qloo, check live what a category's fans also love, and inspect a gap's competitors and favorites. It runs on a chain of free models (Gemini, then Groq) that rests rate-limited models and keeps the conversation going on the next one. The model only chooses, names and positions; the server writes every factual line from the measurements. A model-written line that breaks a rule, leans on filler ("cozy", "vibe") or states a figure the evidence doesn't give is repaired once or replaced by the evidence's own line, and a concept that still breaks a rule is dropped, with the reason shown. The design sheet calls no model, and no number in the report comes from one. Without any model, evidence rules do the whole job.
Surveys, design sheets and kits are saved in Postgres on Neon. The API runs on Render's free tier behind a Cloudflare Pages front door that never sleeps and shows its own note while the engine wakes. 629 server tests drive the real HTTP app and survey pipeline against a synthetic Qloo world, 306 more cover the front end, and GitHub Actions runs them, the type checks, the linters and the Docker build on every push.
How Qloo makes it work
A map search lists what is there. A chatbot knows nothing about the block. Qloo gives Walk-in four things neither can:
- The taste of the people inside the area, against same-size areas around. Qloo ranks place types, brands, artists, films, shows and podcasts for a location signal: here, the area's own outline. Comparing it with same-size areas nearby, rather than the whole city, shows what this area cares about more than its surroundings. Qloo's demographic signal does the same for one age group.
- The places they love more than the rest of the city does, and the trips they make to reach them. Qloo ranks places, independents included, for the area and for the wider city; once the city's shared favorites are set aside, what remains is the neighborhood's own. Where those places lie outside the area, people here make a trip that a business on the block could save them.
- Who those places draw. Qloo's audience data on the loved places gives the age groups and gender they lean toward, and with them the ad settings an owner can use.
- Cross-domain audiences for ads. What people here over-index on in music, podcasts, TV, films and brands becomes targeting that ad platforms accept: Spotify takes fans of named artists and podcasts, Google's custom segments take websites.
Qloo also supplies the block itself (places, ratings, hours, review keywords, Michelin and TripAdvisor references), the brand graph for the chain check, the heatmap of where a category's taste is strongest, tag search to turn "bakery" into a category, and search to find an owner's place. The README maps every question to its Qloo call. Without Qloo there is no demand, no pull, no taste and no audience: the product cannot exist. Each survey shows how many Qloo queries it read and the date of the oldest answer.
AI tools we used
In the product. Walk-in's agent runs on free models through OpenAI-compatible endpoints: Google Gemini first (gemini-3.6-flash, then gemini-3.5-flash, gemini-2.5-flash and gemini-3.1-flash-lite), then Groq (gpt-oss-120b, qwen3.8-27b and gpt-oss-20b). It reads the survey's evidence, tests hunches live against Qloo, and chooses, names and positions the concepts. The same chain writes the launch kit's ad copy and the "no data" answer shown struck through beside the concepts. Deterministic checks review every line the agent and the ad writer produce; the measurements and the design sheet come from no model, no number in the report does, and without a model the evidence rules run everything.
To build it. We built Walk-in with GitHub Copilot. Working as a coding agent under our direction, Copilot wrote much of the code and the tests, ran the checks, reviewed changes and screenshots of the interface, built and ran the head-to-head, and drafted documentation, including this text. We set the direction, decided what to keep and what to cut, and reviewed every change. The head-to-head's plain chatbot was Gemini on the app's own settings (gemini-3.6-flash, and gemini-3.5-flash or gemini-2.5-flash when it was overloaded), with no system prompt and no data.
The film. The launch film was built in code with Remotion; its narration is an AI voice (Orpheus by Canopy Labs, via Groq) and its music is generated in code.
Challenges we ran into
- Scale bias. Comparing a neighborhood with the whole city made "New American" look like a local passion everywhere. Comparing with same-size areas around the site fixed it.
- "Fans of a category" are often everyone. For some categories Qloo returns the area's general ranking. Walk-in detects that and uses the neighborhood's own signature taste instead.
- Models ignore constraints. Our own test runs caught Walk-in proposing dishes that need a fryer or a pizza oven for a unit with no hood, and ignoring an owner's request for budget prices. Rules are now enforced after the model answers.
- Water. The walks followed the streets, but the area supply was compared with was a circle that crossed the East River into Manhattan and covered the Nile around Zamalek. It is now a longer trip over the streets, and comparison areas that fall in open water are moved ashore or left out.
- Big areas. The free routing server answers trips of up to 60 minutes and 100 km, so areas stop there. OpenStreetMap's free servers time out on a big drive, so areas over 30 km² skip the cross-check and say so; when they don't answer for the kit's street map, OpenFreeMap's vector tiles do. A big drive's outline has thousands of points, and every Qloo request simplified it again on the server's event loop, until the host's health check restarted the server mid-survey; it is now simplified once, on a worker thread, so drives up to 60 minutes no longer slow the server (East Austin's 15-minute drive: 38 s with a 15-second stall before, 3.8 s now). And in a dense city a big area holds almost everything, so few gaps show; the brief says so before you run it.
- Age groups and chains. Qloo ranked 25–29 like 30–34, and 35–44 like 45–54, so the age focus offers the groups that rank differently. Qloo's brand search is fuzzy ("bakery" finds a chain with Bakery in its name), so a chain counts only when the request names it, and the verdict judges the category its stores are filed under.
- Features that said nothing. AI renders, a mood board, design tags, an interior description and partner suggestions looked good in a demo, but on real surveys they came out much the same everywhere or were invented. We cut them, so everything on the design sheet comes from the evidence.
- Coverage gaps. Qloo's place data missed a couple of real bakeries in East Austin; the OpenStreetMap cross-check catches them.
- Free tiers. Rate-limited models and a host that sleeps: a chain of models, answers replayed while the evidence is unchanged, and a front door that stays up while the engine wakes.
Accomplishments that we're proud of
- A head-to-head against a plain chatbot, on 15 storefront addresses chosen before any answer was seen: across 15 storefronts in 15 cities on 6 continents, a plain chatbot's top pick was a coffee shop, café or bakery at 10 of them (coffee shop 5, bakery 3, café 2); Walk-in's 15 top picks were 14 different kinds of place, each a place type people around that storefront rank highly. The method, every site's picks and the script are in the repo (eval/head-to-head), with what it does not show (see What we learned).
- Broad, checked use of Qloo: insights over places, place tags, brands, artists, films, shows, podcasts, heatmaps and audience data; the demographic signal; the brand graph; tag search; search; and entities.
- Every recommendation shows its reasoning: demand, supply, pull and the real places behind it.
- Every model-written line in a concept or an ad is checked before an owner sees it, and the page says what was repaired or dropped.
- A product, not a demo: saved and shareable surveys, a free launch kit, accounts with a privacy page and account deletion, and it works from Brooklyn to Cairo, on a city block or across a town.
What we learned
Taste data is most useful when it is compared, not just retrieved: a neighborhood against the areas around it, a category's fans against everyone, a place against the ones people already travel for. A model is most useful when it chooses and names, while the facts come from the data. And an honest "no clear lean" or "not cross-checked" is part of the answer: cutting what looked good but said nothing made the product more trustworthy.
What Walk-in does not claim
- Taste is not foot traffic, rent or sales. A gap is evidence for a decision, not a forecast.
- "Who you'd win" gives leans, not head counts, and Qloo has no audience data for some kinds of place (night clubs, for one); the section then hides.
- Areas over 30 km² skip the OpenStreetMap check and say so.
- Trips to favorites are straight-line distances, and "only" claims are true of the places Qloo and OpenStreetMap know on the survey date.
- The head-to-head does not show that the chatbot picks crowded categories: by Qloo's count both sides' picks faced the same median of 8 competitors. Walk-in's picks come from the same Qloo data the comparison reads, and 15 sites, with one chatbot answer each, is a small sample.
What's next for Walk-in
- Foot-traffic and rent data next to taste, so a gap comes with what the unit would cost and who walks past.
- Founding supporters: neighbors pledge to back the business they want, and pledges are collected only if enough of them join.
Business model
Free for owners. Brokers and landlords pay a subscription to survey their vacant listings and hand prospective tenants the kit.
- Price: $49 per broker per month, unlimited storefronts; always free for owners.
- Why it holds: in New York City about 11% of storefronts are vacant, and in many neighborhoods 80–90% of the vacant ones had already been empty for at least nine months (NYC Comptroller, June 2026). Landlords lose rent every empty month.
- Today: nothing is charged in the app. This is the plan.
Built With
- alembic
- cloudflare-pages
- docker
- fastapi
- github-actions
- google-identity
- groq
- mcp
- neon
- openfreemap
- overpass
- playwright
- postgresql
- pytest
- python
- qloo
- react
- render
- sqlalchemy
- sqlite
Log in or sign up for Devpost to join the conversation.