Rotated from herculaneum-scroll-first-read (held since 07-13).
The best hero image of the run is deliberately NOT the pick: Lai Tak Tsuen's
atrium is the most arresting thing we published today, but its residents have
posted notices asking photographers to stay out, and the homepage hero is this
site's loudest amplifier — pointing it there would generate exactly the traffic
they are trying to stop. Same shape as the rule against heroing anything that
reads as endorsing harm, just quieter. The review still runs; it just never
gets the tile.
The M0 Pura wins the rest on the axes the pick is judged by: a press shot that
shows the whole product in one frame (it is tiny, and there is nothing on it),
a virtue legible from the tile without domain knowledge, and nothing remotely
controversial about it.
Three graduations, and the fact-check earned its keep on every one.
Shanling M0 Pura (music): the 250mW balanced figure needs an adapter Shanling
sells separately — out of the box it is 100mW, on a single 3.5mm jack. The
'cannot stream' pitch holds (no Wi-Fi, no apps) but the review declines to sell
the myth: Bluetooth-receiver mode will happily play your phone's Spotify. Read
alongside the existing Zenteek review — the same argument with a battery in it.
Lunacy (play): runs the original unmodified After Dark module, not a
reimplementation — confirmed. Corrects the find's attribution of More After
Dark to Apple (it was Berkeley Systems) and disambiguates Jeff Halter, who made
Lunacy, from Ben Haller, who wrote Lunatic Fringe in 1991. Ships no game data;
you supply your own copy. Same developer as the Stacks HyperCard player, which
is the actual story.
Lai Tak Tsuen Estate (places — new category): the find was substantially wrong
and both it and this morning's bundle have been corrected in place. Not two
1975 towers but four cylinders across two twin-cylinder blocks, completed 1976.
And access is not 'a guard checks resident cards' — there are coded gates and
posted notices prohibiting entry and photography, put up because the Ghost in
the Shell shoot turned a residential estate into a backdrop. The bundle no
longer invites anyone through the gate, and this is emphatically not the pick.
Pool was at exactly 25 (the nominal cluster threshold) but yesterday's cluster
run already judged its remainder un-clusterable, so re-clustering would only
re-litigate that. Two tight 3-item themes instead, neither padded: three places
built for living/working rather than visiting (the run's one real patch to a
travel axis that has been thin for a week), and three things that argue for the
handmade page by being one — which finally surfaces london-notebook-writing,
shortlisted-but-invisible since 07-04.
Dedup was the story: 56 candidates surfaced, 31 already captured (the daily
feeds largely re-served yesterday's items), 2 previously rejected on merit,
5 failed the bar today.
Shortlisted 10. Two items were demoted off the shortlist by the fact-check
step rather than before it — the Coleman stove's Snow Peak IGT compatibility
is not a claim Coleman makes (and it is backorder-only), and Shortverse is a
filmmaker hosting platform, not the viewer-facing short-film streamer it
looked like. Both stay as finds, honestly written.
5 Amazon links. Source maintenance: Kevin Kelly demoted weekly -> as-needed
(publishes, but the Technium is essays, never things); The Browser's free feed
now carries only 2 of 5 daily picks; two Reddit 429s recorded but not acted on
(same-domain subs succeeded, so it reads as throttling, not a block).
- astro 7.0.7, @astrojs/mdx 7, sitemap 3.7, rss 4.0.19, check 0.9.9
- trailingSlash 'always' → 'ignore': Astro 7 generates prerender paths for
dynamic extension endpoints (/categories/<c>/rss.xml) with a trailing
slash under 'always' but builds their route patterns without one, so the
build fails with "Missing parameter"; directory-format output is
identical either way. Also removes the now-unneeded dev feed-slash shim.
- compressHTML: true pinned to keep pre-v7 whitespace behavior
- zod 4: import z from 'astro/zod' (astro:content re-export deprecated),
z.string().url() → z.url()
- npm audit fix (fast-uri, fast-xml-builder, yaml)
Claude-Session: https://claude.ai/code/session_01WZaczDJjL3xZ3u5spsN5AL
Fact-check against folo.is, its pricing page, and the GitHub README
corrected the license (AGPL-3.0, not GPL-3.0) and added mobile apps,
real pricing tiers, and the self-hosting caveat the find omitted.
Topics — the curated subscription layer: 18-value controlled vocabulary
in src/lib/topics.ts, enum-enforced by the content schema on finds and
reviews so unattended runs can't drift it. /topics/ index +
/topics/<t>/ pages with finds first-class alongside reviews, per-topic
RSS feeds that include finds (unlike category/tag feeds), "By topic"
section on /feeds/, Topics footer link and llms.txt section, dev-shim
coverage for the new feed URLs. daily-finds and build-review skills now
classify at capture/graduation time; "giftable" is a tag, never a
topic.
Per-source indexes: /sources/<slug>/ lists every review and find from a
source (catalog ∪ names in content, so retired sources resolve);
find/review colophons link "(more from this source)"; /sources/ cards
link "everything from this source →"; sub-3-item pages noindexed.
Claude-Session: https://claude.ai/code/session_01WZaczDJjL3xZ3u5spsN5AL
Fact-check against tintd.app and the App Store surfaced a version split:
the direct download is the real Tintd 2 (macOS 14+, one-time $9.99+),
while the Mac App Store listing is still the older v1.3.4 (macOS 13+,
subscription option) — Apple's review queue hasn't caught up yet.
864 finds + 64 reviews assigned 1-3 topics each from the new 18-topic
controlled vocabulary (src/lib/topics.ts, lands in the next site
commit). The retired gifts topic becomes a giftable tag on the 140
finds that carried it; 5 finds legitimately match no topic.
Claude-Session: https://claude.ai/code/session_01WZaczDJjL3xZ3u5spsN5AL
Fact-check against indieseek.co corrected the find's "no panel" claim
(there's a secondary status view) and added shortcut mechanics,
format limits, and pricing.
Tag pages are now generated from the union of entry and find tags —
1,179 tags that existed only on finds (most tag links on find pages)
previously 404'd. Tagged finds render in a compact secondary "Finds"
list below the entry grid, keeping the editorial tier on top. Find-only
tag pages with fewer than 3 finds are noindexed until they fill out.
Tag feeds stay entries-only; the RSS pill and autodiscovery link only
render where a feed exists. Category pages unchanged (finds have no
category).
Claude-Session: https://claude.ai/code/session_01WZaczDJjL3xZ3u5spsN5AL
With trailingSlash 'always', astro dev only matches dynamic-route
endpoints when the request has a trailing slash, so the RSS pill links
(/tags/<t>/rss.xml, /categories/<c>/rss.xml) 404'd locally while the
built site served them fine. Dev-only vite middleware rewrites those
requests to the slashed form.
Claude-Session: https://claude.ai/code/session_01WZaczDJjL3xZ3u5spsN5AL
Autodiscovery alone is invisible since browsers dropped feed-detection
UI — add a small RSS pill in the subheader (new feedHref prop on
BaseLayout) linking to the page's scoped feed.
Claude-Session: https://claude.ai/code/session_01WZaczDJjL3xZ3u5spsN5AL
Feeds: JSON Feed 1.1 at /feed.json, per-category and per-tag RSS at
/categories/<name>/rss.xml and /tags/<name>/rss.xml alongside the main
/rss.xml — all from a shared src/lib/feed.ts item source. Category/tag
pages advertise their scoped feed via autodiscovery; new /feeds/
directory page (footer-linked) lists every feed with counts; RSS feeds
gain an atom:link self reference and a feed.xsl stylesheet so they
render readably in browsers.
Programmatic readers: build-generated /llms.txt (site map with every
review/bundle/post), SearchAction on the WebSite JSON-LD wired to
/search/?q=, and a "For robots" section on /feeds/ documenting
search.json, llms.txt, the sitemap, and JSON-LD coverage.
Claude-Session: https://claude.ai/code/session_01WZaczDJjL3xZ3u5spsN5AL
The width-tier system (full-bleed wide tier, body max-width tweens,
absolute-positioned FLIP masonry) is gone. Grid pages are 4 columns in a
55.5rem container (>=69rem viewport), everything else 3, with the existing
1-2 column steps on small screens. Masonry returns to real flex columns.
This also fixes bundle pages rendering as a diagonal card cascade: the old
.masonry > .masonry-tile { position: absolute } tied with FindCard's scoped
position: relative on specificity, and on bundle pages the FindCard rule won
the cascade order, leaving tiles in normal flow with masonry translate()
offsets stacked on top. Flex columns don't position tiles, so the tie is gone.
Kept from the motion pass: staggered tile reveal on initial load and
"Load more" (now via animation-delay), card hover lifts, button tactility.
- Images/videos fade in on load instead of popping (cached media renders
instantly; nothing is hidden without JS)
- Cross-document view transitions: soft cross-fade between pages where
supported
- Masonry reveals ripple: initial grid and "Load more" batches stagger in
per-tile instead of blinking on at once
- Card hover: gentle -2px lift + slow image zoom on hero, home/grid tiles,
and find cards; find-card lift switched to `translate` so it composes
with the masonry's inline transform (it was silently dead before), and
its transition list unified with .masonry-tile's to end their cascade tie
- Tactile press/lift on "Load more" and the external CTA button
- Accent-tinted ::selection, visible :focus-visible rings, smooth anchor
scrolling; global prefers-reduced-motion catch-all disables it all
Claude-Session: https://claude.ai/code/session_01ADR9r5rw5NuvvnCxfYbMuc
Named width tiers (mobile/narrow/regular/wide) with body max-width easing
between them; grid pages opt in via BaseLayout `wide`. Masonry is now
absolute-positioned with FLIP glides on column-count changes: targets are
computed from the *final* container width (reading --max, which flips
instantly while max-width tweens), mid-glide column changes retarget
instead of being dropped, and container height eases so content below
rides along.
Claude-Session: https://claude.ai/code/session_01ADR9r5rw5NuvvnCxfYbMuc
tldraw: fact-check enriched the find — dual product (free whiteboard /
source-available SDK), licensing corrected to the proprietary tldraw
license (not MIT). Fresh first-party screenshot hero.
Kartell Componibili: first review to carry amazonLink (genuine Kartell
4966/03, sold by Amazon) — exercises the new 'Also on Amazon' affiliate
rendering end to end. New 'design' category.
The useful menagerie, Who actually said that, The completists, Ambient data,
Made on the old machines, Never out of production, Six groans (third serving),
Nothing to win here. All items previously unbundled; zero reuse.
The generator still resolved heroes at the old flat src/content/find/<slug>/
path, so every mosaic was skipped as 'no heroes' and src/generated/
bundle-mosaics sat empty. Home-page bundle tiles have been mosaic-less since
the May migration.
Probed all 59 sources for feeds. Highlights: Atlas Obscura, This Is Why I'm
Broke, A Continuous Lean, Gear Patrol, The Awesomer, Permanent Style, and The
Browser all rescued from blocked/skip status by working feeds; all four Reddit
subs work again via the anonymous .rss endpoint (top/.json remains dead);
MoMA Design Store + Kikkerland switched to Shopify products.json endpoints.
Newly skipped (confirmed dead/dormant): Tools and Toys, One Thing Well,
Cool Material, Werd.com, Unusual Hotels of the World.
- daily-finds: feed-first fetch strategy (fetch: feed + feedUrl), cadence-aware
scanning, new score-and-shortlist stage (shortlist: true, up to 12/day, top
1-3 flagged as review candidates), Amazon affiliate lookup for shortlisted
physical products, and authority to apply mechanical sources.json maintenance
(skip dead sources, demote dormant ones, record working fetch paths) instead
of logging recommendations nobody executes.
- build-bundle: auto mode (no confirmation gate when unattended) and a 'weekly'
date-based catch mode so shortlisted finds never sit invisible for weeks.
- cluster-bundles: auto mode.
- build-review: hero.ts registration step removed (heroes auto-discovered from
hero.<ext>); mandatory fact-check against the product's own site in auto
mode; amazonLink carry-through; auto mode publishes and logs instead of
pausing twice for approval.
- New daily-pipeline skill: capture → bundle → reviews → pick of the day →
build → commit → push → digest, with granular per-stage commits. This is the
entrypoint for scheduled runs.
- Project CLAUDE.md documenting the pipeline and its foot-gun conventions.
- src/lib/hero.ts: review heroes are now auto-discovered via import.meta.glob
over reviews/*/hero.<ext>; only legacy non-hero-named assets remain as
explicit overrides. New reviews need zero registration.
- Pick of the day moves from a hardcoded HERO_SLUG in index.astro to
src/data/pick.json (content edit, not code edit); dev set-pick API and
the review-page button now write pick.json. Fallback: latest review.
- Schemas: finds gain shortlist (bool) + amazonLink; reviews gain amazonLink.
- Review + find pages render an 'Also on Amazon' affiliate link when
amazonLink is set, with shared disclosure handling.
- Both hero globs now include .avif (two June finds ship avif heroes).
Found the canonical home for Editorio: developer Lovre Crncevic's site
at editorio.crncevic.org, free on the Mac App Store at id6759334075.
Updates:
- Review and find now link to editorio.crncevic.org (was Reddit-only)
- Review body adds App Store link inline + corrects the "anonymous dev"
framing (Lovre Crncevic is named), version 5.4, App Store privacy
label, free no-IAP, ~40 MB RAM, sub-100 ms file open
- Replaced the small Reddit-OG-card hero with the developer site's
1280×800 screenshot (36 KB webp) showing the actual side-by-side
source+preview with independent minimaps
- hero.ts import retargeted to hero.webp
RemCTL (Federico Viticci's Reminders CLI): category `automation`,
hero reused from MacStories OG card. Body flags the private-API
caveat — RemCTL reads Reminders' SQLite + ReminderKit directly.
Editorio (indie markdown+code editor): category `writing`, hero reused
from Reddit OG. No homepage exists yet; review acknowledges single-
Reddit-post documentation. Used astro:assets <Image> for responsive
srcset on the small JPG.
Muxy (SwiftUI workspace): category `terminal`, fresh hero from the
github.com/muxy-app/muxy README. The find sold this as "a terminal
with a sidebar" — the review's blockquote opens by correcting that.
Muxy is actually a full SwiftUI workspace (Git tooling, file tree,
command palette, Mermaid preview, 490 themes, iOS+Android companion
apps). Review link points to github repo per user direction.
Single-image review of the Scale AI Show HN browser game about Claude
Code permission fatigue. Category: `play` — same new category started
for cursor-camp-neal-fun. Body corrects the find's generic "AI agent"
to name Claude Code specifically, per the game's own meta tags.
Ten-day gap since the 2026-05-20 sweep. Pool grows from 414 → 468 finds.
Productive: Six Colors, MacStories (3), Daring Fireball (3), Brett
Terpstra, Eclectic Light, Show HN (5), Wallpaper* Travel (5), AFAR (2),
Boutique Homes, Cool Tools (2), Kottke.org (4), Open Culture (5),
Quote Investigator (4), A.Word.A.Day, The Marginalian (4), MoMA (3),
Recomendo (3), icanhazdadjoke (7).
Major blocker: Reddit JSON endpoint is hard-blocked this run — all four
r/* sources returned identical 189908-byte HTML payloads regardless of
UA or URL pattern. Lost ~15-25 finds. Next-pass action: OAuth Reddit
API.
Other blockers: TidBITS 403, Web Curios ECONNREFUSED with no recent
issue URL resolvable, Things Magazine still on May 15 post (monthly-ish
cadence confirmed), Atlas Obscura serving evergreen 2017-era content,
A Continuous Lean dormant 9 runs.
5 new source nominees in candidate-sources.md.
Single-image review of Neal Agarwal's Cursor Camp browser toy, reusing
the find's existing 1200×630 share card. New `play` category — none of
the existing buckets fit a web-toy, and the 2026-05-14 six-browser-games
bundle has 5+ other candidates that will graduate cleanly into it.
Seven-day gap since the 2026-05-13 sweep. Pool grows from 347 → 414 finds.
Productive: r/macapps (10), r/shortcuts (5), Six Colors, MacStories,
Daring Fireball (3), Brett Terpstra, Wallpaper* Travel (5), AFAR (3),
The Outbound Collective (3), r/BuyItForLife (3), Kottke.org, Web Curios
(5), Recomendo, Cool Tools (2), Wikiquote, The Marginalian (3),
A.Word.A.Day (2), Quote Investigator, r/dadjokes (7), icanhazdadjoke (3),
Things Magazine (3 — first new post in 6 weeks).
Source-maintenance flags this run: Reddit JSON endpoint rate-limits hard
on >10 per-post fetches in a 60s window (mid-run hero fetch failed for 6
posts); switch to extracting previews from the top listing JSON at scan
time. Atlas Obscura no longer Cloudflare-blocked but homepage falls back
to evergreen 2017-era pieces. A Continuous Lean dormant for 8 runs.
Things Magazine cadence: weekly → monthly (not quarterly as flagged on
05-13).
7 new source nominees in candidate-sources.md.
Three bundles drafted 2026-05-14 from the 2026-05-13 capture pool:
- Six games inside a single tab: takeaway, single-ride, play-your-tubes-
right, desktop-tower-defense, cursor-camp, vaskange
- Six more clean groans: suitcase, mortician, cow-lightning, queue,
garden-plot, wind-turbines (sequel to six-clean-groans)
- Six Mac apps from this week's catch: Switch, Aira, Steno, ChessUnlock,
Monologue, TerminalWidget
4-slide carousel (library, graph-search, visualizer, DSP) sourced from
zenteek.app. New `music` category — none of the existing buckets
(interface, indie, writing) fit a music player. Audirvana/Apple Music/Roon
named directly as comparisons in the body.
Bartender 6: 4-slide carousel (peninsula, widgets, menu-bar, triggers)
sourced from macbartender.com/Bartender6/img/. Category: interface —
pairs naturally with the existing ice and alcove reviews.
Gnome: single-image review for Lex Friedman's menu-bar GIF picker.
Replaced the find's icon hero with the actual screenshot from
lexfriedman.com/gnome/screenshot.png. Body highlights the underrated
Apple-Vision OCR feature (text-in-GIF search).
Both heroes registered in src/lib/hero.ts.
Four-day gap since the 2026-05-09 sweep. Productive sources: r/macapps,
r/shortcuts, Six Colors, MacStories, DF, Brett Terpstra, Eclectic Light,
OSXDaily, Dr. Drang, MoMA, Kikkerland, Wallpaper, AFAR, Boutique Homes,
Outbound, Kottke, Open Culture, Web Curios, Wikiquote, The Marginalian,
A.Word.A.Day, Quote Investigator, r/BuyItForLife, Carryology, r/dadjokes,
icanhazdadjoke.
Source-maintenance flags this run (see log): Atlas Obscura confirmed
Cloudflare-blocked for the 6th run, A Continuous Lean dormant since
Dec 2025, Things Magazine cadence: weekly → quarterly, This Is Why I'm
Broke / Cool Material / StyleForum returning JS-rendered shells or
changed templates.
4 new source nominees in candidate-sources.md.
Migrate every find from src/content/find/<slug>/ to src/content/find/<year>/<month>/<slug>/ — all 289 existing finds moved into 2026/05/. The find content-collection loader gets a new leafSlug generateId so ids (and therefore URLs at /find/<slug>/) stay flat; src/lib/find-hero.ts switches to a recursive **/hero glob. Bundle items[], promotedTo/fromFind keys, /sources cross-refs, and category/tag pages all keep working unchanged. Skill docs (daily-finds, build-review, build-bundle, cluster-bundles), README, and CHANGELOG updated for the new on-disk path.
Also: 67 new finds from the 2026-05-09 capture run (Web Curios 8, MoMA 7, r/macapps 7, r/dadjokes 6, icanhazdadjoke 6, Wallpaper* Travel 5, Snow Peak 5, Kottke 3, Boutique Homes 3, etc.); felo-ergonic-screwdriver-set rolled back per editorial decision.
The original Tools and Toys post linked B002YNQVPE, which is the VDE-rated insulated electrician's variant. The review's content describes the standard Ergonic comfort-grip set; B0012CRXU0 is the matching SKU.