Commit Graph
180 Commits
Author SHA1 Message Date
rzen dff8d4d93d sources: drop Uncommon Goods 2026-05-06 21:51:26 -04:00
rzen 996f3bd588 content: 2026-05-06 evening sweep — 25 finds, Reddit ?t=day surfaces same-day fresh 2026-05-06 21:29:47 -04:00
rzen 6b8786c250 site: review — Felo Ergonic Screwdriver Set (graduates from find) 2026-05-06 20:50:22 -04:00
rzen 2def9d685b site: rename "finds" superposts → "bundles" + 2026-05-06 capture run
Collection rename: src/content/finds/ → src/content/bundles/, URLs /finds/<slug>/ → /bundles/<slug>/, internal symbols (FindsPost → Bundle, findListMosaic → bundleMosaic, findsReferencing → bundlesReferencing, Entry.type 'finds' → 'bundle'). Skills build-finds/cluster-finds renamed to build-bundle/cluster-bundles. The `find` collection (individual items) is unchanged.

New content: 4 reviews graduated (finalist, gum-shell, tablepro, valchoose-barf-bags) and 6 bundles for 2026-05-06 (constrain-the-surface, menu-bar-singletons, on-device-by-design, six-american-detours, six-lines-six-origins, things-in-the-terminal). Adds EntryGrid component.
2026-05-06 20:45:22 -04:00
rzen 049c6c5377 site: rename "finds" superpost collection to "bundles"
Disambiguates the one-letter `find` (item) vs `finds` (roundup) split that
kept causing confusion. Audience-facing now: `/bundles/<slug>/`, "Bundle"
labels in home/footer/search.

Internals: `getCollection('finds')` → `('bundles')`, `Entry.type 'finds'`
→ `'bundle'`, `OgFallback 'finds'` → `'bundles'`, `findListMosaic` →
`bundleMosaic`, `FindsPost` → `Bundle`, `findsReferencing` →
`bundlesReferencing`. Build script + generated mosaic dir follow
(`scripts/build-bundle-mosaics.mjs`, `src/generated/bundle-mosaics/`).

Skills `build-finds` → `build-bundle`, `cluster-finds` →
`cluster-bundles`. The `find` collection (individual items) is unchanged.

No URL redirects: low external-link surface area.
2026-05-06 20:43:22 -04:00
rzen c2e1df222d site: strengthen no-endorsement language on /legal/
Inclusion isn't endorsement; no warranty on safety/quality/durability/fit
or continued existence; no responsibility after click-through. Plain,
non-legalese tone preserved.
2026-05-06 19:29:33 -04:00
rzen bec0aa33a8 content: 2026-05-06 capture run — 28 finds, Kikkerland routed to Amazon, drop 9to5Mac
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.
2026-05-06 19:23:18 -04:00
rzen 373ccc28a9 site: Cloudflare Web Analytics beacon
Cookieless, privacy-preserving beacon scoped to unique.rzen.dev. Privacy
statement on /legal/ updated to disclose it.
2026-05-06 19:19:51 -04:00
rzen 3e7086bb3d site: blog index as title/intro teasers 2026-05-05 17:53:25 -04:00
rzen 7dbb32d345 site: Google Search Console site-verification file 2026-05-05 17:34:22 -04:00
rzen f871d08772 site: review — SmartMover (graduates from find)
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).
2026-05-05 17:21:24 -04:00
rzen 563c98511f content: 2026-05-05 capture run — 28 finds, 2 reviews, set-pick tooling
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.
2026-05-05 17:12:01 -04:00
rzen ed1d484ccb site: home + grid tiles use <Image> instead of raw <img>
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.
2026-05-04 20:58:18 -04:00
rzen 55c778817a fix: timelined hero broken on home tile
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).
2026-05-04 20:51:27 -04:00
rzen 2b83b9c2c1 content: 2026-05-04 capture run — superpost, review, find updates
- Superpost: 2026-05-04-geography-is-the-program (4 travel finds).
- Review: snewpapers-newspaper-archive (graduates the find; new `history`
  category; corrects the find's "no account required" claim and notes the
  American-focused coverage).
- New find: synerlogic-macos-shortcut-sticker.
- Find updates: snewpapers find gets promotedTo; noir-japanese-cookies
  flagged with editorialTags: ["delete"] for later triage.
- daily-finds.log.md: capture-run log + review/superpost entries.
2026-05-04 20:34:39 -04:00
rzen 99a889523a site: list mosaic tiles for /finds/ + home grid
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.
2026-05-04 20:34:29 -04:00
rzen 315fc71145 site: dev /api/edit-find-tag/ middleware + register timelined hero
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.
2026-05-04 20:34:21 -04:00
rzen 4ba4f89536 site: review — Timelined (graduates from find)
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.
2026-05-04 20:25:48 -04:00
rzen abd401d783 site: /find/ filter toggles — Unused (default), All, plus Jokes/Quotes toggles
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.
2026-05-04 20:25:37 -04:00
rzen 6c42d0c380 fix: apex hero broken on home tile
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).
2026-05-04 19:12:45 -04:00
rzen 7e1b200bea site: editorial tooling, grid masonry fix, new reviews + finds
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
2026-05-04 18:57:04 -04:00
rzen 1ecdc10443 site: editorial controls + 1d-chess find — chunk 5/4
- Add EditAction + EditConfirm components (dev-only editorial UI bits)
- Stage 1d-chess find page (missed by earlier glob since slug starts with a digit)
2026-05-04 17:57:21 -04:00
rzen dab422abb0 site: media + colocation — chunk 4/4 (find/ m-z, finds, posts, asset cleanup) 2026-05-04 17:55:55 -04:00
rzen e036845d0e site: media + colocation — chunk 3/4 (find/ a-l) 2026-05-04 17:55:16 -04:00
rzen 8d1396fcd6 site: media + colocation — chunk 2/4 (reviews)
Move src/assets/reviews/<slug>/* into src/content/reviews/<slug>/.
Re-encoded MP4s and GIF→MP4 conversions; originals archived in source/.
2026-05-04 17:54:39 -04:00
rzen 5dcd99361f site: media + colocation — chunk 1/4 (code, configs, docs)
Code, configs, README, CHANGELOG, sources/log files, .claude.
Subsequent chunks land the renamed media files.
2026-05-04 17:54:14 -04:00
rzen e873460465 site: founding post, headline post layout, masonry grid, source links
- 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
2026-05-03 17:52:14 -04:00
rzen c8095d2766 site: ui/ux refresh, seo pass, find/lists indexes, 25 new finds
- 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
2026-05-03 16:58:23 -04:00
rzen c184f3f50a daily-finds: nominate sources cited in items, no per-run cap
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.
2026-05-03 15:17:38 -04:00
rzen 9858abedc2 initial: four-collection content pipeline for unique.rzen.dev
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.
2026-05-03 11:48:03 -04:00