Writing.

Notes from the build — frontend engineering, performance, accessibility and the small decisions that make interfaces feel right.


Latest 6 min read

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 article
6 min read

What 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.

ReactFrontendDX
6 min read

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.

PWAOfflineService Workers
6 min read

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.

Next.jsReactPerformance
5 min read

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.

CSSFrontend
3 min read

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.

CSSFrontend
5 min read

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.

C#.NETBackend
5 min read

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.

ReactFundamentals
4 min read

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.

ReactViteTooling