-
Three Strings and Two Fallbacks: Wiring the Native Share Sheet Into Forgemage.net
The share button on Forgemage.net's request detail page opens the OS share sheet wherever the operating system has one — Android, iOS, Windows, macOS — copies the link where it doesn't, and stays quiet when you simply change your mind. Here's the whole implementation: navigator.share with three strings, an AbortError guard that falls through instead of catching, a clipboard fallback with an execCommand fallback under it, and the one-letter Symfony detail that decides whether the shared link works at all.
Read article ↗ -
Every New Smithmagus Made Search Slower: Killing the N+1 Behind Forgemage.net
Forgemage.net's smithmagus directory ran roughly seven queries per card — reviews, response time, online status, three lazy relations — plus facet counts recomputed on every filter tweak. Here's how I got a page of 24 cards from ~168 queries down to a handful, with a request-scoped batch cache and a paginate-then-hydrate pass, without touching the single-profile pages.
Read article ↗ -
Markdown for Agents, Self-Hosted: One Symfony Subscriber Instead of a Cloudflare Plan
Cloudflare converts pages to markdown for AI agents via Accept: text/markdown — on paid plans. The same HTTP contract fits in a 144-line Symfony event subscriber. My homepage went from 59 KB of HTML to 7.7 KB of markdown, same URL.
Read article ↗