Writing.
Notes from the build — frontend engineering, performance, accessibility and the small decisions that make interfaces feel right.
Theming Without a Build Step: How NYX Uses color-mix()
I built NYX, a zero-dependency component framework, so a whole theme can be retuned from a handful of custom properties — no Sass, no recompile, live in the browser.
Read articleWhat Building an OTP Input Taught Me About Controlled Components
Auto-advance, paste, and backspace look trivial until you build them — here are the controlled-input lessons that survive every form I ship.
Making a Quran PWA That Works Offline
Building an offline-first Quran app meant a service worker that survives no connection, on-device prayer times for 30+ countries, and a couple of service-worker bugs that taught me humility.
The Next.js Data Waterfall That's Quietly Killing Your TTFB
Awaiting fetches one after another in nested Server Components serializes your loads — here's how to parallelize without rewriting your tree.
Two CSS Words That Fix Ugly Headlines: text-wrap
Stop fighting orphans and lopsided headings with manual line breaks — text-wrap: balance and pretty do it for free.
Stop Anchor Links Hiding Behind Your Fixed Header
Sticky navbar eating the top of every section you jump to? One CSS property fixes it properly — no padding hacks, no JavaScript.
Understanding Generics in C#
Generics let you write code once and use it with any type — more reusable, more concise, and safer than casting everything through object.
The React Component Lifecycle, Explained Simply
Every React class component is born, updates, and dies. Here are the methods that run at each stage — and the one rule that keeps you out of an infinite loop.
create-react-app Is Slow — I Switched to Vite
Scaffolding a React app with create-react-app took me three to four minutes every time. Vite does it in under a minute, with a dev server that actually feels instant.