frontend
Technical notes on web development, DevOps, and AI integration.
37 articles
- 22:34frontend
The 1px Sidebar Wobble That Ended My Chip Borders
Swapping a chip border for a background nudged the whole row by 1px. The fix: an inset ring, because box-shadow never affects layout.
#tailwind#css#frontend - 18:32frontend
MessageCircle Is Not WhatsApp, the Client Told Me So
A WhatsApp CTA with a generic lucide chat icon made visitors hesitate. The fix: an inline brand SVG, a real label, and better button contrast.
#react#frontend#seo - 18:18frontend
The Two-Column Mobile Grid I Took Back
Splitting a 4-column grid into 2 columns made cards cramped on phones. The fix: an embla carousel on mobile, a grid on desktop, a doubled DOM.
#nextjs#react#frontend - 16:29frontend
Switching to a Grid, a Show More Pattern, and One SEO Trade-off
Refactoring a long accordion column into a 3-column grid with Show More lists. The trade-off: sliced points never reach the initial DOM Google indexes.
#nextjs#react#frontend - 16:25frontend
A Certification Badge With No Image Took Down next/image
An optional image field met a runtime component that demands src. The About page went blank. Here is the ternary and fallback UI that fixed it.
#nextjs#typescript#frontend - 02:44frontend
TypeScript Types Never Reach Your JSON, So Write Contract Tests
One missing badge image broke typecheck. A story about type erasure, optional properties, and parametrized contract tests guarding per-locale JSON content.
#typescript#testing#frontend - 14:22devops
Cloudflare Blocks the Python-urllib User-Agent (403, valid key)
Cloudflare blocks Python's default urllib User-Agent with a 403, even when the API key is correct. Set a custom UA on every agent request to get through.
#seo#frontend#automation - 14:19frontend
Hardening the Article Embed Pipeline for Agent-Authored Content
The embed pipeline now renders tokens inside <pre>/<code> as literal code, degrades to a fallback on broken payloads, and re-highlights Quarto/Pandoc blocks.
#shiki#nextjs#frontend - 01:38frontend
Shiki Code Block Contract and Short Lang IDs
I locked the code-block contract so articles would not break render: short lang ids, explicit Shiki aliases, and malformed blocks rejected before publish.
#shiki#nextjs#frontend