尚未收集仓库信息。
尚未检测到更新。GitHub 发布版本后会显示在这里。
A hand-picked guide to independent food and drink, researched with AI and reviewed by a person.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗The problem. Review apps reward the places that are already famous. The hole-in-the-wall spots locals actually love get buried under chains, ads, and star inflation.
What it is. A hand-picked guide to independent food and drink in the Bay Area, San Diego and Portland: 335 places, each with a one-line tagline, a story, a signature order, and a Hidden Gem Score. You collect stamps in a passport, let Surprise me deal you a place, or browse by neighborhood and time of day.
How it was made. AI did the heavy lifting and a person made every call. A pipeline screened 17,506 venues from open map data, filtered out chains, and had Claude (with web search) discover and research candidates. Every published place was reviewed by hand. Total AI research cost: about $70.
Built by Dan West, an AI strategy and operations leader with nearly 20 years in IT, by directing Claude Code as the engineering team.
| For a visitor | Under the hood | |
|---|---|---|
| Only independents | No chains, no ads, no paid placement. | OpenStreetMap data with a chain and landmark filter: 17,506 venues down to 12,630 independents. |
| An honest score | Five marks you can see, not a mystery star rating. | Uniqueness 25%, Atmosphere 20%, Story 20%, Signature item 15%, Under the radar 20%, computed from one shared formula and never typed in. |
| "Deep cut" means it | Famous places can't pass as secrets. | A place covered by two or more press outlets is relabeled an "open secret." |
| Right now | Finds what fits the time of day you're in. | Time-of-day labels per place, by Bay Area, San Diego or Portland local time. |
| Your passport | Stamps, notes, and ratings that are yours. | Stored only on your device. No account needed. |
| AI as a researcher, not an author of record | Every word was checked by a person before it went live. | Claude drafts cards from web research; drafts stay hidden until reviewed. |
flowchart TB
OSM["OpenStreetMap<br/>17,506 venues"] --> F["Chain and landmark filter<br/>12,630 independents"]
F --> D["AI discovery<br/>Claude + web search"]
D --> S["Selection<br/>dedupe · match to map · balance"]
S --> R["AI research<br/>drafts each card"]
R --> H{"Human review"}
H -- approved --> L["Live guide<br/>253 places"]
H -- skipped --> X["Left out, with the reason kept"]
Each step is a script in scripts/pipeline/, budget-capped, with a free --estimate mode before anything is spent. The research briefs and rubric live in prompts/. Full detail: How places are found.
flowchart LR
subgraph Build["Build time · Astro"]
Data[("places.json<br/>reviewed places")] --> Pages["Static pages<br/>front, explore, place, story"]
Data --> OG["Share images<br/>generated per place"]
end
subgraph Edge["Cloudflare"]
Assets["Static assets"]
Worker["Worker · forms API"] --> D1[("D1<br/>messages · tips · sign-ups")]
Worker --> Mail["Email alert<br/>to the owner"]
Worker --> TS["Turnstile<br/>bot check"]
end
Pages --> Assets
Browser["Browser<br/>passport in localStorage"] --> Assets
Browser --> Worker
Pages are pre-rendered, so the guide is fast and cheap to run. The only server code handles the contact, suggestion, and sign-up forms. Detail: docs/architecture.
main installs from the lockfile, runs the API tests, and runs a full production build.nosniff, cross-origin window isolation, same-origin framing, a strict referrer policy, and camera, microphone, and payment access disabled. Location is allowed for this site only, for the "near me" sort.npm ci
npm run dev # http://localhost:4321
npm run build # static build plus share images
The research pipeline needs an Anthropic key in .env and always offers a free --estimate first:
node --env-file=.env scripts/pipeline/05-enrich.mjs --estimate
src/pages/ Routes: front page, explore, place pages, passport, story, how the score works, forms
src/components/ The passport, ticket cards, neon signs, scores, map sheet, Surprise me deck, header and footer
src/lib/ Scoring formula, place helpers, map style, config
src/data/places.json The reviewed places that ship
worker/ Cloudflare Worker: router (index), guards (http, security), validation, D1 store, notifications, tests
migrations/ D1 schema
scripts/pipeline/ The research pipeline, steps 01 to 07
prompts/ Research briefs and the enrichment rubric
data/ Pipeline inputs, drafts, and review sheets
docs/ Architecture, data pipeline, decision records, screenshots
I designed the product, set the editorial rules (independents only, honest scores, every place reviewed by a person), and directed Claude Code as the engineering team. Claude wrote most of the code and drafted the place research; I reviewed and approved what went live. The working agreement is in AGENTS.md; the reasoning behind the bigger choices is in the decision records.
Stack: Astro 7 · MapLibre GL with OpenFreeMap tiles · Cloudflare Workers, D1, Turnstile, and Email · Anthropic API with web search and Message Batches.
Icarian Forge is my personal AI lab, where I build and test what I advise on. The code is © 2026 Dan West, all rights reserved; see LICENSE. Map data © OpenStreetMap contributors, see NOTICE.
Get in touch: LinkedIn · [email protected]