M01
Methodology
Every figure and constant on this page is read out of the code and the committed data packs at build time — the page cannot say one thing while the pipeline does another. The constants describe the pipeline's current rules; the shipped packs are an earlier compiled snapshot (build dates below), so a pack can predate a rule stated here.
The corpus
Listings come from a Google Places (New) quadtree crawl of each mapped region, committed to this repository as per-region packs. A pack keeps a listing's name, Google rating, rating count, price level, address, self-assigned Google type tags, website and place_id; listings whose business status is not OPERATIONAL are dropped when the pack is built. The crawl's collection dates are not recorded, so listing freshness is unknown — the pack build dates below are when each routing pack was compiled, not when its listings were fetched.
- San Francisco3,732 listings · pack built 2026-09-10
- Bay Area (9 counties)21,377 listings · pack built 2026-08-20
- Los Angeles metro49,261 listings · pack built 2026-08-20
- New York City27,573 listings · pack built 2026-08-20
The mapped regions overlap deliberately — the Bay Area pack includes San Francisco — so the pack counts above are not additive.
The road graph
Routing runs over an OpenStreetMap road graph: drivable highway=* ways only, filtered by a car-access projection (a way is out when its motorcar/motor_vehicle/vehicle/access tags deny general traffic). Ways are contracted to junctions and endpoints, keeping one extra mid-way node every 400 m so snapping stays accurate — those kept nodes are not intersections. Only the largest strongly connected component ships, and minor roads more than 4 km from every listing are dropped. A listing joins the crawl's graph only when it sits within 1,000 m of a graph node.
The speed model
Every edge weight is a free-flow travel time: segment length divided by speed, where speed is 0.85 times the tagged OSM maxspeed — people rarely average the posted limit in a city — or a per-class default when the way is untagged, plus 4 seconds per intersection, split half over each real endpoint. Each weight is stored as a 16-bit decisecond, so the largest representable edge is 65,535 deciseconds. No traffic, no turn restrictions, no parking hunt, no queue at the counter.
motorway100 km/hmotorway_link60 km/htrunk80 km/htrunk_link50 km/hprimary50 km/hprimary_link40 km/hsecondary45 km/hsecondary_link35 km/htertiary40 km/htertiary_link30 km/hunclassified30 km/hresidential25 km/hliving_street10 km/hroad25 km/h
Routing, in your browser
Route calculations happen locally: the region pack downloads once, then a one-to-many Dijkstra over the compressed graph runs in a Web Worker and answers in milliseconds. Distances are computed out to a 2-hour horizon; a place beyond it is simply uncharted.
What does leave the page: map tile requests for the area on screen, a coarse region lookup on a first bare visit, and the pin a shared link carries.
Scores and rankings
The quality score is the listing's Google rating scaled to 100 — a rating-derived proxy, not a taste, freshness or consistency measurement. Static reports rank the top 10 highest-rated listings of each frontier, and only listings with at least 20 ratings are eligible; equal ratings break toward the larger sample. Unrated places cannot be charted.
What counts as a frontier
A listing joins a frontier when its own name or Google Places type tags match the category rule — cuisine alone is never inferred. The committed rules:
- FrontierBobaits name has a word starting with “boba” or mentions “bubble tea” or “milk tea”, or its Google type is Tea House, Tea Store or Bubble Tea Store
- FrontierPizzaits name mentions “pizza” or “pizzeria”, or its Google type is Pizza Restaurant, Pizza Delivery or Pizza Takeout
- FrontierHalalits Google type is “Halal Restaurant” or its name contains “halal”
- FrontierTacosits name mentions “taco”, “tacos” or “taqueria”, or its Google type is Taco Restaurant
- FrontierCoffeeits name mentions “coffee”, “café” or “espresso”, or its Google type is Coffee Shop, Cafe, Coffee Stand, Coffee Roastery or Espresso Bar
- FrontierRamenits name contains “ramen” or its Google type is Ramen Restaurant
- FrontierBurgersits name mentions “burger”, or its Google type is Hamburger Restaurant
- FrontierSushiits name mentions “sushi”, or its Google type is Sushi Restaurant
Honest limits
Drive times are free-flow estimates, not promises — the frontier cannot see the line out the door. Crawl freshness is unknown: collection dates were not recorded, and each pack is a fixed snapshot of its crawl. Google's Places terms restrict caching API content beyond narrow exceptions.
Only places whose Google listing says “Halal Restaurant” or whose name contains “halal”. Cuisine alone is never treated as certification — many halal kitchens are missing here, and listed status is unverified.
FrontierFood is an independent parody research project about the geospatial accessibility of lunch. Not affiliated with Cognition or Google.