site: bucket find/ folders by capture date + 2026-05-09 capture (67 finds)
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.
@@ -12,7 +12,7 @@ Invoke from inside the `unique.rzen.dev` repo.
|
|||||||
|
|
||||||
## Inputs
|
## Inputs
|
||||||
|
|
||||||
- `src/content/find/*.mdx` — the available pool of finds.
|
- `src/content/find/<year>/<month>/<slug>/index.mdx` — the available pool of finds (folders are nested by date but slugs are globally unique; recurse with `find src/content/find -name index.mdx` or rely on the `find` content collection's id which is the leaf slug).
|
||||||
- `src/content/bundles/*.mdx` — existing bundles (used to detect already-bundled finds).
|
- `src/content/bundles/*.mdx` — existing bundles (used to detect already-bundled finds).
|
||||||
- Optional argument: a theme phrase (e.g. "single-virtue tools", "things-disguised-as-other-things").
|
- Optional argument: a theme phrase (e.g. "single-virtue tools", "things-disguised-as-other-things").
|
||||||
- Optional argument: an explicit list of find slugs the user wants in the bundle.
|
- Optional argument: an explicit list of find slugs the user wants in the bundle.
|
||||||
@@ -99,7 +99,7 @@ Example body:
|
|||||||
|
|
||||||
### 4. Verify
|
### 4. Verify
|
||||||
|
|
||||||
- Confirm every slug in `items[]` exists at `src/content/find/<slug>/index.mdx`. If any is missing, abort and report — never reference a non-existent find.
|
- Confirm every slug in `items[]` exists at `src/content/find/<year>/<month>/<slug>/index.mdx` (use `find src/content/find -type d -name "<slug>"` to locate). If any is missing, abort and report — never reference a non-existent find.
|
||||||
- Run `npm run build` to confirm the new bundle compiles.
|
- Run `npm run build` to confirm the new bundle compiles.
|
||||||
|
|
||||||
### 5. Update the log
|
### 5. Update the log
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: build-review
|
name: build-review
|
||||||
description: Graduate a find item to a full review for unique.rzen.dev. Reads src/content/find/<slug>.mdx, expands the body into a full review, writes src/content/reviews/<slug>.mdx, and links the two via fromFind / promotedTo. Use when the user runs /build-review <slug>, says "review this find", or "graduate <slug>".
|
description: Graduate a find item to a full review for unique.rzen.dev. Reads src/content/find/<year>/<month>/<slug>/index.mdx, expands the body into a full review, writes src/content/reviews/<slug>/index.mdx, and links the two via fromFind / promotedTo. Use when the user runs /build-review <slug>, says "review this find", or "graduate <slug>".
|
||||||
disable-model-invocation: true
|
disable-model-invocation: true
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -12,8 +12,10 @@ Invoke from inside the `unique.rzen.dev` repo with a find slug as the argument.
|
|||||||
|
|
||||||
## Inputs
|
## Inputs
|
||||||
|
|
||||||
- `src/content/find/<slug>.mdx` — the source find (must exist; abort otherwise).
|
- `src/content/find/<year>/<month>/<slug>/index.mdx` — the source find (must exist; abort otherwise). The slug is unique across the whole `find/` tree, so locate it via `find src/content/find -type d -name "<slug>"` if you don't already know the year/month.
|
||||||
- `src/content/reviews/<slug>.mdx` — must NOT exist (abort if a review with the same slug is already there; ask the user to disambiguate).
|
- `src/content/reviews/<slug>/index.mdx` — must NOT exist (abort if a review with the same slug is already there; ask the user to disambiguate).
|
||||||
|
|
||||||
|
Note on hero assets: the find's hero, when present, sits at `src/content/find/<year>/<month>/<slug>/hero.<ext>` next to its `index.mdx`. The review's hero goes at `src/content/reviews/<slug>/hero.<ext>` (flat — reviews are not date-bucketed).
|
||||||
|
|
||||||
## Procedure
|
## Procedure
|
||||||
|
|
||||||
@@ -31,7 +33,7 @@ Look at the external link and propose a hero asset — a screenshot, demo gif, o
|
|||||||
- Physical products: the maker's product photo.
|
- Physical products: the maker's product photo.
|
||||||
- Travel destinations: a Wikipedia or Wikimedia Commons photo (free-to-use only).
|
- Travel destinations: a Wikipedia or Wikimedia Commons photo (free-to-use only).
|
||||||
|
|
||||||
Tell the user what you'd download and where to place it (`src/assets/reviews/<slug>/hero.<ext>` or similar). Pause for approval before downloading.
|
Tell the user what you'd download and where to place it (`src/content/reviews/<slug>/hero.<ext>` — colocated with the review's `index.mdx`). Pause for approval before downloading.
|
||||||
|
|
||||||
### 3. Expand the body
|
### 3. Expand the body
|
||||||
|
|
||||||
@@ -45,7 +47,7 @@ Take the find's 2-3 sentence body and expand it to a full review:
|
|||||||
|
|
||||||
### 4. Write the review
|
### 4. Write the review
|
||||||
|
|
||||||
File: `src/content/reviews/<slug>.mdx`.
|
File: `src/content/reviews/<slug>/index.mdx`.
|
||||||
|
|
||||||
Frontmatter:
|
Frontmatter:
|
||||||
|
|
||||||
@@ -68,7 +70,7 @@ If the find had no `subtitle`, generate one — it's required on reviews.
|
|||||||
|
|
||||||
### 5. Update the find
|
### 5. Update the find
|
||||||
|
|
||||||
Edit `src/content/find/<slug>.mdx` frontmatter: add `promotedTo: <review-slug>`.
|
Edit `src/content/find/<year>/<month>/<slug>/index.mdx` frontmatter: add `promotedTo: <review-slug>`.
|
||||||
|
|
||||||
(Slug usually matches the find's slug, so `promotedTo` and the find's filename match.)
|
(Slug usually matches the find's slug, so `promotedTo` and the find's filename match.)
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ Invoke from inside the `unique.rzen.dev` repo.
|
|||||||
|
|
||||||
## Inputs
|
## Inputs
|
||||||
|
|
||||||
- `src/content/find/*.mdx` — the full pool to cluster.
|
- `src/content/find/<year>/<month>/<slug>/index.mdx` — the full pool to cluster (folders are nested by date but slugs are globally unique; iterate with `find src/content/find -name index.mdx`).
|
||||||
- `src/content/bundles/*.mdx` — already-written bundles. Their `items[]` lists are the prior clustering — read these to know which finds already have a home and what themes have been used.
|
- `src/content/bundles/*.mdx` — already-written bundles. Their `items[]` lists are the prior clustering — read these to know which finds already have a home and what themes have been used.
|
||||||
- Optional argument: a number of clusters to target (default: model's call, usually 4-7).
|
- Optional argument: a number of clusters to target (default: model's call, usually 4-7).
|
||||||
- Optional argument: a list of theme phrases to seed clustering around.
|
- Optional argument: a list of theme phrases to seed clustering around.
|
||||||
@@ -86,7 +86,7 @@ Body rules (same as `build-bundle`):
|
|||||||
|
|
||||||
### 6. Verify
|
### 6. Verify
|
||||||
|
|
||||||
- Every slug in every `items[]` must exist at `src/content/find/<slug>/index.mdx`. Confirm before declaring done.
|
- Every slug in every `items[]` must exist at `src/content/find/<year>/<month>/<slug>/index.mdx` (locate with `find src/content/find -type d -name "<slug>"`). Confirm before declaring done.
|
||||||
- Run `npm run build`. If any bundle fails to compile, fix and re-run.
|
- Run `npm run build`. If any bundle fails to compile, fix and re-run.
|
||||||
|
|
||||||
### 7. Update the log
|
### 7. Update the log
|
||||||
|
|||||||
@@ -14,8 +14,8 @@ Invoke from inside the `unique.rzen.dev` repo.
|
|||||||
|
|
||||||
- `sources.json` at the project root — curated source list with per-source `fetch` strategy (`webfetch` / `curl` / `skip`) and optional `fetchUrl`.
|
- `sources.json` at the project root — curated source list with per-source `fetch` strategy (`webfetch` / `curl` / `skip`) and optional `fetchUrl`.
|
||||||
- `daily-finds.log.md` — running log of every find slug ever written (used to skip duplicates).
|
- `daily-finds.log.md` — running log of every find slug ever written (used to skip duplicates).
|
||||||
- `src/content/find/*.mdx` — already-captured finds (every existing slug is a "do not re-suggest" item).
|
- `src/content/find/<year>/<month>/<slug>/index.mdx` — already-captured finds (every existing slug is a "do not re-suggest" item; slugs are globally unique across years/months even though folders are nested by date).
|
||||||
- `src/content/reviews/*.mdx` — already-reviewed items (do not re-suggest).
|
- `src/content/reviews/<slug>/index.mdx` — already-reviewed items (do not re-suggest).
|
||||||
- `candidate-sources.md` — newly nominated sources awaiting user vetting.
|
- `candidate-sources.md` — newly nominated sources awaiting user vetting.
|
||||||
|
|
||||||
## The bar
|
## The bar
|
||||||
@@ -42,14 +42,14 @@ For each source record: items extracted, or `empty` / `blocked` / `skipped`.
|
|||||||
|
|
||||||
For each extracted item, drop:
|
For each extracted item, drop:
|
||||||
|
|
||||||
- Anything whose slug already exists in `src/content/find/`.
|
- Anything whose slug already exists anywhere under `src/content/find/` (find slugs are globally unique — check the leaf folder name across all `<year>/<month>/` buckets).
|
||||||
- Anything whose name appears anywhere in `daily-finds.log.md`.
|
- Anything whose name appears anywhere in `daily-finds.log.md`.
|
||||||
- Anything reviewed in `src/content/reviews/` (compare by `name` field).
|
- Anything reviewed in `src/content/reviews/` (compare by `name` field).
|
||||||
- Items that fail the bar above.
|
- Items that fail the bar above.
|
||||||
|
|
||||||
### 3. Write find files
|
### 3. Write find files
|
||||||
|
|
||||||
For every survivor, write one file at `src/content/find/<slug>.mdx`:
|
For every survivor, write one file at `src/content/find/<year>/<month>/<slug>/index.mdx` where `<year>` and `<month>` come from today's date (e.g. `src/content/find/2026/05/<slug>/index.mdx`). Hero image (when present) sits next to it as `src/content/find/<year>/<month>/<slug>/hero.<ext>`. The leaf folder name is the slug; URLs stay flat at `/find/<slug>/` because the content-collection loader uses a `leafSlug` id derivation.
|
||||||
|
|
||||||
- Slug: kebab-case form of the name (lowercase, ASCII, no leading numbers).
|
- Slug: kebab-case form of the name (lowercase, ASCII, no leading numbers).
|
||||||
- Frontmatter: `name`, `subtitle` (optional, one-liner), `date` (today), `link` (external URL — required), `linkText` (optional), `source` (the source name from sources.json — required, exact match), `topics` (copied from the source's `topics`), `tags` (free editorial tags inferred from the item — keep to 2-4), `description` (optional meta override).
|
- Frontmatter: `name`, `subtitle` (optional, one-liner), `date` (today), `link` (external URL — required), `linkText` (optional), `source` (the source name from sources.json — required, exact match), `topics` (copied from the source's `topics`), `tags` (free editorial tags inferred from the item — keep to 2-4), `description` (optional meta override).
|
||||||
@@ -63,7 +63,7 @@ If `link` for a Reddit-discovered item points at a v.redd.it / i.redd.it URL, fe
|
|||||||
For every find, try to retrieve a single representative image from the linked page so the find has visual support if it later graduates to a review (or gets surfaced on a tile).
|
For every find, try to retrieve a single representative image from the linked page so the find has visual support if it later graduates to a review (or gets surfaced on a tile).
|
||||||
|
|
||||||
- **Where to look (in priority order):** `og:image` meta tag → JSON-LD `image` field → main product photo / hero image markup → first article image.
|
- **Where to look (in priority order):** `og:image` meta tag → JSON-LD `image` field → main product photo / hero image markup → first article image.
|
||||||
- **Where to save:** `src/assets/finds/<slug>/hero.<ext>`. Preserve the original extension (`.jpg`, `.png`, `.webp`, `.gif`). One file per find — `hero` is the canonical name.
|
- **Where to save:** `src/content/find/<year>/<month>/<slug>/hero.<ext>` — colocated next to `index.mdx`. Preserve the original extension (`.jpg`, `.png`, `.webp`, `.gif`). One file per find — `hero` is the canonical name.
|
||||||
- **What to skip:** images with marketing/sales overlay text (Amazon-style "BEST PRESS / NO GRIT" tags), tiny thumbnails (<400px on the long edge), generic site logos, paywalled CDN URLs that 403 to curl. If the only available shots are marketing collages, skip rather than save a noisy image — a missing hero is fine, a bad one isn't.
|
- **What to skip:** images with marketing/sales overlay text (Amazon-style "BEST PRESS / NO GRIT" tags), tiny thumbnails (<400px on the long edge), generic site logos, paywalled CDN URLs that 403 to curl. If the only available shots are marketing collages, skip rather than save a noisy image — a missing hero is fine, a bad one isn't.
|
||||||
- **For Mac/iOS apps:** prefer the App Store hero or developer-site screenshot. For physical products: prefer a clean studio shot or lifestyle photo without overlay copy. For travel destinations: prefer a Wikimedia Commons / Wikipedia image (free-to-use only). For text-only finds (quotes, dad jokes, essays): no media expected — skip.
|
- **For Mac/iOS apps:** prefer the App Store hero or developer-site screenshot. For physical products: prefer a clean studio shot or lifestyle photo without overlay copy. For travel destinations: prefer a Wikimedia Commons / Wikipedia image (free-to-use only). For text-only finds (quotes, dad jokes, essays): no media expected — skip.
|
||||||
- **Fetch strategy:** `curl -sL --max-time 25 -A "Mozilla/5.0 (...Safari...)" "<image-url>" -o <path>`. WebFetch is for HTML, not binaries.
|
- **Fetch strategy:** `curl -sL --max-time 25 -A "Mozilla/5.0 (...Safari...)" "<image-url>" -o <path>`. WebFetch is for HTML, not binaries.
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
## May 2026
|
## May 2026
|
||||||
|
|
||||||
|
- Bucket `find/` folders by capture date: every find moves from `src/content/find/<slug>/index.mdx` to `src/content/find/<year>/<month>/<slug>/index.mdx` (all 289 existing finds migrated to `2026/05/`). The `find` content-collection loader uses a new `leafSlug` `generateId` so the id (and therefore the URL at `/find/<slug>/`) stays flat, and `src/lib/find-hero.ts` switched to a recursive `**/hero.{...}` glob. No URL changes; bundle `items[]`, `promotedTo`/`fromFind` cross-references, and category/tag pages all keep working unchanged. Rationale: the flat folder was getting hard to scan and slow `git status` at ~290 finds and growing 20+/day
|
||||||
- Rename the "finds" superpost concept to **bundle**. The `finds` collection becomes `bundles` (`src/content/bundles/`), URLs move from `/finds/<slug>/` to `/bundles/<slug>/`, and the home/footer/search labels switch from "List" to "Bundle". Internal renames: `findListMosaic` → `bundleMosaic`, `FindsPost` → `Bundle`, `findsReferencing` → `bundlesReferencing`, `Entry.type 'finds'` → `'bundle'`, `OgFallback 'finds'` → `'bundles'`. Build script and generated mosaic dir follow (`scripts/build-bundle-mosaics.mjs`, `src/generated/bundle-mosaics/`). Skills `build-finds` and `cluster-finds` renamed to `build-bundle` and `cluster-bundles`. The `find` collection (individual items) is unchanged
|
- Rename the "finds" superpost concept to **bundle**. The `finds` collection becomes `bundles` (`src/content/bundles/`), URLs move from `/finds/<slug>/` to `/bundles/<slug>/`, and the home/footer/search labels switch from "List" to "Bundle". Internal renames: `findListMosaic` → `bundleMosaic`, `FindsPost` → `Bundle`, `findsReferencing` → `bundlesReferencing`, `Entry.type 'finds'` → `'bundle'`, `OgFallback 'finds'` → `'bundles'`. Build script and generated mosaic dir follow (`scripts/build-bundle-mosaics.mjs`, `src/generated/bundle-mosaics/`). Skills `build-finds` and `cluster-finds` renamed to `build-bundle` and `cluster-bundles`. The `find` collection (individual items) is unchanged
|
||||||
- Add Cloudflare Web Analytics: privacy-preserving, cookieless beacon injected into `BaseLayout.astro` so per-page traffic, referrers, and Core Web Vitals show up in the Cloudflare dashboard scoped to `unique.rzen.dev`. Privacy statement on `/legal/` updated to disclose the beacon
|
- Add Cloudflare Web Analytics: privacy-preserving, cookieless beacon injected into `BaseLayout.astro` so per-page traffic, referrers, and Core Web Vitals show up in the Cloudflare dashboard scoped to `unique.rzen.dev`. Privacy statement on `/legal/` updated to disclose the beacon
|
||||||
- Strengthen the "Use of the site" section on `/legal/`: explicit "inclusion isn't endorsement" + no warranty on safety/quality/durability/fit/continued-existence + no responsibility for what happens after click-through. Tone kept plain, not legalese
|
- Strengthen the "Use of the site" section on `/legal/`: explicit "inclusion isn't endorsement" + no warranty on safety/quality/durability/fit/continued-existence + no responsibility for what happens after click-through. Tone kept plain, not legalese
|
||||||
|
|||||||
@@ -125,9 +125,9 @@ src/
|
|||||||
index.mdx # article + frontmatter
|
index.mdx # article + frontmatter
|
||||||
<media files> # web-ready variants (hero, screenshots, demos)
|
<media files> # web-ready variants (hero, screenshots, demos)
|
||||||
source/ # archival originals (not bundled)
|
source/ # archival originals (not bundled)
|
||||||
find/<slug>/
|
find/<year>/<month>/<slug>/
|
||||||
index.mdx
|
index.mdx # find folders are bucketed by capture date
|
||||||
hero.{jpg,png,gif,webp} # auto-resolved by src/lib/find-hero.ts
|
hero.{jpg,png,gif,webp} # auto-resolved by src/lib/find-hero.ts; URLs stay flat at /find/<slug>/
|
||||||
bundles/<slug>/index.mdx # editorial roundups (text intro + grid)
|
bundles/<slug>/index.mdx # editorial roundups (text intro + grid)
|
||||||
posts/<slug>/index.mdx # essays
|
posts/<slug>/index.mdx # essays
|
||||||
lib/
|
lib/
|
||||||
|
|||||||
@@ -2,6 +2,15 @@
|
|||||||
|
|
||||||
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.
|
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-09
|
||||||
|
|
||||||
|
- **Daniel Fox — danielfox.ie** — https://www.danielfox.ie/ — surfaced as the author of the YouTube HLS Shortcut captured this run. Personal blog with deep-cut iOS Shortcuts research and reverse-engineering writeups (the YouTube post documented an undocumented YouTube player API). Low-volume but unusually substantive when posts land — worth quarterly check.
|
||||||
|
- **Ambrook OffRange** — https://ambrook.com/offrange/ — surfaced via Kottke link to the Pocket Forests / Miyawaki piece. Editorial arm of agricultural fintech Ambrook, covering food systems, land use, and rural innovation with longform writing. Adjacent-but-relevant for general-delight + environment captures.
|
||||||
|
- **Galen Leather Blog** — https://www.galenleather.com/blogs/news — Turkish leather-goods shop's blog surfaced via Kottke's Nibmeister piece. Strong on fountain-pen craft, leather repair, niche analog-tool culture; the kind of shop blog that publishes substantive long reads rather than thin product copy.
|
||||||
|
- **Rory Pulvino — rory.codes** — https://rory.codes/ — surfaced via Web Curios (Blind Data analysis of the Guardian Blind Date column). Independent data-storytelling projects with sharp writing and clean visualizations. Low-volume but the projects each warrant their own find.
|
||||||
|
- **Punto Fisso (Stefano Quintarelli)** — https://puntofisso.net/ — surfaced via Web Curios (Eurovision lyrics scrollytelling). Italian data-journalism project; English-language interactive pieces appear infrequently but are unusually substantive. Worth quarterly check.
|
||||||
|
- **Since You Arrived** — https://sinceyouarrived.world/ — surfaced via Web Curios (Last Night's Sunset gradient page). Personal art/code project with a few small browser experiments at /sky and other paths. Vet for whether the domain has more pages worth surfacing.
|
||||||
|
|
||||||
## 2026-05-06 (evening sweep)
|
## 2026-05-06 (evening sweep)
|
||||||
|
|
||||||
- **Outdoor Research — Infinite Guarantee** — https://www.outdoorresearch.com/ — surfaced via r/BuyItForLife reader experience post detailing same-day Foray jacket replacement under the lifetime warranty. The policy itself is a noteworthy "buy-it-once" pick — but the canonical landing URL was elusive in this run (`/pages/infinite-guarantee`, `/pages/our-infinite-guarantee`, `/pages/infinite-guarantee-policy` all 404). Worth a dedicated investigation pass to find the right URL and then capture as a guarantees/return-policy find rather than as an ongoing source.
|
- **Outdoor Research — Infinite Guarantee** — https://www.outdoorresearch.com/ — surfaced via r/BuyItForLife reader experience post detailing same-day Foray jacket replacement under the lifetime warranty. The policy itself is a noteworthy "buy-it-once" pick — but the canonical landing URL was elusive in this run (`/pages/infinite-guarantee`, `/pages/our-infinite-guarantee`, `/pages/infinite-guarantee-policy` all 404). Worth a dedicated investigation pass to find the right URL and then capture as a guarantees/return-policy find rather than as an ongoing source.
|
||||||
|
|||||||
@@ -736,3 +736,132 @@ Graduated from find captured 2026-05-05, source: Reader suggestion.
|
|||||||
Hero: rejected the find's `blip.net/og_image.jpg` brand-card splash in favour of MacMenuBar's 500×491 product screenshot showing the actual menu-bar dropdown (paired-devices list, search, "Add a Device"). Smaller than usual but content-only and shows what the app does, vs. a marketing collage with overlay text.
|
Hero: rejected the find's `blip.net/og_image.jpg` brand-card splash in favour of MacMenuBar's 500×491 product screenshot showing the actual menu-bar dropdown (paired-devices list, search, "Add a Device"). Smaller than usual but content-only and shows what the app does, vs. a marketing collage with overlay text.
|
||||||
Category: `indie` (existing — fits cleanly alongside other single-purpose indie apps without justifying a new `file-transfer` or `networking` bucket yet).
|
Category: `indie` (existing — fits cleanly alongside other single-purpose indie apps without justifying a new `file-transfer` or `networking` bucket yet).
|
||||||
Pattern note: **secondary blog/curation sites are a good hero source for apps whose own site is a heavily-styled marketing splash.** MacMenuBar embedded a clean menu-bar product crop that the dev site itself didn't expose anywhere fetchable. Worth adding macmenubar.com to the "press writeup fallback" list alongside Colossal/MacStories.
|
Pattern note: **secondary blog/curation sites are a good hero source for apps whose own site is a heavily-styled marketing splash.** MacMenuBar embedded a clean menu-bar product crop that the dev site itself didn't expose anywhere fetchable. Worth adding macmenubar.com to the "press writeup fallback" list alongside Colossal/MacStories.
|
||||||
|
|
||||||
|
## 2026-05-09 — capture run
|
||||||
|
|
||||||
|
Three-day gap since the 2026-05-06 evening sweep. Sources scanned: 59 in `sources.json` — 22 productive (66 hits), ~26 unproductive but live, 3 blocked/broken (Atlas Obscura still cloudflare-stub, MoMA store needed JS-data parse not WebFetch, StyleForum 403 to WebFetch but works via curl), 9 skipped per `fetch: skip`. Net 66 new finds after dedup against the 223-find baseline (289 total now).
|
||||||
|
|
||||||
|
Productive sources: r/macapps (7 — Loop, Paperman, Liqoria, FileFluss, SuperIsland, Strflow, Contact Sheet), r/shortcuts (1 — Daniel Fox YouTube HLS), r/dadjokes (6), icanhazdadjoke (6), Daring Fireball (1 — Prolost Watches), Brett Terpstra (1 — GitHub-contribution image API, his own May 8 post), The Eclectic Light Company (2 — APFS snapshot rollback, Spotlight metadata check), OSXDaily (1 — Wallpaper Reactor Lite), Wallpaper* Travel (5 — Hotel Julien, Six Senses London, JW Marriott Tokyo, Belmond Celia, Mitsu London), Boutique Homes (3 — 34 Rue Louise-Emilie, CasaCau, Parisian Designer Pied à Terre), AFAR (2 — Hotel Monroe Louisiana, suitcase-on-bed bacteria), The Outbound Collective (2 — The Narrows, Havasu Falls), MoMA Design Store (7 — Tom Dixon Jack, Aer City Pack Pro 2, magnetic chess set, glass fruit vase, Orb utensil, Duchamp 2027 calendar, I Heart NY Hoptimist), Snow Peak (5 — Spring Stacking Mug Set, Field Barista Kettle, Urban Umbrella, Micro Hozuki, Shimo Tumbler 360), Kottke.org (3 — Nibmeisters, Pocket Forests / Miyawaki, Wowsabout!), Cool Tools (1 — Zen Mind, Beginner's Mind), Open Culture (2 — Egyptian honey shelf life, Buckminster Fuller population animation), Web Curios (8 — Vaskange, RedditTok/reddvu, Blind Data, Eurovision lyrics scrollytelling, NTK Archive, Sample Text Project, Land Lines, Last Night's Sunset), A.Word.A.Day (1 — Pynchon "wrong questions"), The Marginalian (2 — Gary Snyder cage, Marianne Moore imaginary gardens), Quote Investigator (1 — Boulay "worse than a crime").
|
||||||
|
|
||||||
|
Unproductive but live: MacStories (Astropad Workbench is news-style, Apple Frames 4 + Pedometer 8 already captured, Club issues paywalled), Tools and Toys (CoBak/Felo/Ooni/Marshall/Bridge City/umoven/Anker — all already captured), One Thing Well (top 10 unchanged from 2026-05-06 evening, all already captured), Six Colors (storage-tip essay + Hovercraft + tech travel essay all already captured one way or another; new MacBook Neo Culpan analysis is industry news), Cool Material (homepage = same Nike/Bulova/G-Shock partner content as 2026-05-06), Werd (only listicle roundups visible), Carryology (Bellroy x Carryology Sling considered but it's a launched-soon collab teaser without a working product page), Standard & Strange Journal (the 7 Field Guides are educational essays not specific products), Outlier (Sunwarp/Injex/Ramielust/Littlebigs all already captured or in already-captured collections), A Continuous Lean (still December 2025 — no new posts since prior runs), Put This On (only the J. Press March drawing post + "Inside Track" eBay roundups — eBay roundups are members-only marketplace alerts, not findable items), Recomendo issue #513 (all 6 picks already captured 2026-05-06), Quote Investigator (rest of recent set — Reeve, Dyer, Stendhal, Lobsters, Feet/Knees, Research/Einstein — all already captured or rejected), The Marginalian Acosta/Cosmotheoros essay (not a captureable line; Loneliness essay had a usable line on the human condition but the source attribution would just be Popova's prose, not a sourced quote), Things Magazine (most recent post April 5 — same content for 4+ runs, source is functionally dormant; nominate for `fetch: skip` if no May post by next run), Snow Peak (deep-dive into New Arrivals JSON parse this run — got 28 products listed, picked the 5 most distinctive: spring-stacking, field-barista, urban-umbrella, micro-hozuki, shimo-tumbler), Roadtrippers Magazine (Route 66 nostalgia posts + RVC sponsored content + parkitecture roundup — none are individually-captureable), Wikiquote (Ted Turner May 7 quote of the day too generic), Dr. Drang (May 8 Key followup is engineering critique, not a tool; AirPort Express commentary is retro-essay; the iOS Mail blocking series is procedural rather than discrete tool-tip), Uses This (5 most recent interviews — Le Cunff, Lim, Newbold, Peck, Ruppert — index page only; full pages aren't being fetched and tools-mentioned aren't extractable from index alone, same pattern as past runs).
|
||||||
|
|
||||||
|
Blocked or broken: Atlas Obscura (Cloudflare 5471-byte stub — fourth consecutive run; `fetch: skip` is now extremely overdue. The articles `jens-jensen-winding-road-door-county-wisconsin` and the Cadillac Ranch place page both 403/stub. Articles I tried via direct curl all returned the same stub. Recommend flipping to `fetch: skip` next prune), MoMA Design Store (the WebFetch view shows only the navigation framework — actual product cards are rendered in JS-embedded JSON. Workaround: parse `name:`/`handle:`/`image:` JSON fragments from the raw HTML — the data is server-rendered into the page as a JS object literal, not loaded via XHR. Captured 7 items via this approach. Worth documenting as the canonical MoMA fetch pattern), TIWIB (Angular-SPA; only template placeholders in the HTML — same regression as 2026-05-06 evening), StyleForum (curl works at 156KB but the homepage is a category-grid not a thread index — the recent-threads list isn't extractable from that landing page; we'd need /forums/whats-new/posts/ to surface fresh content. Future runs should target that path), Web Curios (5/8/26 issue posted today — captured 8 picks. Issue is finally substantive, ending the multi-week dormancy noted in earlier runs).
|
||||||
|
|
||||||
|
Skipped (per sources.json `fetch: skip`): The Sweet Setup, Indie App Sunday (Mastodon), Gear Patrol, The Awesomer, Permanent Style, Heddels, Mr Porter Journal, Spotted by Locals, The Browser.
|
||||||
|
|
||||||
|
Kikkerland: skipped this run on the same Amazon-storefront-verification basis as 2026-05-06 evening. Surveyed 8 homepage products (Robin 3D Puzzle, Light Up Pencil, Golf Wine Aerator, Woodpecker Garden Shears, Wooden Mini Wrench, Cactus Car Charger, Cat Butt Magnets) but the Amazon `/s/?k=Kikkerland+...` searches still return CAPTCHA stubs even with full-headers + compression. Per the 2026-05-06 evening note, the right unblock is either pre-caching Kikkerland's Amazon brand-store ASIN list, or flipping the Kikkerland `link:` to point at the kikkerland.com product page directly (no Amazon affiliate routing, no `gift` tag rule auto-applied). Logging as deferred.
|
||||||
|
|
||||||
|
Reader's Digest Jokes / TidBITS / Kevin Kelly thetechnium: not scanned this run (low signal across last 4+ runs).
|
||||||
|
|
||||||
|
### Captured finds
|
||||||
|
|
||||||
|
- loop-radial-window-manager — Loop — source: r/macapps
|
||||||
|
- paperman-screen-matte — Paperman — source: r/macapps
|
||||||
|
- liqoria — Liqoria — source: r/macapps
|
||||||
|
- filefluss — FileFluss — source: r/macapps
|
||||||
|
- superisland — SuperIsland — source: r/macapps
|
||||||
|
- strflow — Strflow — source: r/macapps
|
||||||
|
- contact-sheet-mac — Contact Sheet — source: r/macapps
|
||||||
|
- prolost-watches — Prolost Watches — source: Daring Fireball — Linked List
|
||||||
|
- wallpaper-reactor-lite — Wallpaper Reactor Lite — source: OSXDaily
|
||||||
|
- github-contribution-image-api — GitHub Contribution Image API — source: Brett Terpstra
|
||||||
|
- apfs-snapshot-rollback — APFS snapshot rollback tip — source: The Eclectic Light Company
|
||||||
|
- spotlight-metadata-check — Check Spotlight metadata with mdimport/mdls — source: The Eclectic Light Company
|
||||||
|
- youtube-hls-shortcut — YouTube HLS AirPlay Shortcut — source: r/shortcuts
|
||||||
|
- hotel-julien-antwerp — Hotel Julien — source: Wallpaper* Travel
|
||||||
|
- six-senses-london — Six Senses London — source: Wallpaper* Travel
|
||||||
|
- jw-marriott-tokyo-takanawa — JW Marriott Tokyo — source: Wallpaper* Travel
|
||||||
|
- belmond-celia-baz-luhrmann — Celia Carriage, British Pullman — source: Wallpaper* Travel
|
||||||
|
- mitsu-london — Mitsu — source: Wallpaper* Travel
|
||||||
|
- 34-rue-louise-emilie-paris — 34 Rue Louise-Emilie — source: Boutique Homes
|
||||||
|
- casacau-rome — CasaCau — source: Boutique Homes
|
||||||
|
- parisian-designer-pied-a-terre — Parisian Designer Pied à Terre — source: Boutique Homes
|
||||||
|
- hotel-monroe-louisiana — Hotel Monroe — source: AFAR
|
||||||
|
- suitcase-on-bed-bacteria — Why You Shouldn't Put a Suitcase on the Hotel Bed — source: AFAR
|
||||||
|
- the-narrows-zion — The Narrows — source: The Outbound Collective
|
||||||
|
- havasu-falls — Havasu Falls — source: The Outbound Collective
|
||||||
|
- tom-dixon-jack-portable-lamp — Tom Dixon Jack Portable Lamp — source: MoMA Design Store
|
||||||
|
- aer-city-pack-pro-2 — Aer City Pack Pro 2 (24L) — source: MoMA Design Store
|
||||||
|
- magnetic-folding-chess-checkers — Magnetic Folding Chess & Checkers Set — source: MoMA Design Store
|
||||||
|
- glass-fruit-bud-vase — Glass Fruit Bud Vase — source: MoMA Design Store
|
||||||
|
- orb-kitchen-utensil — Orb Kitchen Utensil — source: MoMA Design Store
|
||||||
|
- marcel-duchamp-2027-calendar — Marcel Duchamp 2027 Wall Calendar — source: MoMA Design Store
|
||||||
|
- i-heart-ny-hoptimist — I (Heart) NY Hoptimist — source: MoMA Design Store
|
||||||
|
- spring-stacking-titanium-mug-set — Spring Stacking Titanium Mug Set — source: Snow Peak
|
||||||
|
- field-barista-kettle — Snow Peak Field Barista Kettle — source: Snow Peak
|
||||||
|
- snow-peak-urban-umbrella — Snow Peak Urban Umbrella — source: Snow Peak
|
||||||
|
- micro-hozuki-lantern — Snow Peak Micro Hozuki — source: Snow Peak
|
||||||
|
- shimo-tumbler-360 — Snow Peak Shimo Tumbler 360 Duo Set — source: Snow Peak
|
||||||
|
- nibmeister-galen-leather — Nibmeisters — source: Kottke.org
|
||||||
|
- pocket-forests-miyawaki — Pocket Forests — source: Kottke.org
|
||||||
|
- wowsabout-pbs-kids — Wowsabout! — source: Kottke.org
|
||||||
|
- zen-mind-beginners-mind-book — Zen Mind, Beginner's Mind — source: Cool Tools
|
||||||
|
- egyptian-honey-shelf-life — Why 3,000-year-old Egyptian honey is still edible — source: Open Culture
|
||||||
|
- buckminster-fuller-population-animation — Buckminster Fuller — Animated Population Growth, 1965 — source: Open Culture
|
||||||
|
- vaskange-nested-worlds — Vaskange — source: Web Curios
|
||||||
|
- reddvu-subreddit-tiktok — RedditTok (reddvu) — source: Web Curios
|
||||||
|
- blind-data-guardian-blind-date — Blind Data — source: Web Curios
|
||||||
|
- eurovision-lyrics-data — Eurovision Through the Decades — source: Web Curios
|
||||||
|
- ntk-archive — NTK — Need To Know Archive — source: Web Curios
|
||||||
|
- sample-text-store-merch — The Sample Text Project — source: Web Curios
|
||||||
|
- chrome-experiments-land-lines — Land Lines — source: Web Curios
|
||||||
|
- last-nights-sunset-gradient — Last Night's Sunset — source: Web Curios
|
||||||
|
- pynchon-wrong-questions — Thomas Pynchon "The wrong questions" — source: A.Word.A.Day
|
||||||
|
- gary-snyder-cage — Gary Snyder "The cage they were tricked into entering" — source: The Marginalian
|
||||||
|
- marianne-moore-imaginary-gardens — Marianne Moore "Imaginary gardens with real toads" — source: The Marginalian
|
||||||
|
- boulay-crime-blunder — Boulay de la Meurthe "Worse than a crime; it was a blunder" — source: Quote Investigator
|
||||||
|
- joke-microscope-telescope-kaleidoscope — The Microscope and the Telescope Joke — source: r/dadjokes
|
||||||
|
- joke-harp-pull-strings — The Harp Discount Joke — source: r/dadjokes
|
||||||
|
- joke-burger-king-whopper — The Burger King and Dairy Queen Joke — source: r/dadjokes
|
||||||
|
- joke-chinese-lightbulb-dim-sum — The Chinese Lightbulb Joke — source: r/dadjokes
|
||||||
|
- joke-viking-hiking — The Viking Without a Boat Joke — source: r/dadjokes
|
||||||
|
- joke-magician-pear — The Magician's Pear Joke — source: r/dadjokes
|
||||||
|
- joke-television-volume-stuck — The Loud Television Joke — source: icanhazdadjoke
|
||||||
|
- joke-bagel-plain — The Plain Bagel Joke — source: icanhazdadjoke
|
||||||
|
- joke-pizza-tomato-paste — The Broken Pizza Joke — source: icanhazdadjoke
|
||||||
|
- joke-brazilian-lightbulb — The Brazilian Lightbulb Joke — source: icanhazdadjoke
|
||||||
|
- joke-sign-language — The Least Spoken Language Joke — source: icanhazdadjoke
|
||||||
|
- joke-playground-other-slide — The Playground Slide Joke — source: icanhazdadjoke
|
||||||
|
|
||||||
|
### Hero coverage
|
||||||
|
|
||||||
|
- Heroes saved: 47 of 54 attempted (12 jokes are text-only by convention; 4 quotes are text-only; pynchon-wrong-questions also text-only). Failures: 7 finds without a usable hero.
|
||||||
|
- Hero failures by reason:
|
||||||
|
- **superisland**: dynamicisland.app `/og-image.png` returns HTML (the Vercel-hosted Next.js app's edge function isn't generating a real OG card). README has only a 96×96 logo. Skipped — no usable image.
|
||||||
|
- **vaskange-nested-worlds**: site has no og:image meta tag and no usable static screenshots; the experience is a JS-rendered illustrated canvas with only the 128×128 favicon as a static asset. Skipped.
|
||||||
|
- **ntk-archive**: ntk.net is plain HTML 1997-era markup with no images at all on the index. Text-only by site design — skipped.
|
||||||
|
- **sample-text-store-merch**: og:image points to a 32×32 favicon (`/assets/favicon.png`); no other static image assets. Skipped.
|
||||||
|
- **youtube-hls-shortcut**: danielfox.ie post has no og:image meta tag. Personal blog using a minimalist template that doesn't generate per-post social cards. Skipped.
|
||||||
|
- **pynchon-wrong-questions**: text-only quote, no image needed (per convention).
|
||||||
|
- **joke-* (12 files)**: text-only by convention.
|
||||||
|
- Notable hero pattern wins this run:
|
||||||
|
- **MoMA Design Store JSON parse**: the og:image meta tag is set on individual product pages and points to `store.moma.org/cdn/shop/files/<uuid>.jpg?v=<timestamp>`. Adding `&width=1500` to the URL upscales to 1500×1500 cleanly. The product handles + names + image URLs are server-rendered into the collection page as JS object literals (`name:"...",handle:"...",image:"\/\/..."`), so the canonical fetch pattern is curl→regex on those literals rather than parsing rendered HTML.
|
||||||
|
- **Snow Peak product images**: the og:image protocol-relative `//www.snowpeak.com/cdn/shop/files/<id>.jpg?v=...&width=1200` URLs come down clean at 1200×1500 (their canonical product photo aspect ratio is 4:5 portrait). Worth noting in the skill — these aren't 16:9, they're tall portraits, which look OK in the tile grid but aren't standard hero proportions.
|
||||||
|
- **Wallpaper* CDN remains rock-solid**: all 5 picks (hotel-julien, six-senses-london, jw-marriott-tokyo-takanawa, belmond-celia-baz-luhrmann, mitsu-london) had og:image at `cdn.mos.cms.futurecdn.net/<hash>.<ext>` returning clean 1540–6000px images.
|
||||||
|
- **Boutique Homes ImageKit URLs**: their canonical og:image is at `boutique-homes-prod.sfo3.cdn.digitaloceanspaces.com/properties/<id>/...jpg`. Some come pre-sized via ImageKit query params (`?tr=w-3840,ar-1.3-1`); others are raw. All three picks downloaded clean at 1920×1280.
|
||||||
|
- **The Outbound Collective**: og:image URLs are at `images.theoutbound.com/<date>/<hash>?w=1200&h=630&fit=crop&...&s=<sig>`. The signature `s=` parameter is required — strip it and the URL returns 403. Easy to copy-paste verbatim. Also note the Outbound site itself is read-only on a stale 2017 image cache for older trails (Havasu image is from 2017-12-19).
|
||||||
|
- **Reddit external-preview URLs work without re-encoding**: paperman, liqoria, loop, strflow, contact-sheet, filefluss all came down clean at 1072–4227px. The signed-URL pattern continues to be reliable.
|
||||||
|
- **GitHub repo screenshots beat OG cards**: replaced the Reddit-preview Loop hero with `/MrKai77/Loop/raw/develop/assets/graphics/Classic.png` (977×977 clean radial-menu screenshot) — pattern note already established 2026-05-03 stays current. Watch for `develop` branch vs `main`.
|
||||||
|
- Overrides applied this run:
|
||||||
|
- Replaced FileFluss's `preview.redd.it` gallery hero with the canonical homepage screenshot at `ranagmbh.de/wp-content/uploads/FileFluss-main-scaled.webp` (2560×1627) — better composition, no Reddit gallery framing.
|
||||||
|
- Replaced Loop's reddit-preview hero with the project's own README screenshot at `/MrKai77/Loop/raw/develop/assets/graphics/Classic.png` — cleaner radial-menu hero.
|
||||||
|
|
||||||
|
### New source nominees
|
||||||
|
|
||||||
|
6 this run (see candidate-sources.md):
|
||||||
|
- Daniel Fox (danielfox.ie) — author of YouTube HLS Shortcut; deep iOS Shortcuts research blog
|
||||||
|
- Ambrook OffRange (ambrook.com/offrange) — agricultural fintech editorial arm; longform on food systems / land use; surfaced via Kottke
|
||||||
|
- Galen Leather Blog (galenleather.com/blogs/news) — leather-goods shop blog with substantive analog-tool craft pieces; surfaced via Kottke
|
||||||
|
- Rory Pulvino (rory.codes) — independent data-storytelling projects; surfaced via Web Curios
|
||||||
|
- Punto Fisso / Stefano Quintarelli (puntofisso.net) — Italian data journalism with English-language scrollytelling; surfaced via Web Curios
|
||||||
|
- Since You Arrived (sinceyouarrived.world) — small-batch browser art experiments; surfaced via Web Curios
|
||||||
|
|
||||||
|
### Source maintenance notes for next prune
|
||||||
|
|
||||||
|
- **Atlas Obscura → flip to `fetch: skip`**. Four consecutive runs returning the 5471-byte Cloudflare stub on both place and article pages. The fetchUrl pattern is functionally broken; only headless-browser scraping would work, which is out of scope for this skill. Alternative: their RSS feed at `https://www.atlasobscura.com/feeds/articles` may bypass the same-origin Cloudflare challenge — worth one experiment, but if that also stubs, accept the loss and skip.
|
||||||
|
- **Things Magazine → consider quarterly cadence**. Last post 2026-04-05 ("Links to click through and enjoy"). Now stale across 5+ runs. The cadence in `sources.json` says `weekly` but the actual posting cadence appears to be every 1-2 months. Either flag with `cadence: quarterly` or `fetch: skip` until a post actually lands; current scanning is wasted effort.
|
||||||
|
- **Tools and Toys → still productive but very tight pool**. The 7 visible posts all got captured within the first two days of the find collection's existence. Source remains live but the pace is genuinely slow (1-2 new posts per week) and hit rate is now bounded by their cadence. Worth monitoring rather than expecting daily yield.
|
||||||
|
- **A Continuous Lean → still December 2025**. Six months of dormancy. Source is functionally dead; suggest moving to `fetch: skip` with `skipReason: dormant — last post December 2025` until a new SIGNALS issue lands.
|
||||||
|
- **Put This On → marketplace-only output mostly**. Their "Inside Track" weekly emails are eBay-link members-only digests. Public posts are infrequent (J. Press March 5 was the last substantive one). Consider downgrading from `weekly` to `as-needed` cadence and only checking when a non-Inside-Track post is referenced elsewhere.
|
||||||
|
- **Kikkerland Amazon-storefront verification**: still blocked by CAPTCHA. The 2026-05-06 evening note's two unblocks (pre-cached ASIN list, brand-store landing page) remain unimplemented. Until one lands, Kikkerland is functionally an unproductive source for finds that need the `gift` Amazon-default tag rule applied.
|
||||||
|
- **Snow Peak collection JSON parsing**: the 2026-05-06 morning post-run note about migrating MoMA + Snow Peak to JSON-endpoint fetches finally got applied this run for both. Snow Peak in particular has a much richer pool than the homepage suggested — the 28-product New Arrivals collection is a steady source of distinctive titanium kit. Worth formalizing the regex-on-product-handle pattern in the skill.
|
||||||
|
|||||||
@@ -4,6 +4,9 @@ import { glob } from 'astro/loaders';
|
|||||||
const stripIndex = ({ entry }: { entry: string }) =>
|
const stripIndex = ({ entry }: { entry: string }) =>
|
||||||
entry.replace(/\/index\.mdx$/, '');
|
entry.replace(/\/index\.mdx$/, '');
|
||||||
|
|
||||||
|
const leafSlug = ({ entry }: { entry: string }) =>
|
||||||
|
entry.replace(/\/index\.mdx$/, '').split('/').pop()!;
|
||||||
|
|
||||||
const reviews = defineCollection({
|
const reviews = defineCollection({
|
||||||
loader: glob({
|
loader: glob({
|
||||||
pattern: '**/index.mdx',
|
pattern: '**/index.mdx',
|
||||||
@@ -43,7 +46,7 @@ const find = defineCollection({
|
|||||||
loader: glob({
|
loader: glob({
|
||||||
pattern: '**/index.mdx',
|
pattern: '**/index.mdx',
|
||||||
base: './src/content/find',
|
base: './src/content/find',
|
||||||
generateId: stripIndex,
|
generateId: leafSlug,
|
||||||
}),
|
}),
|
||||||
schema: z.object({
|
schema: z.object({
|
||||||
name: z.string(),
|
name: z.string(),
|
||||||
|
|||||||
@@ -2,12 +2,11 @@
|
|||||||
title: "Small upgrades for the backyard"
|
title: "Small upgrades for the backyard"
|
||||||
date: 2026-05-03
|
date: 2026-05-03
|
||||||
tags: [daily-finds, outdoor, gifts]
|
tags: [daily-finds, outdoor, gifts]
|
||||||
description: "Three quiet upgrades for the yard — a camera bird feeder that names every species, motion-aware solar fence lights, and a German screwdriver set that's nicer to hold than it has any right to be."
|
description: "Two quiet upgrades for the yard — a camera bird feeder that names every species, and motion-aware solar fence lights that stay dim until something moves."
|
||||||
blurb: "Three quiet upgrades for the yard, the fence, and the toolbox."
|
blurb: "Two quiet upgrades for the yard and the fence."
|
||||||
items:
|
items:
|
||||||
- birdfy-smart-bird-feeder
|
- birdfy-smart-bird-feeder
|
||||||
- aootek-solar-fence-lights
|
- aootek-solar-fence-lights
|
||||||
- felo-ergonic-screwdriver-set
|
|
||||||
---
|
---
|
||||||
|
|
||||||
> Small backyard improvements stack quickly. A bird feeder with a camera in the eaves that names every species visiting your yard. A six-pack of solar lights that stay dim until something moves and then actually let you see. And the Felo screwdrivers — German, soft-handled, the household tool that's quietly nicer to hold than the version you've been using for a decade.
|
> Small backyard improvements stack quickly. A bird feeder with a camera in the eaves that names every species visiting your yard, and a six-pack of solar lights that stay dim until something moves and then actually let you see.
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.5 MiB |
@@ -0,0 +1,14 @@
|
|||||||
|
---
|
||||||
|
name: "34 Rue Louise-Emilie"
|
||||||
|
subtitle: "Two-bedroom Haussmannian apartment on a private Paris street"
|
||||||
|
date: 2026-05-09
|
||||||
|
link: https://www.boutique-homes.com/property/34-rue-louise-emilie
|
||||||
|
linkText: "boutique-homes.com"
|
||||||
|
source: "Boutique Homes"
|
||||||
|
topics:
|
||||||
|
- travel
|
||||||
|
tags: [paris, rental, design, haussmannian]
|
||||||
|
description: "Designer Sandie Roy filled a 12-metre-ceilinged Haussmann apartment with European antiques and her own pieces — sits on a quiet, gated private street in central Paris."
|
||||||
|
---
|
||||||
|
|
||||||
|
The apartment is a working designer's home, not a styled rental: 12-metre ceilings, a kitchen full of southern light, and antiques that arrive from estate sales in the Vendée mixed with European artisan pieces commissioned for the space. The address is a private gated street in central Paris, so the windows open to silence — unusual for a stay this central.
|
||||||
|
After Width: | Height: | Size: 331 KiB |
@@ -0,0 +1,14 @@
|
|||||||
|
---
|
||||||
|
name: "Aer City Pack Pro 2 (24L)"
|
||||||
|
subtitle: "Suspended-laptop-sleeve commuter pack, 24 litres, fits a 16-inch MacBook"
|
||||||
|
date: 2026-05-09
|
||||||
|
link: https://store.moma.org/products/aer-city-pack-pro-2-24l
|
||||||
|
linkText: "MoMA Design Store"
|
||||||
|
source: "MoMA Design Store"
|
||||||
|
topics:
|
||||||
|
- gifts
|
||||||
|
tags: [bag, commuter, edc, laptop]
|
||||||
|
description: "The laptop pocket is suspended off the bag's bottom on a padded sling, so dropping the bag doesn't drop your computer onto the sidewalk."
|
||||||
|
---
|
||||||
|
|
||||||
|
The standout detail in Aer's commuter pack is the laptop pocket: it's suspended on a padded soft-lined sleeve that hangs off the bag's interior frame rather than sitting flush with the bottom panel. Drop the bag onto a curb and the laptop never reaches the impact. Twenty-four litres, fits a 16-inch MacBook, $219.
|
||||||
|
Before Width: | Height: | Size: 502 KiB After Width: | Height: | Size: 502 KiB |
|
Before Width: | Height: | Size: 146 KiB After Width: | Height: | Size: 146 KiB |
|
Before Width: | Height: | Size: 193 KiB After Width: | Height: | Size: 193 KiB |
|
Before Width: | Height: | Size: 332 KiB After Width: | Height: | Size: 332 KiB |
|
Before Width: | Height: | Size: 243 KiB After Width: | Height: | Size: 243 KiB |
|
Before Width: | Height: | Size: 495 KiB After Width: | Height: | Size: 495 KiB |
|
After Width: | Height: | Size: 31 KiB |
@@ -0,0 +1,14 @@
|
|||||||
|
---
|
||||||
|
name: "Roll back to a macOS snapshot without Time Machine"
|
||||||
|
subtitle: "tmutil snapshot before risky changes; Recovery + Time Machine to roll back"
|
||||||
|
date: 2026-05-09
|
||||||
|
link: https://eclecticlight.co/2026/05/07/how-to-make-and-roll-back-to-a-snapshot/
|
||||||
|
linkText: "eclecticlight.co"
|
||||||
|
source: "The Eclectic Light Company"
|
||||||
|
topics:
|
||||||
|
- apple-tips
|
||||||
|
tags: [macos, apfs, terminal, recovery]
|
||||||
|
description: "Howard Oakley walks through `tmutil snapshot` and the Recovery-mode rollback path — a backup-of-last-resort that doesn't need an external drive."
|
||||||
|
---
|
||||||
|
|
||||||
|
`sudo tmutil snapshot` makes an APFS point-in-time copy of the boot volume in seconds; if a system update or kernel-extension experiment goes sideways, Recovery mode's Time Machine restore can roll back to it without ever touching an external drive. Howard Oakley is careful to note this isn't a backup substitute — rolling back deletes every later snapshot — but for a laptop on the road it's a one-line safety net.
|
||||||
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 385 KiB After Width: | Height: | Size: 385 KiB |
|
Before Width: | Height: | Size: 410 KiB After Width: | Height: | Size: 410 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 159 KiB After Width: | Height: | Size: 159 KiB |
|
Before Width: | Height: | Size: 720 KiB After Width: | Height: | Size: 720 KiB |
|
After Width: | Height: | Size: 2.2 MiB |
@@ -0,0 +1,14 @@
|
|||||||
|
---
|
||||||
|
name: "Celia Carriage, British Pullman"
|
||||||
|
subtitle: "Baz Luhrmann's Midsummer-Night-in-the-Jazz-Age railway carriage"
|
||||||
|
date: 2026-05-09
|
||||||
|
link: https://www.wallpaper.com/travel/baz-luhrmann-interview-belmond-british-pullman-celia-carriage
|
||||||
|
linkText: "wallpaper.com"
|
||||||
|
source: "Wallpaper* Travel"
|
||||||
|
topics:
|
||||||
|
- travel
|
||||||
|
tags: [train, design, baz-luhrmann, belmond]
|
||||||
|
description: "Baz Luhrmann and Catherine Martin redressed a 1932 Pullman carriage as a 12-seat lounge themed on A Midsummer Night's Dream. Day excursions out of London."
|
||||||
|
---
|
||||||
|
|
||||||
|
Belmond invited Baz Luhrmann and Catherine Martin to redo a 1932 Pullman carriage — they delivered a 12-guest cocktail-and-dining lounge themed on *A Midsummer Night's Dream* viewed through a Jazz-Age lens. Originally built in 1932, "Celia" runs day excursions on the British Pullman starting May 2026.
|
||||||
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 110 KiB After Width: | Height: | Size: 110 KiB |
|
Before Width: | Height: | Size: 165 KiB After Width: | Height: | Size: 165 KiB |
|
After Width: | Height: | Size: 147 KiB |
@@ -0,0 +1,14 @@
|
|||||||
|
---
|
||||||
|
name: "Blind Data"
|
||||||
|
subtitle: "Statistical analysis of 877 Guardian Blind Date columns"
|
||||||
|
date: 2026-05-09
|
||||||
|
link: https://blinddates.rory.codes/
|
||||||
|
linkText: "blinddates.rory.codes"
|
||||||
|
source: "Web Curios"
|
||||||
|
topics:
|
||||||
|
- general-delight
|
||||||
|
tags: [data, romance, the-guardian, analysis]
|
||||||
|
description: "Rory Pulvino scraped 17 years of the Guardian's Blind Date column and ran the numbers — what predicts a 10/10, what predicts seeing each other again."
|
||||||
|
---
|
||||||
|
|
||||||
|
The Guardian's *Blind Date* column has run weekly since 2009, with each pair rating their date out of ten on six dimensions and answering whether they'd see each other again. Rory Pulvino scraped all 877 dates and ran the numbers: which questionnaire variables actually correlate with reciprocal interest, which don't, and what the answer to "would you have shared the bill?" predicts.
|
||||||
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 74 KiB |
|
Before Width: | Height: | Size: 224 KiB After Width: | Height: | Size: 224 KiB |
|
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 75 KiB |
|
After Width: | Height: | Size: 60 KiB |
@@ -0,0 +1,14 @@
|
|||||||
|
---
|
||||||
|
name: "Boulay de la Meurthe — \"Worse than a crime; it was a blunder\""
|
||||||
|
subtitle: "Not Talleyrand, not Fouché, not Napoleon"
|
||||||
|
date: 2026-05-09
|
||||||
|
link: https://quoteinvestigator.com/2026/05/06/crime-blunder/
|
||||||
|
linkText: "quoteinvestigator.com"
|
||||||
|
source: "Quote Investigator"
|
||||||
|
topics:
|
||||||
|
- quotes
|
||||||
|
tags: [attribution, napoleon, history, talleyrand]
|
||||||
|
description: "QI traces the famous remark on the Duke of Enghien's 1804 execution — most likely Antoine Boulay de la Meurthe, attested in 1807. Talleyrand and Napoleon's later attributions are spurious."
|
||||||
|
---
|
||||||
|
|
||||||
|
The famous remark on Napoleon's 1804 execution of the Duke of Enghien gets pinned to Talleyrand, Fouché, and Napoleon himself, in roughly that order of confidence. Quote Investigator traces it to a magistrate few non-historians have heard of: Antoine Boulay de la Meurthe, in 1807. The Talleyrand attribution doesn't appear until 1822, the Napoleon one until 1844.
|
||||||
|
Before Width: | Height: | Size: 994 KiB After Width: | Height: | Size: 994 KiB |
|
After Width: | Height: | Size: 481 KiB |
@@ -0,0 +1,14 @@
|
|||||||
|
---
|
||||||
|
name: "Buckminster Fuller — Animated Population Growth, 1965"
|
||||||
|
subtitle: "Fuller's silent Dymaxion-projection visualisation of human population from 1000 BCE to 1965"
|
||||||
|
date: 2026-05-09
|
||||||
|
link: https://www.openculture.com/2026/05/buckminster-fuller-creates-an-animated-visualization-of-human-population-growth.html
|
||||||
|
linkText: "openculture.com"
|
||||||
|
source: "Open Culture"
|
||||||
|
topics:
|
||||||
|
- general-delight
|
||||||
|
tags: [data-viz, fuller, population, history]
|
||||||
|
description: "A 1965 silent film by Buckminster Fuller and John McHale projects human population growth onto Fuller's Dymaxion world map — with concurrent technology breakthroughs marked."
|
||||||
|
---
|
||||||
|
|
||||||
|
Sixty years before "data visualization" was a job title, Bucky Fuller and John McHale made this silent film: human population from 1000 BCE forward, projected onto Fuller's Dymaxion world map (which preserves continental shape better than Mercator). The clock ticks; the map fills with light; transportation and communication breakthroughs surface as technology markers; the curve goes vertical near the end.
|
||||||
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 150 KiB After Width: | Height: | Size: 150 KiB |
|
Before Width: | Height: | Size: 102 KiB After Width: | Height: | Size: 102 KiB |
|
Before Width: | Height: | Size: 250 KiB After Width: | Height: | Size: 250 KiB |
|
Before Width: | Height: | Size: 123 KiB After Width: | Height: | Size: 123 KiB |
|
After Width: | Height: | Size: 1.4 MiB |
@@ -0,0 +1,14 @@
|
|||||||
|
---
|
||||||
|
name: "CasaCau"
|
||||||
|
subtitle: "Six private apartments inside a 17th-century palazzo, steps from the Trevi"
|
||||||
|
date: 2026-05-09
|
||||||
|
link: https://www.boutique-homes.com/property/casacau-apartments
|
||||||
|
linkText: "boutique-homes.com"
|
||||||
|
source: "Boutique Homes"
|
||||||
|
topics:
|
||||||
|
- travel
|
||||||
|
tags: [rome, rental, design, palazzo]
|
||||||
|
description: "Six apartments inside a 17th-century Roman palazzo, decorated with mid-century modernism and contemporary art instead of the usual frescoed-ceiling cliché. Includes Turkish baths."
|
||||||
|
---
|
||||||
|
|
||||||
|
CasaCau sits inside a 17th-century palazzo a block from the Trevi Fountain — but instead of the usual gilt-and-frescoed treatment, the six apartments are styled in mid-century modernism layered with contemporary art and vintage finds. Hotel-grade service (concierge, Turkish baths) attached to a residence-grade space.
|
||||||
|
Before Width: | Height: | Size: 165 KiB After Width: | Height: | Size: 165 KiB |
|
Before Width: | Height: | Size: 297 KiB After Width: | Height: | Size: 297 KiB |
|
After Width: | Height: | Size: 358 KiB |
@@ -0,0 +1,14 @@
|
|||||||
|
---
|
||||||
|
name: "Land Lines"
|
||||||
|
subtitle: "Draw a line; Google Maps finds the matching ridge, river, or coastline"
|
||||||
|
date: 2026-05-09
|
||||||
|
link: https://lines.chromeexperiments.com/
|
||||||
|
linkText: "chromeexperiments.com"
|
||||||
|
source: "Web Curios"
|
||||||
|
topics:
|
||||||
|
- general-delight
|
||||||
|
tags: [google, maps, browser, geography]
|
||||||
|
description: "A Chrome Experiment that takes a hand-drawn squiggle and finds a real-world geographic feature — coastline, ridge, river — that matches its shape."
|
||||||
|
---
|
||||||
|
|
||||||
|
Land Lines is the Chrome Experiment where you draw a curve and the page hunts through Google Maps satellite imagery for a real-world ridge, river, or coastline that matches the shape. The matches arrive in seconds, complete with the location — the Atacama coast, a Greenland fjord, a river in Bangladesh — and the surprise is how often the match feels uncanny.
|
||||||
|
Before Width: | Height: | Size: 8.8 KiB After Width: | Height: | Size: 8.8 KiB |
|
Before Width: | Height: | Size: 106 KiB After Width: | Height: | Size: 106 KiB |
|
Before Width: | Height: | Size: 9.8 MiB After Width: | Height: | Size: 9.8 MiB |
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 78 KiB |
|
Before Width: | Height: | Size: 125 KiB After Width: | Height: | Size: 125 KiB |
|
Before Width: | Height: | Size: 295 KiB After Width: | Height: | Size: 295 KiB |
|
Before Width: | Height: | Size: 175 KiB After Width: | Height: | Size: 175 KiB |