docs(blog-site): post on cards showing their live crawl status#984
docs(blog-site): post on cards showing their live crawl status#984FagnerMartinsBrack wants to merge 1 commit into
Conversation
Covers the inbox card that now names its preview state ("Fetching
preview…" / "Preview didn't arrive"), announces the result to a screen
reader once on resolve, and keeps keyboard focus across the 3s poll
redraw. Principle voice, non-changelog so it does not displace the
day-old newsletter banner.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GRUUcnJKkR98T7DVmJAFnq
|
@claude Review this PR. Use your Read tool to read the local file Context
|
|
Claude finished @FagnerMartinsBrack's task in 6m 25s —— View job Review complete
High Priority Issues (Must Fix)None found. Medium Priority Issues1. The TL;DR / opening "three states" don't match the shipped notesThe post's hook is three indistinguishable grey URLs, each now named. The opening (line 19) and the TL;DR (line 14) list that trio as still fetching, failed for good, and a page that came back with no title, then claim "Each card now carries a short note that names its state." Checked against the shipped mapping in
Two mismatches fall out of that table:
Notably, the body is already correct: the section "The state it was guessing" (line 31) gives the accurate four-way mapping (running → "Fetching preview…", budget spent → "Preview didn't arrive", can't be read → "No preview available", titled → says nothing). So the fix is to realign the opening scene and the TL;DR with the body the post already wrote, or drop "a page that came back with no title" from the headline trio. A reader who only skims the TL;DR currently comes away believing a no-title card shows a note. Fix this → Low Priority Suggestions1. "the browser matches each new button" attributes htmx's work to the browserLine 47: "the browser matches each new button to the one it replaced and leaves focus where the reader put it." Per commit 2. Quoted UI string apostrophe (cosmetic)The shipped label is "Preview didn’t arrive" (curly apostrophe, Summary. Solid post — the frontmatter satisfies the |
|
|
What
Adds one blog post,
card-shows-what-its-preview-is-doing.md, covering the work that landed on main after the last published post (save-newsletter-links-to-your-queue, 2026-07-20).The post is built around the newsletter-inbox card cluster from that batch:
a07d717— the card names its own state instead of rendering every pending/failed/title-less link as the same grey URL ("Fetching preview…" / "Preview didn't arrive" / "No preview available"), read from the link's status rather than from whether it is still polling.047897c— a live region beside the list announces a card's result once to a screen reader on the pending→terminal transition, and stays silent on an unchanged 3s tick.23e8d18— stable ids keep keyboard focus on a card's action across the 3s poll redraw instead of dropping to the top of the page for the whole 15-minute window.Why this topic
Of the commits since the last post, this cluster is the most engaging and conversion-relevant reader-facing change: it answers the "did my save work, is anything happening?" anxiety, and the accessibility depth (screen-reader announcements, focus preservation) reads as a competitive-advantage signal for search and AI-assistant surfaces. The other candidates were internal (paid-ads landing pages), already covered by earlier posts (utm stripping overlaps the clean-link posts), or minor (iOS splash).
Editorial choices
changelogtag orbanner, so this refinement does not displace the day-old newsletter-inbox banner. Easy to flip to a banner post if preferred — suggested copy: "I made each card say what its preview is doing".Verification
BlogFrontmatterschema (all required fields,YYYY-MM-DDdate,tagsdefaults to[], no changelog tag so no banner required).Dependencies are not installed in this fresh container, so the blog-site test suite was not run here; the discovery/parse invariants are verified directly against the schema instead.
🤖 Generated with Claude Code
https://claude.ai/code/session_01GRUUcnJKkR98T7DVmJAFnq
Generated by Claude Code