- 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.
Inclusion isn't endorsement; no warranty on safety/quality/durability/fit
or continued existence; no responsibility after click-through. Plain,
non-legalese tone preserved.
Captured 28 finds across 14 productive sources. Kikkerland items rewritten
to Amazon ASINs (huckleberry slingshot B0GNJ8GCF5, bug blaster B0GS6F32CK)
so the affiliate handler tags them at render; croissant bath rug dropped —
no Kikkerland-branded match on Amazon. 9to5Mac removed from sources after
three runs of category-subpath instability.
New review under category `automation` (introduced for Apple
Shortcuts and similar workflow graduates — none of the existing
review categories fit). Hero registered in src/lib/hero.ts so the
grid card renders. Find marked `promotedTo: smartmover-shortcut`.
Also: HERO_SLUG bumped from superkey → monitorcontrol on the home
page (today's pick).
Captured 27 finds from the daily sweep across 15 sources (Daring
Fireball, HN Show HN, Kottke, Wallpaper, Outbound, Uncommon Goods,
Kikkerland, BIFL, Quote Investigator, Marginalian, r/dadjokes,
icanhazdadjoke, r/shortcuts, Recomendo, Messy Nessy) plus one user-
suggested find (valchoose-barf-bags) and 11 additional reader-
suggestion finds (appcleaner, blip, cleanmykeyboard, clocker,
daisydisk, ia-writer, launchos, macfolio, mos, vivid, wallspace).
New reviews: monitorcontrol (graduated from today's reader
suggestion, category interface) and blip (graduated from today's
reader suggestion, category indie). Both registered in hero.ts.
Site tooling: new dev-only POST /api/set-pick middleware that
rewrites HERO_SLUG in src/pages/index.astro for the Make today's
pick action. EditConfirm reworked to support a non-copy "set-pick"
mode; EditAction takes action and slug props; the reviews template
switches the toolbar button over to the new wiring.
Log + candidate-sources updated. Two new candidates: Routinehub.co
and Moss & Fog.
Eliminates the byte-dedup hazard that just bit timelined and apex: every
image consumer now goes through Astro's image pipeline, so duplicate
bytes share their webp variants instead of one consumer's strategy
silently winning and dropping the original asset.
Side-benefit is significant: tiles and the home hero now ship responsive
webp variants via srcset/sizes instead of the original PNG/JPG. The
superkey hero alone drops from 192 KB to ~29 KB at the largest size.
Video branches stay raw — astro:assets is image-only and videos don't
have this bug.
Same shape as the apex fix: review and find stored a byte-identical
hero.png, so Astro deduplicated them and the <Image>-rendered review
detail emitted only webp variants — the home tile's <img src> still
pointed at the original PNG URL Astro never wrote to disk.
- Switch the review MDX from explicit <Image> to standard markdown
image syntax (consistent with every other review)
- Re-encode the review's hero.png so its bytes differ from the find's
copy, giving it its own asset hash with the original PNG emitted
Build clean; home tile resolves to /_astro/hero.CCPzFuPP.png (160 KB).
Adds a build-time mosaic generator (scripts/build-list-mosaics.mjs, sharp)
that composites a single tile image per superpost from its referenced
finds. Wired via predev/prestart/prebuild hooks; output lives in
src/generated/ (gitignored). The /finds/ index and home grid both render
the mosaic when present and fall back to text-only tiles otherwise.
Adds the Vite-middleware backend that the refactored FindCard tag picker
POSTs to (writes editorialTags into find frontmatter). Without it the
in-card tag toggles 404 in dev. Also registers timelined's hero in the
heroes map so it shows up on the home grid.
Personal-history iOS timeline app, surfaced by Brett Terpstra. Editorial
angle: general-purpose life-event tracking whose killer use case is the
medical history you wish you had been keeping. Hero pulled from
timelined.app marketing. Introduces a new `journal` review category.
Find updated with promotedTo so the cross-link callouts render.
Replaces the old "Not in lists" filter with "Unused" (no list and no
promotedTo). Adds independent Jokes/Quotes toggles, off by default.
Filter + each toggle persist separately in localStorage. Card scoping uses
:global() so the filter selectors reach FindCard's CSS scope.
Also picks up the editorial-tag picker refactor in FindCard: in-card buttons
now POST to /api/edit-find-tag/ via a single delegated handler instead of
copying slash commands.
The review and find both stored a byte-identical hero.png, so Astro
deduplicated them to a single asset; the <Image>-rendered review
detail emitted only webp variants and the home tile's <img src> still
pointed at the original PNG URL — which Astro never wrote to disk.
- Switch the review MDX from explicit <Image> to standard markdown
image syntax (consistent with every other review)
- Re-save the review's hero.png so its bytes differ from the find's
copy, giving it its own asset hash with the original PNG emitted
Build clean; home tile resolves to /_astro/hero.Ckihos5I.png (680 KB).
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 <slug> <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
- New "Why this exists" post; masthead "founded" links to it
- Post template: serif headline + date in masthead, "Filed under {category}" in footer
- Drop counts from footer Collections list
- Masonry component for home + sources grid; source badges link to /sources/#slug
- Theme toggle (settings page + cog) with dark-mode-aware tokens
- Six new themed find lists; cluster-finds skill
- newspaper-style masthead (stats | "Unique" | About/Blog) on every page
with per-page italic subheader + last-updated date on listing pages;
sitewide 42rem reading width
- pinterest home (hero + masonry, "load more"); old list view at /index3/
- new pages: /about, /blog, /legal, /find/, /finds/, custom 404
- footer collection links now clickable; "founded" stat replaces "updated"
in the masthead
- centralised SEO component with per-page json-ld (Review, BlogPosting,
Product, Article, CollectionPage, ItemList, BreadcrumbList, etc.);
@astrojs/sitemap + @astrojs/rss; robots.txt; promoted finds canonical
to their review
- memoize getSiteStats() so the masthead/footer counts don't multiply
per-page build cost
- 25 new daily-finds captures
Make it explicit that when a post on a known source credits or links
out to another publication ("via X", "first seen on Y", etc.), that
publication becomes a candidate source. Drop the previous 1-2 nominees
cap — capture every plausible new source the run surfaces.
A small Astro + MDX blog for delightful, daily-use finds. The architecture
separates capture from publication and supports reuse:
- find/ captured items, hidden from indexes
- finds/ editorial superposts referencing find slugs in a grid
- reviews/ full-length writeups; can graduate from a find via fromFind
- posts/ regular essays
Three project-local skills under .claude/skills/ drive the pipeline:
daily-finds (capture-only sweep across sources.json), build-finds (draft
a thematic superpost), build-review (graduate a find).
sources.json carries 47 curated feeds with per-source fetch strategy
(webfetch / curl / skip) so Cloudflare-blocked sites and Reddit JSON
endpoints are handled deterministically. /sources renders a 3-column
card stream with a "Recent finds" cross-reference per source.
Seeds: 17 reviews and one superpost referencing 5 finds.