From 7e1b200bea015a611bf392b20fee82a0ab58de78 Mon Sep 17 00:00:00 2001
From: rzen
Date: Mon, 4 May 2026 18:57:04 -0400
Subject: [PATCH] site: editorial tooling, grid masonry fix, new reviews +
finds
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
UI / dev tooling
- /find/ index: sort by file birthtime desc (sub-day chronology even when
many finds share the same frontmatter date); render the captured-at on
its own line under the host (~0.65rem mono muted)
- New dev-only filter at the top of /find/: All / Not in lists, persisted
in localStorage; "not in lists" hides finds referenced by any superpost
- New editorial-tags chip strip on each find card (dev-only): selected
tags visible by default, full picker on hover/focus-within with a "…"
button for arbitrary tag entry; clicks copy /edit-find-tag
to the clipboard via the existing EditConfirm singleton
- New optional editorialTags: string[] field on the find collection
- New src/data/editorial-tags.json — master list of available tags (initial
set: ["delete"]); display order follows file order
/grid/ now uses the JS Masonry component instead of CSS column-count, so
the middle column no longer "dips"; tile hover updated to match the home
page's accent-glow / no-translate style
Content
- New review: apex-markdown-processor (graduated from find of same slug;
hero reused from the find folder)
- New review: sindre-sorhus-older-mac-apps (graduated; intentionally
hero-less per the source page's text-only design)
- New review: superkey (added by user; hero wired in src/lib/hero.ts)
- 24 new finds captured by /daily-finds across travel, jokes, quotes,
product picks, and indie tools
- 2 new finds superposts: 2026-05-04-a-small-atlas, 2026-05-04-off-until-needed
Misc
- daily-finds.log.md and candidate-sources.md updated with the day's runs
- build-finds skill prompt iterated by user
---
.claude/skills/build-finds/SKILL.md | 36 ++++-
candidate-sources.md | 5 +
daily-finds.log.md | 109 +++++++++++++
src/components/EditConfirm.astro | 11 ++
src/components/FindCard.astro | 143 +++++++++++++++++-
src/content.config.ts | 1 +
.../find/and-vinyly-ashes-records/hero.jpg | Bin 0 -> 513677 bytes
.../find/and-vinyly-ashes-records/index.mdx | 14 ++
.../anker-8in1-usbc-hub-tablet-stand/hero.jpg | Bin 0 -> 149182 bytes
.../index.mdx | 14 ++
.../find/apex-markdown-processor/hero.png | Bin 0 -> 506737 bytes
.../find/apex-markdown-processor/index.mdx | 15 ++
.../find/cursor-camp-neal-fun/hero.png | Bin 0 -> 188165 bytes
.../find/cursor-camp-neal-fun/index.mdx | 13 ++
.../garden-of-eden-swimming-hole/hero.jpg | Bin 0 -> 88846 bytes
.../garden-of-eden-swimming-hole/index.mdx | 14 ++
.../find/gemini-giant-route-66/hero.jpg | Bin 0 -> 87080 bytes
.../find/gemini-giant-route-66/index.mdx | 14 ++
.../find/hesse-on-wonder-education/index.mdx | 17 +++
src/content/find/joke-emineminence/index.mdx | 13 ++
.../find/joke-tinder-matches/index.mdx | 15 ++
src/content/find/joke-wee-cough/index.mdx | 17 +++
src/content/find/kai-hakone-ryokan/hero.jpg | Bin 0 -> 204285 bytes
src/content/find/kai-hakone-ryokan/index.mdx | 14 ++
.../hero.jpg | Bin 0 -> 57710 bytes
.../index.mdx | 13 ++
.../kikkerland-mozart-kitchen-timer/hero.jpg | Bin 0 -> 20248 bytes
.../kikkerland-mozart-kitchen-timer/index.mdx | 13 ++
src/content/find/nimmo-bay-resort/hero.jpg | Bin 0 -> 634509 bytes
src/content/find/nimmo-bay-resort/index.mdx | 13 ++
.../find/noir-japanese-cookies/hero.jpg | Bin 0 -> 125911 bytes
.../find/noir-japanese-cookies/index.mdx | 15 ++
.../find/quote-goldwyn-new-cliches/index.mdx | 15 ++
.../find/quote-hinton-immortality/index.mdx | 15 ++
.../quote-reeve-superman-wisdom/index.mdx | 15 ++
src/content/find/seward-time-capsule/hero.png | Bin 0 -> 305763 bytes
.../find/seward-time-capsule/index.mdx | 14 ++
.../sindre-sorhus-older-mac-apps/index.mdx | 14 ++
.../snewpapers-newspaper-archive/index.mdx | 14 ++
src/content/find/superkey/index.mdx | 1 +
src/content/find/terminal-widget/hero.jpg | Bin 0 -> 46114 bytes
src/content/find/terminal-widget/index.mdx | 14 ++
src/content/find/torre-da-bora/hero.jpg | Bin 0 -> 166233 bytes
src/content/find/torre-da-bora/index.mdx | 13 ++
.../find/unsolicited-book-covers/hero.jpg | Bin 0 -> 67794 bytes
.../find/unsolicited-book-covers/index.mdx | 13 ++
.../white-merlyn-learn-something/index.mdx | 16 ++
.../finds/2026-05-04-a-small-atlas/index.mdx | 18 +++
.../2026-05-04-off-until-needed/index.mdx | 16 ++
.../reviews/apex-markdown-processor/hero.png | Bin 0 -> 506737 bytes
.../reviews/apex-markdown-processor/index.mdx | 28 ++++
.../sindre-sorhus-older-mac-apps/index.mdx | 21 +++
src/content/reviews/superkey/hero.jpg | Bin 0 -> 196518 bytes
src/content/reviews/superkey/index.mdx | 21 +++
src/data/editorial-tags.json | 3 +
src/lib/hero.ts | 4 +
src/pages/find/index.astro | 121 ++++++++++++++-
src/pages/grid.astro | 103 +++++--------
src/pages/index.astro | 4 +-
59 files changed, 927 insertions(+), 75 deletions(-)
create mode 100644 src/content/find/and-vinyly-ashes-records/hero.jpg
create mode 100644 src/content/find/and-vinyly-ashes-records/index.mdx
create mode 100644 src/content/find/anker-8in1-usbc-hub-tablet-stand/hero.jpg
create mode 100644 src/content/find/anker-8in1-usbc-hub-tablet-stand/index.mdx
create mode 100644 src/content/find/apex-markdown-processor/hero.png
create mode 100644 src/content/find/apex-markdown-processor/index.mdx
create mode 100644 src/content/find/cursor-camp-neal-fun/hero.png
create mode 100644 src/content/find/cursor-camp-neal-fun/index.mdx
create mode 100644 src/content/find/garden-of-eden-swimming-hole/hero.jpg
create mode 100644 src/content/find/garden-of-eden-swimming-hole/index.mdx
create mode 100644 src/content/find/gemini-giant-route-66/hero.jpg
create mode 100644 src/content/find/gemini-giant-route-66/index.mdx
create mode 100644 src/content/find/hesse-on-wonder-education/index.mdx
create mode 100644 src/content/find/joke-emineminence/index.mdx
create mode 100644 src/content/find/joke-tinder-matches/index.mdx
create mode 100644 src/content/find/joke-wee-cough/index.mdx
create mode 100644 src/content/find/kai-hakone-ryokan/hero.jpg
create mode 100644 src/content/find/kai-hakone-ryokan/index.mdx
create mode 100644 src/content/find/kikkerland-luchador-bottle-openers/hero.jpg
create mode 100644 src/content/find/kikkerland-luchador-bottle-openers/index.mdx
create mode 100644 src/content/find/kikkerland-mozart-kitchen-timer/hero.jpg
create mode 100644 src/content/find/kikkerland-mozart-kitchen-timer/index.mdx
create mode 100644 src/content/find/nimmo-bay-resort/hero.jpg
create mode 100644 src/content/find/nimmo-bay-resort/index.mdx
create mode 100644 src/content/find/noir-japanese-cookies/hero.jpg
create mode 100644 src/content/find/noir-japanese-cookies/index.mdx
create mode 100644 src/content/find/quote-goldwyn-new-cliches/index.mdx
create mode 100644 src/content/find/quote-hinton-immortality/index.mdx
create mode 100644 src/content/find/quote-reeve-superman-wisdom/index.mdx
create mode 100644 src/content/find/seward-time-capsule/hero.png
create mode 100644 src/content/find/seward-time-capsule/index.mdx
create mode 100644 src/content/find/sindre-sorhus-older-mac-apps/index.mdx
create mode 100644 src/content/find/snewpapers-newspaper-archive/index.mdx
create mode 100644 src/content/find/terminal-widget/hero.jpg
create mode 100644 src/content/find/terminal-widget/index.mdx
create mode 100644 src/content/find/torre-da-bora/hero.jpg
create mode 100644 src/content/find/torre-da-bora/index.mdx
create mode 100644 src/content/find/unsolicited-book-covers/hero.jpg
create mode 100644 src/content/find/unsolicited-book-covers/index.mdx
create mode 100644 src/content/find/white-merlyn-learn-something/index.mdx
create mode 100644 src/content/finds/2026-05-04-a-small-atlas/index.mdx
create mode 100644 src/content/finds/2026-05-04-off-until-needed/index.mdx
create mode 100644 src/content/reviews/apex-markdown-processor/hero.png
create mode 100644 src/content/reviews/apex-markdown-processor/index.mdx
create mode 100644 src/content/reviews/sindre-sorhus-older-mac-apps/index.mdx
create mode 100644 src/content/reviews/superkey/hero.jpg
create mode 100644 src/content/reviews/superkey/index.mdx
create mode 100644 src/data/editorial-tags.json
diff --git a/.claude/skills/build-finds/SKILL.md b/.claude/skills/build-finds/SKILL.md
index af6cbeb..2530c56 100644
--- a/.claude/skills/build-finds/SKILL.md
+++ b/.claude/skills/build-finds/SKILL.md
@@ -21,15 +21,41 @@ Invoke from inside the `unique.rzen.dev` repo.
### 1. Determine candidate pool
-- If the user provided explicit slugs: use those.
-- If the user provided a theme phrase only: scan all finds, surface the 8–12 that best fit the theme.
-- If neither: scan recent (last ~14 days) finds that are **not yet referenced** by any existing superpost (read every `items[]` array; subtract). From the unreferenced pool, propose 1–3 thematic clusters of 5–10 finds each, with a candidate theme phrase per cluster.
+- **If the user provided explicit slugs (seed mode)** — usually the case when the user clicks the "Make a finds collection" button on `/find/`. Treat the slugs as a *seed*, not a final list.
+ 1. Read each seed find's frontmatter (`tags`, `topics`, `subtitle`, `description`) and body.
+ 2. Infer the through-line — the smallest phrase that captures what these finds have in common (a virtue, a use, a feeling, a structural pattern). Lean specific. Good: *"single-virtue tools"*, *"things that pour clean"*, *"objects that exist for no reason except someone wanted them to"*, *"vintage-leaning everyday carry"*. Bad: *"useful things"*, *"cool stuff"*.
+ 3. Compute the **unreferenced pool**: every find that does NOT appear in the `items[]` array of any existing `src/content/finds/*.mdx` superpost. The seed slugs may or may not be in this pool — they're the seed regardless.
+ 4. From the unreferenced pool, find every entry that fits the inferred theme. Use frontmatter signals (tags, topics, subtitle) and body content. Don't reach: three weakly-fitting items is worse than zero. If a candidate's fit feels strained, drop it.
+ 5. Combine `seed + qualifying unreferenced matches`, deduped. Cap at **8 total** (per sizing notes below). If the combined list exceeds 8, drop the weakest fits — never drop a seed slug; if the seed itself is more than 8, ask the user which to drop.
+ 6. Produce one cluster (theme phrase + final items list). Continue to step 2 to confirm before writing.
+
+- **If the user provided a theme phrase only:** scan all finds, surface the 8–12 that best fit the theme.
+
+- **If neither:** scan recent (last ~14 days) finds that are not yet referenced by any existing superpost. From the unreferenced pool, propose 1–3 thematic clusters of 5–10 finds each, with a candidate theme phrase per cluster.
Re-use is allowed — a find can appear in multiple superposts under different themes. But by default, prefer surfacing **unreferenced** finds first; only reach for re-uses when the theme genuinely calls for them.
### 2. Confirm the cluster
-If proposing clusters, show the user:
+Always show the proposed cluster(s) before writing anything. The exact format depends on which path step 1 took.
+
+**Seed mode** (slugs given) — split the seed from the expansion so the user can see what the inferred theme pulled in:
+
+```
+Theme inferred from seed: ""
+
+Seed (your selection):
+ - :
+ - ...
+
+Expansion (unreferenced finds matching the theme):
+ - :
+ - ...
+
+Final list (capped at 8): items
+```
+
+**Multi-cluster mode** (no input):
```
Cluster A — ""
@@ -41,7 +67,7 @@ Cluster B — ""
...
```
-Wait for the user to pick a cluster (or refine). Don't write anything until confirmed.
+Wait for the user to confirm, refine the theme phrase, or drop/swap items. Don't write anything until confirmed.
### 3. Write the superpost
diff --git a/candidate-sources.md b/candidate-sources.md
index 030143c..ebe84af 100644
--- a/candidate-sources.md
+++ b/candidate-sources.md
@@ -2,6 +2,11 @@
Newly nominated sources awaiting review before promotion to `sources.json`. Each entry says where it came from and the case for adding it. Vet manually, then move to the main list.
+## 2026-05-04
+
+- **Tokyo Paladin** — https://tokyopaladin.substack.com/ — surfaced via Daring Fireball Linked List crediting their post on Noir, the Yamazaki "Japanese Oreo." Substack focused on Japanese consumer products and cultural curiosities, in the vein of "things you can only buy in Japan that quietly outclass their global competitors." Substack feed should be curl-friendly via the standard `/feed` pattern. Strong candidate for the gifts and general-delight buckets.
+- **PetaPixel** — https://petapixel.com/ — surfaced via Kottke link to NASA's Artemis II photo dump. Long-running photography publication; coverage spans gear, photo essays, and historical archives — overlaps general-delight (photo finds) more than tools. WebFetch-friendly historically. Vet for noise-vs-signal across topics before adding.
+
## 2026-05-03
- **Robin Good's "Best Curated Newsletters"** — https://robingood.substack.com/ — surfaced via WebSearch. Annual list of curated newsletters; less a daily-find source than a yearly source-of-sources to scan once and harvest. Worth checking the most recent edition for newsletters in our brief that we don't yet track.
diff --git a/daily-finds.log.md b/daily-finds.log.md
index 6cee940..98f96d7 100644
--- a/daily-finds.log.md
+++ b/daily-finds.log.md
@@ -2,6 +2,80 @@
Running record of every candidate surfaced by `/daily-finds`. The chosen pick of the day is prepended with `[chosen]`. Source attribution per candidate lets us track which sources produce winners over time.
+## 2026-05-04 — review: apex-markdown-processor
+
+Graduated from find captured 2026-05-04, source: Brett Terpstra. Reused the find's hero.png (terminal-rendering screenshot). Category `writing`; tags merge the find's set with `macos` and `open-source`.
+
+## 2026-05-04 — review: sindre-sorhus-older-mac-apps
+
+Graduated from find captured 2026-05-04, source: r/macapps. New category `indie` introduced for the editorial-about-developer-practice angle (no existing category fit). No hero asset — `sindresorhus.com/apps/older-versions` is intentionally text-only (no `og:image`, no `` tags, only an inline SVG favicon); review matches the find in being hero-less.
+
+## 2026-05-04 — capture run
+
+Sources scanned: 60 total — 16 hits, ~24 empty/unproductive, 11 blocked/broken, 9 skipped (per sources.json `fetch: skip`).
+Productive sources: r/macapps (1), Brett Terpstra (2), Hacker News — Show HN (1), Tools and Toys (1), Kikkerland (2), Kottke.org (2), Open Culture (1), Daring Fireball — Linked List (1), Boutique Homes (1), Wallpaper* Travel (1), The Outbound Collective (1), Roadtrippers Magazine (2), AFAR (1), Quote Investigator (3), The Marginalian (2), r/dadjokes (3).
+Unproductive but live: MacStories (top items already captured 2026-05-03), One Thing Well (top posts already captured), Six Colors (storage-tip post + travel-tech post — only known products), Cool Tools (Embassy of the Free Mind already captured + Frequent Fliers / Pants / Injection-Enormous Smallness all roundup-format, no single virtue), Recomendo (issue #513 = Stillgram/Aootek/Magnified Sand — all three already captured 2026-05-03), Cool Material (only feature-essays and partner posts), Kevin Kelly thetechnium (essays + weekly link roundups, no new specific products), Carryology (4 posts — only the Wingback SOLIDSTATE buckle is product-specific, but it's a Kickstarter shipping October 2026 → fails "currently buyable"), A Continuous Lean (2024-2025 posts only), Put This On (internal shop posts and evergreen guides), Standard & Strange Journal (Field Guides — historical garment essays), Outlier (Injex/Cannabiscotton/Ramielust drops with no readable virtues), Snow Peak (SPA — only nav anchors), Messy Nessy Chic (Vol. 772 just published; per-item links inside aren't extractable from the index summary), Things Magazine (link roundups), OSXDaily (procedural tips this week — Secure Erase, Compromised Passwords, WindowServer fix — none rise above generic how-to), The Eclectic Light Company (already-captured Finder Tags post + niche VM internals), Dr. Drang — leancrew.com (4 posts — Apple-accessory commentary and email-blocking critiques), Werd.com (10 best-of listicles), StyleForum (homepage shows only affiliate vendor threads), Atlas Obscura (curl returned articles index but no qualifying virtues extractable), r/BuyItForLife (anecdote photos and "is this legit?" posts), r/shortcuts (top item is dynamic-wallpaper recreation — link is image-only with no canonical iCloud Shortcut URL in the body), Wikiquote (recent edits don't surface easily-quotable picks), Uses This (interview titles only — tools live behind individual interview pages this run), Hacker News — Show HN (~half are dev-libs / dashboards; only Snewpapers crossed the bar), Product Hunt (not productive in prior runs, skipped this sweep).
+Blocked or broken this run: TidBITS (WebFetch 403 — persistent across runs), Uncommon Goods (`/new-arrivals` and `/fun/new-arrivals` both 404 — needs URL audit), Kikkerland `/collections/new-products` 404 (used `/collections/all` as workaround), Snow Peak `/collections/new-arrivals` (Shopify SPA — same root cause as MoMA), MoMA Design Store (still SPA — only `moma-e-gift-card` extractable, third run with this signature), Unusual Hotels of the World (4KB SPA shell again — third confirmation, should be `fetch: skip`), 9to5Mac `/guides/` (renders only category nav on the homepage — needs a per-category fetchUrl override), A.Word.A.Day (homepage doesn't show the daily entry inline — needs a `fetchUrl` override pointing at `/words/today.html`), icanhazdadjoke API (`/api/random?count=15` 404 — endpoint syntax may have changed), snewpapers.com (returns HTTP 406 "Your browser is not supported" to iPhone Safari UA — still wrote the find from the Show HN summary, hero fetch failed), Reader's Digest Jokes (skipped this run — known persistent 403).
+Skipped (per sources.json): The Sweet Setup, Indie App Sunday (Mastodon), Gear Patrol, The Awesomer, Permanent Style, Heddels, Mr Porter Journal, Spotted by Locals, The Browser.
+
+### Captured finds
+
+- sindre-sorhus-older-mac-apps — Sindre Sorhus' Older-macOS App Versions — source: r/macapps
+- terminal-widget — TerminalWidget — source: Brett Terpstra
+- apex-markdown-processor — Apex Markdown Processor — source: Brett Terpstra
+- snewpapers-newspaper-archive — Snewpapers — source: Hacker News — Show HN
+- anker-8in1-usbc-hub-tablet-stand — Anker 8-in-1 USB-C Hub & Tablet Stand — source: Tools and Toys
+- kikkerland-mozart-kitchen-timer — Mozart Kitchen Timer — source: Kikkerland
+- kikkerland-luchador-bottle-openers — Luchador Bottle Openers — source: Kikkerland
+- cursor-camp-neal-fun — Cursor Camp — source: Kottke.org
+- unsolicited-book-covers — Jenny Volvovski's Unsolicited Book Covers — source: Kottke.org
+- and-vinyly-ashes-records — And Vinyly — source: Open Culture
+- noir-japanese-cookies — Noir (Yamazaki) — source: Daring Fireball — Linked List
+- torre-da-bora — Torre Da Bora — source: Boutique Homes
+- kai-hakone-ryokan — Kai Hakone — source: Wallpaper* Travel
+- garden-of-eden-swimming-hole — Garden of Eden Swimming Hole — source: The Outbound Collective
+- seward-time-capsule — World's Largest Time Capsule, Seward NE — source: Roadtrippers Magazine
+- gemini-giant-route-66 — Gemini Giant — source: Roadtrippers Magazine
+- nimmo-bay-resort — Nimmo Bay Resort — source: AFAR
+- quote-reeve-superman-wisdom — Christopher Reeve — Superman wisdom — source: Quote Investigator
+- quote-hinton-immortality — Geoffrey Hinton — secret of immortality — source: Quote Investigator
+- quote-goldwyn-new-cliches — Samuel Goldwyn — "Let's have some new clichés" — source: Quote Investigator
+- hesse-on-wonder-education — Hermann Hesse on Wonder & Education — source: The Marginalian
+- white-merlyn-learn-something — T.H. White / Merlyn — "the best thing for being sad" — source: The Marginalian
+- joke-wee-cough — The Wee Cough Joke — source: r/dadjokes
+- joke-emineminence — The Emineminence Joke — source: r/dadjokes
+- joke-tinder-matches — The Tinder Matches Joke — source: r/dadjokes
+
+### Hero coverage
+
+- Heroes saved: 15 of 16 attempted (sindre-sorhus + 5 quotes + 3 jokes intentionally text-only).
+- Single hero failure: snewpapers-newspaper-archive — site returns HTTP 406 "browser not supported" to iPhone Safari UA, no extractable images on the rendered shell, topic doesn't lend itself to a Wikipedia fallback. Accepted as no-hero.
+- Wikipedia fallback used: garden-of-eden-swimming-hole → `Henry_Cowell_Redwoods_State_Park` og:image (the Outbound article's own og:image was a Mapbox map tile, deleted).
+- Brand-site screenshot fallback used: terminal-widget → `cdn.terminalwidget.app/.../widgets-700.21.jpg` (no og:image on the homepage; the source page links only to favicons).
+- Roadtrippers featured-image fallback used: seward-time-capsule → article-page `` (no og:image meta despite the article having a hero — pattern worth noting for next pass).
+- Press-article fallback used: and-vinyly-ashes-records → Open Culture article og:image (the Wix-hosted andvinyly.com homepage has only a 192px logo).
+
+### New source nominees
+
+2 this run (see candidate-sources.md):
+- Tokyo Paladin (substack) — surfaced via Daring Fireball Linked List crediting their Noir cookies post.
+- PetaPixel — surfaced via Kottke linking to their NASA Artemis II coverage.
+
+No targeted WebSearch this run; candidate-sources.md is already healthy with un-vetted nominees from prior sweeps.
+
+### Source maintenance for next pruning pass
+
+- **Unusual Hotels of the World**: third run in a row returns the 4KB `Uhotw` SPA shell. Time to switch to `fetch: skip` with `skipReason: "Single-page-app shell — homepage HTML contains no content; would need a headless browser."`
+- **MoMA Design Store**: third run with the same signature (1.2MB curl body, only the `moma-e-gift-card` slug extractable from the nav). The `/collections/new.json` Shopify default returned nothing in past attempts. Mark `fetch: skip` until a JSON endpoint is identified, or accept this source is permanently nav-only.
+- **Uncommon Goods**: `/new-arrivals` 404'd this run (worked in 2026-05-03 round 1). `/fun/new-arrivals` also 404'd. The path may be `/products/new` or `/c/new`. Audit the live storefront to find the canonical new-arrivals URL.
+- **Kikkerland**: `/collections/new-products` 404'd. Used `/collections/all` as a workaround but it's noisy. Audit whether the canonical "new" path is `/collections/new-arrivals` or `/collections/new`.
+- **9to5Mac Guides**: the `/guides/` page renders only category navigation, not articles. Either point `fetchUrl` at a specific category like `/guides/macos-tips/` or accept this source needs per-topic deep links.
+- **A.Word.A.Day**: homepage doesn't display the daily entry inline. The actual word lives at `/words/today.html`. Add `fetchUrl: "https://wordsmith.org/words/today.html"`.
+- **icanhazdadjoke API**: `/api/random?count=15` returned 404. Their canonical multi-joke endpoint may have moved; the single-joke endpoint `/` with `Accept: application/json` should still work as a fallback.
+- **Atlas Obscura**: the article-index curl works but neither the place-detail nor article-detail pages yield extractable virtues consistently. After three runs of this same pattern, lower the editorial expectation — treat AO as a "title harvester" only and skip writing finds unless the title alone passes the bar (rarely safe).
+- **snewpapers.com**: HTTP 406 to standard browser UA on the homepage. Worth experimenting with a UA that includes specific `Accept-Language` and `Accept` headers — they may be filtering on those rather than on the User-Agent string itself.
+- **Roadtrippers**: articles do have hero images but no `og:image` meta tag — the hero fetcher needs a fallback to the first content `` on the page when og:image is missing.
+
## 2026-05-03 — capture run (full sweep, expanded sources)
Sources scanned: 61 total — 24 hits, ~17 empty/unproductive, 11 blocked/broken, 9 skipped (per sources.json `fetch: skip`).
@@ -246,3 +320,38 @@ Notable patterns / SKILL.md update candidates:
- **Amazon CAPTCHA is now triggered even by iPhone Safari UA** for some delisted ASINs (B0BTFG5YJK responded with the same `opfcaptcha.amazon.com` stub on mobile UA as on desktop). The mobile-UA workaround still works for *live* products but not for delisted ones — for delisted, fall straight through to brand-site / Wayback / press.
- **Bear Blog and Smol Pub are text-only platforms that systematically lack og:image**. Worth maintaining a small allowlist of "skip image search, mark text-only" hosts (`*.bearblog.dev`, `smol.pub`, `m15o.smol.pub`, etc.) so the fetcher doesn't waste a Wayback round trip.
- **Wayback Machine 404s are quick to detect**: the response is a full 152KB `Wayback Machine` HTML shell containing the literal string `404`. A grep for `Wayback Machine` plus `404` in body short-circuits the fetch.
+
+## 2026-05-04 — superpost: Off until needed
+
+Slug: 2026-05-04-off-until-needed
+Seed: aootek-solar-fence-lights (already in 2026-05-03-backyard-small-upgrades; reused under a different theme).
+Inferred theme from seed; expanded with five unreferenced software-summon-er finds.
+
+Items referenced:
+ - aootek-solar-fence-lights
+ - superkey
+ - paletro
+ - wooshy
+ - wayback-multi-search-shortcut
+ - circle-to-search
+
+## 2026-05-04 — review: superkey
+
+Graduated from find captured 2026-05-03, source: Brett Terpstra.
+Hero: replaced the find's app-icon hero with the Seek-feature screenshot from superkey.app (1800×950, 192 KB), which actually shows the OCR-driven click in action.
+
+## 2026-05-04 — superpost: A small atlas
+
+Slug: 2026-05-04-a-small-atlas
+Theme: travel destinations, each on a single specific note.
+All 8 items previously unreferenced.
+
+Items referenced:
+ - capella-kyoto
+ - atacama-superblooms
+ - casa-nano-tokyo
+ - diamond-fork-hot-springs
+ - hotel-villa-colette-cap-ferret
+ - honu-villa-joshua-tree
+ - azuma-farm-koiwai
+ - blue-whale-of-catoosa
diff --git a/src/components/EditConfirm.astro b/src/components/EditConfirm.astro
index af66158..0b04d81 100644
--- a/src/components/EditConfirm.astro
+++ b/src/components/EditConfirm.astro
@@ -102,6 +102,17 @@
}.`;
}
+ if (btn.dataset.editAction === 'tag-prompt') {
+ const slug = btn.dataset.slug || '';
+ const name = btn.dataset.name || slug;
+ const raw = window.prompt(`Custom tag for "${name}":`);
+ if (!raw) return;
+ const tag = raw.trim().toLowerCase().replace(/\s+/g, '-');
+ if (!tag) return;
+ command = `/edit-find-tag ${slug} ${tag}`;
+ description = `Tag "${name}" with "${tag}".`;
+ }
+
openModal({ command, description });
});
diff --git a/src/components/FindCard.astro b/src/components/FindCard.astro
index de07fe8..27255dd 100644
--- a/src/components/FindCard.astro
+++ b/src/components/FindCard.astro
@@ -6,9 +6,22 @@ import SourceBadge from './SourceBadge.astro';
interface Props {
item: FindItem;
+ inList?: boolean;
+ capturedAt?: Date;
+ availableTags?: string[];
}
-const { item } = Astro.props;
+const { item, inList, capturedAt, availableTags = [] } = Astro.props;
const hero = findHero(item.id);
+const showInListAttr = import.meta.env.DEV && inList !== undefined;
+const selectedTags: string[] = item.data.editorialTags ?? [];
+const selectedSet = new Set(selectedTags);
+
+const fmtCaptured = new Intl.DateTimeFormat('en-US', {
+ month: 'short',
+ day: 'numeric',
+ hour: 'numeric',
+ minute: '2-digit',
+});
function host(url: string) {
try {
@@ -19,7 +32,10 @@ function host(url: string) {
}
---
-
+
{import.meta.env.DEV && (