An Expressive Code plugin that labels command output — the gutter API and the copy payload
Building an Expressive Code plugin for Astro that marks command output: the gutter element API, plugin ordering, and rewriting the copy button payload.
Building an Expressive Code plugin for Astro that marks command output: the gutter element API, plugin ordering, and rewriting the copy button payload.
Astro's own security.csp feature silently breaks service-worker registration. A hand-authored CSP for Astro on Vercel, verified by CI and a real browser.
A GIF cannot be paused, so WCAG 2.2.2 ruled it out. MP4 then beat the smaller VP9 on iOS hardware decode. The encode recipe, the guards, and the tests.
Astro article pages ran narrow and small at 68ch/17px. Widening them against dev.to's own numbers also fixed a CJK line-length bug the ch unit had hidden.
Picking related posts at build time from tag overlap weighted by tag rarity, why TF-IDF over three languages fails, and how the score floor was measured.
An Astro service worker served every navigation from cache first, so new articles appeared one visit late. Listings now go to the network first.
How measurements decided a service worker for an Astro blog: 287KB precached instead of 11.7MB of HTML, 50 pages capped, and no expiry date.
What backlinks and rel=canonical do, why Zenn and Qiita change the plan, and the pipeline that makes republishing an article a paste rather than a project.
How this Astro blog got robots.txt, JSON-LD, Markdown twins and IndexNow. The domain was not why Google could not find it, and llms.txt was not the fix.
How this Astro blog badges its most-read articles: one Vercel Web Analytics query during the build, summed across three locales, baked into static HTML.
Adding a shared like counter to a fully static Astro site: one non-prerendered route, Upstash Redis key design, and the CI bugs that verifying it cost.
Why width:100% blurred a 256px screenshot in Astro, and how a native dialog made every diagram readable on a phone. Seven measurements corrected the design.
Pagefind warned about missing stemming for Japanese and Chinese on every build. The real defect was a query and index tokenizer mismatch returning wrong pages.
Share buttons in Astro built from intent URLs: a different target set per locale, a sticky icon rail on wide screens, and the endpoint drift found on the way.
Follow-the-reader scrolling, a shared rail, and the ::details-content box that silently ate a mobile max-height in an Astro table of contents.
Adopting Expressive Code in Astro 7: filename tabs, per-theme file icons, a Sätteri processor trap, and 97 fences Shiki was reading as a language name.
Why this trilingual Astro blog has no CMS: the directory layout images forced, MDX over Markdown, and a tag registry standing in for foreign keys.