- 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).
Inclusion isn't endorsement; no warranty on safety/quality/durability/fit
or continued existence; no responsibility after click-through. Plain,
non-legalese tone preserved.
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.
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.
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.
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
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.