Curated lane only — the crowd never publishes. Every action here is logged.
Enter the desk key.
One flow, top to bottom. A menu you chart lands as a draft — nothing serves until you publish it at step 5.
1 · WHERE
2 · SOURCE
Picko teamWe read the menu ourselves. Dishes publish as Source: Picko.
Partner-providedThe brand or outlet supplied this menu. Dishes publish as Source: Partner, and the menu carries their name as the enterprise label.
3 · PAGES
Drop menu photos or a PDF here — or tap to choose. A PDF becomes its pages automatically. Pages accrete; they never replace.
4 · READING
5 · REVIEW & PUBLISH
The gates above are the FACTS every diner's verdict is computed from — reviewing them reviews what everyone sees. UNKNOWN is excluded under a matching standard, never trusted. To eyeball the real thing, publish and open the app at this place; Unpublish (in Charting) pulls it straight back.
NEW VENUE — mint the place + its draft menu
For partner outlets the places layer does not carry (and demo tenants). The /p/ link and QR exist the moment it is created; nothing serves until you publish. Lat/lng come from the partner sheet — the location doctrine forbids a made-up point.
Brand menus cover every outlet of the chain in one country; an outlet's own menu always beats the template. Diners' private snaps never appear here — only their aggregate demand (Monitor).
THE DISH LIBRARY — the owned asset
Loading…
Match rate is the number the library exists to move — the share of printed names on real snapped menus that land on a dish already known. Misses derive into new concepts (the library grows itself from snaps); a match is an instant read.
Places and menus are rented; this graph is owned — it is the asset. Browse-only here: batch authoring and gate re-verification live in Grow & QA below. Provenance decides who wins when a dish is seen again.
RECURRING VARIATIONS — what menus keep printing that the master does not say
The only lane where the master learns from menus, and it learns from repetition: distinct places, chain outlets collapsed to one brand. Watch-out proposals apply in one click; high-bar ones on derived rows auto-apply hourly, every apply in the ledger and the ops feed. Pork and beef evidence flips gates, which stays the override lane's reviewed door. Loosening never rides this lane; halal never.
Loading…
ADJUDICATION — two rows answering to one name
A shared match key is a wrong-match path: the matcher refuses it and the dish re-derives at full price. The cron reads each case against the written test — a defining ingredient one row lacks, of the kind that changes safety or diet. Distinct dishes get UNLINKED automatically (removing a key deletes nothing). Same-dish verdicts land HERE: merges delete rows, so the click is always yours.
Loading…
Rented layer — open it the day a deal needs it, not before.
COVERAGE BY CITY
Charted counts LIVE menus only — drafts are still on this desk.
THE LOCATION MASTER
Rented commodity layer (ranked by confidence). An outlet's two curated edges live here: its CHAIN (one menu per brand per country — outlets inherit it) and its VENUE (the mall/market that contains it). Tap a row to attach, detach or correct — corrections are locked against re-seeding and logged. Airports aren't in the venue layer yet (ingest lists only shopping centres and markets).
STRUCTURE PASS — chain keys & venue links
A per-deal tool, not a campaign — run it for a city the day a chain or venue deal needs it,
never for completeness. Free (no AI). Chains: outlets sharing one exact name (≥3 in a country)
get that chain key, so a brand menu charted once covers them all; fuzzy cases (スターバックス vs
Starbucks, "…(Yew Tee Point)" suffixes) are yours to attach above, one action per name.
Venue links: only when an outlet's name/address contains its mall's name, same map cell,
unambiguous. Your corrections always win; re-running only fills gaps.
SERVER QUEUE
—
The server picks up anything queued, one job at a time, and stops on its own at the per-job ceiling. Nothing runs until you start it.
GROW — author new dishes
Paste dish names, one per line. Each goes through the same derive → verify → enforce chain a
menu photo does, and lands as From menus provenance — so anything hand-authored keeps
winning. Names already in the graph are skipped free. Roughly 5¢ a dish; $25 ceiling per run.
A fixed vocabulary, not a text box — free text is how the graph ended up with five different Indian labels. A cuisine splits only when the split changes whether someone can eat the dish.
≈ $80. Runs on the server, one cuisine at a time — close this tab, it keeps going. Already-known dishes are skipped free, so re-running costs nothing.
The loop lives in this browser and stops when the tab closes. Useful for watching one cuisine closely.
Loop-until-dry: the model lists real dishes still missing, round by round; every round dedupes against every name AND alias the graph holds, authors only what is genuinely new, and stops at the target or after two rounds that found nothing. The sampler button above replays a fixed list; this one asks until the cuisine is exhausted.
QA — keep the asset honest
Adds the name as printed in its own script (肉骨茶, 비빔밥, Bánh mì) to rows that have none. Additive only — nothing is replaced. Pennies.
Rows carrying a permissive gate (vegetarian TRUE, contains-pork FALSE) with nothing recorded behind it get re-derived and re-verified — gates only, never the description. Gates can only tighten; anything still unjustified becomes UNKNOWN. Server job, ~$0.45 per 6 rows.
Loading…
DEMAND HEAT — where diners are snapping
The private lane's aggregate exhaust: place NAMES and counts only — never a diner's menu, never a device. Crowd points; crowd never publishes. Treat this as the charting priority queue.
RECENT SCANS
MENU FRESHNESS — days since attested
Curated menus only. Attestation (the named door) resets the clock; a menu nobody has attested counts from its last touch.
PASSES — granted codes the app redeems (pre-IAP)
Codes live only as hashes — the code shows ONCE at mint; copy it then. Delete stops future redemptions, but days already granted stay granted. Regenerate mints a fresh code on the same terms (a never-redeemed original is retired as lost; a spent one stays for the ledger).
OPS LOG — every hand that touched the facts
Loading…
THE WEEK'S FUNNEL — distinct devices, last 7 days
Opened → checked in at a place → saw a verdict → saved or asked. Devices, never people; the same phone across days counts once per stage.
14-DAY TREND
THE RECORD LOOP — last 30 days, event counts
Reactions → cards shared → landings opened → fit checks → store taps. The landing reports as one anonymous web source, so these count events, never visitors.
LANGUAGES — 30d devices
CITIES — 30d devices
WEEKLY LEDGER — banked in D1, survives AE retention
Raw events die at ~90 days; the rollup banks each completed week (cron: Mondays 03:00 UTC).