- Per-blog-post share chip cluster (Copy link / Email / RSS)Closes the named rev-101 next-sprint candidate ('/blog per-post permalink share affordance'). Rev 101 closed the shareβdeliver loop on /roadmap (chip) + /changelog (per-rev permalink); rev 102 ships the same primitive at the /blog/[slug] axis. Every blog post now gets three chips in the author block: 'π Copy link' (one-tap clipboard write of the canonical post URL with execCommand fallback), 'β Email' (mailto: wrapper that pre-fills subject + body so an operator forwarding to a procurement reviewer doesn't have to context-switch to Gmail), and 'β· RSS' (subscribe link to /blog/rss.xml). Mirrors the rev-95 share-page email wrapper + rev-101 changelog permalink chip + rev-101 roadmap filter share chip vocabulary. Closes the public marketing share-affordance trio across the three reading surfaces.
- Per-heading anchor permalinks within blog postsEvery <h2> and <h3> inside the rendered prose now gets a slug-derived `id` and a 'π' chip on hover that copies a deep-link like `loopdesk.space/blog/<slug>#<heading-slug>` to the clipboard. Pure client-side overlay on top of the SSR'd HTML the marked parser produces β runs once on mount, walks the rendered prose, and injects id + chip + click handler into each heading. A reader landing with `#some-section` in the URL gets a smooth-scroll + 2.4s flash highlight on the matching heading via the post-level share component's hash listener. Mirrors the rev-101 changelog per-rev permalink pattern at the per-heading axis on the blog. Crawlers and feed readers see every heading unconditionally.
- Blog index keyword searchMirrors the rev-101 changelog keyword search at the /blog index axis. New `<input type="search">` above the post list filters by title + excerpt + tags, all client-side. Counter shows 'N of M' when a query is active; empty state with one-click 'Clear search' affordance. The blog has accumulated 27+ posts since the pivot to founder/operator topics in 2026-04-28; until rev 102 the page was scroll-only across categorised sections. Procurement reviewers + journalists writing tooling roundups + AI-tooling release-roundup newsletters can now retrieve posts by keyword in one keystroke. The same retrieval instinct that the rev-38 dashboard activity log + rev-17 workspace search ship now reaches the public blog surface.
- GET /api/v1/blog + OpenAPI typed schemaPublic read of blog posts on the v1 surface. Closes the four-axis public marketing surface on the protocol-bound side: items (rev 98 β planned), votes (rev 98 β most-requested), changelog (rev 100 β shipped), blog (rev 102 β brand voice). Optional filters: `limit` (1-50, default 20), `tag` (case-insensitive substring match against any tag on the post), `sinceDate` (ISO date β return only posts published after). No auth β same model as /badge.svg + /roadmap-* + /changelog. Aggressive cache headers because content changes only when we publish. OpenAPI 3.1 spec typed in lockstep with the dashboard primitives (cadence pattern from rev 78 onward holds unbroken into rev 102). MCP hosts + procurement teams + AI tooling roundup newsletters reading via JSON now have parity with the existing HTML + RSS surfaces.