Inspiration

People who move for a job pick a neighborhood from rent listings, commute maps and a friend's guess. Months later they find out whether it actually fits their life: whether the coffee, the music, the food and the people are theirs. Relocation guides rank neighborhoods for everyone at once, and a general-purpose chatbot says "East Austin is trendy", which is the same answer for everyone. I wanted an agent that answers a personal question with evidence: where in this city do the people who love what I love actually concentrate, and what proves it?

What it does

  • Understands your taste. You write what you love in plain words ("Phoebe Bridgers, The Bear, ramen, bouldering, natural wine"). A model types each interest, and Newcomer resolves it in Qloo's taste graph the way Qloo's own harness does: an exact name is preferred, and a near-miss is used only if it resembles your words. When there's no exact name, or several things share it (two films called "Dune"), the page says so and "Not it?" lets you pick another candidate, in any kind (the book or the film), and run again. Anything Qloo doesn't know is reported as not found, never guessed. You can type in your own language: the page shows what you wrote and searches Qloo by the English name ("פאודה" is looked up as Fauda, accents kept for names like Björk).
  • Finds where that taste lives. Qloo's heatmap scores every map cell of the city for the people who like your artists, shows, films and music genres. Newcomer groups the cells into areas of about 1 km and ranks them by the mean percentile of all their cells, so one hot block can't outrank a whole hot area; areas with your kinds of places within reach (your ramen shops, your bouldering gym) get a small boost, so every taste you typed counts. Each area is named by the neighborhood Qloo gives the places there.
  • Shows the evidence. For each neighborhood: the places that ARE your food and activity tastes (ramen shops, bouldering gyms, natural wine bars) and the places people with your taste rate highly, both from Qloo.
  • Plans a scouting weekend. Saturday in the best match, Sunday in the runner-up, one place per part of the day, using Qloo's own time-of-day fit for each place. Test the move before you sign a lease.
  • Shows its work. A "How we know" panel lists every Qloo call with its parameters, status, result count and time; then Newcomer's own rules, labeled apart from Qloo's results; then the limits of the answer.
  • Works for agents too. The same pipeline is an MCP tool (find_neighborhoods). When a name is ambiguous, the tool's answer lists the alternatives with their Qloo IDs and tells the agent to ask the person, then call again with the right ID.

Example (a real run): moving to Austin with those five tastes gives Downtown (its best ~1 km area averages in the top 21% of Austin for this taste), then Brentwood and Zilker, with East Cesar Chavez lifted into the top five by LoLo and Ramen Tatsu-Ya, and a weekend from the Stevie Ray Vaughan statue to ACL Live. Brooklyn with Radiohead, Succession and jazz gives Williamsburg, then Bushwick. "Portland, ME" stays in Maine.

How I built it

  • Cloudflare Worker (TypeScript) serving the page, a JSON API and an MCP server (@modelcontextprotocol/server, Streamable HTTP). Workers AI (Llama 4 Scout) only turns free text into typed interests.
  • Qloo calls: /search (entities, 5 candidates), /v2/tags with semantic search (20 candidates; each tag lists the entity types it applies to, which decides whether it goes on the map or picks places), /entities by ID for an entry picked under "Not it?" (its own type decides how it is used; a picked tag is used by its family), /v2/insights heatmap for the city Newcomer located, and /v2/insights places near each area and across the city filtered by your food and activity tags.
  • Grounded geography: Open-Meteo locates the city (so "Portland, ME" isn't Portland, Oregon); Qloo's own locality is shown and checked against it; OpenStreetMap names an area only where Qloo has no neighborhood.
  • Built for the free plan: every fetch and cache call is counted against Cloudflare's 50-subrequests-per-request limit, Qloo calls are paced (one every 340 ms) with one bounded retry after a 429, results are cached for a day, and each address gets 20 new searches an hour (a saved answer is free).
  • Tests: 126 automated tests against a mock shaped like the live API (including 563 realistic name inputs and 457 ways of typing a city), plus more than 20 live searches across the US, London, Berlin and Tel Aviv.

Challenges I ran into

The first time I ran the app against the live API, several assumptions from the docs and from my mock turned out wrong, so I measured instead of guessing and rebuilt the middle of the pipeline:

  • the heatmap rejects take above 50 (my first version sent 80, so every search would have failed), ignores take and page, has no neighborhood boundary, and returns every cell with its percentile;
  • cuisine and activity tags don't move the heatmap at all, but they filter places well, so they became "your kinds of places";
  • the same word comes back in many tag families ("Ramen" as a cuisine, a food item, a media keyword), and Qloo's semantic search returns something even for nonsense, so a near-miss is only accepted if it resembles what was typed;
  • the sixth call within about a second gets a 429 (5 at once all pass, 6 lose one; a steady 4 a second loses one, 3 a second loses none), so a search paces its calls.

Each of these is written up in the README ("What the live API taught us").

Accomplishments that I'm proud of

  • Every claim on the page traces to a specific Qloo call, and Newcomer's own rules are labeled as such.
  • It asks instead of guessing: ambiguous names are flagged and can be changed in one click (or by the agent, via IDs).
  • The same answer works for a person on the web and for an agent over MCP.

What I learned

Taste data is most useful as evidence, not as a verdict. Showing which places carry a taste, and saying plainly what the result does not establish (it is about groups, not about you; rent, commute and safety are out of scope), made the answer more convincing, not less.

What's next

  • Compare two cities for the same person ("Austin or Denver?").
  • Let the person mark places they liked on the scouting weekend and re-rank.
  • Add rent and commute from open data as separate, clearly labeled inputs.

Try it

Built With

Share this project:

Updates

Submission history