Skip to main content

Blog

Web Development

Articles on Next.js, React, TypeScript, and modern web app architecture — performance, SEO, and real-world frontend engineering patterns.

81 articles

Next.js Standalone Docker Image Size: A Real Dockerfile
Web DevSeptember 202611 min read

Next.js Standalone Docker Image Size: A Real Dockerfile

What Next.js output standalone actually produces, the two directories file tracing never copies, and the three-stage Dockerfile this site deploys to a self-hosted VPS.

Read More
Claude Code Plugin for Next.js: Skill, Hook, Subagent
Web DevSeptember 202612 min read

Claude Code Plugin for Next.js: Skill, Hook, Subagent

An agent put use client at the top of a route file and the whole page shipped to the browser. The type checker said nothing. Here is the plugin I wrote for that stack in full — manifest, skill, hook, subagent — and which of the four I deleted.

Read More
Claude Code Artifacts: Publish a Page From a Session
Web DevAugust 202612 min read

Claude Code Artifacts: Publish a Page From a Session

An artifact is a live, interactive page on claude.ai published straight from a session. Here are the constraints that shape it and where it silently will not work.

Read More
Answer Engine Optimization (AEO): Get Cited by AI Search
Web DevAugust 202610 min read

Answer Engine Optimization (AEO): Get Cited by AI Search

How I structure articles so ChatGPT, Perplexity, and Google AI Overviews quote them — answer-first writing, FAQPage and TechArticle schema, and measuring AI-referral traffic.

Read More
Speculation Rules API: Instant Prerender and Prefetch in Chrome
Web DevAugust 20269 min read

Speculation Rules API: Instant Prerender and Prefetch in Chrome

How I use the Speculation Rules API to prefetch and prerender pages in Chromium — the JSON syntax, eagerness levels, document rules, and how it differs from Next.js Link prefetch.

Read More
JavaScript Temporal API: The Modern Replacement for Date
Web DevAugust 20269 min read

JavaScript Temporal API: The Modern Replacement for Date

Why the Date object is broken and how Temporal fixes it with immutable types, first-class time zones, and DST-safe math — plus the current browser status.

Read More
Next.js 16: Migrate middleware.ts to proxy.ts
Web DevAugust 20269 min read

Next.js 16: Migrate middleware.ts to proxy.ts

Next.js 16 renamed middleware.ts to proxy.ts. Here is the mechanical migration, the silent trap that exposes routes, and why auth must move to your data layer after CVE-2025-29927.

Read More
Next.js Cache Components and the use cache Directive
Web DevAugust 20269 min read

Next.js Cache Components and the use cache Directive

How Cache Components flips Next.js to dynamic-by-default and hands you explicit caching through the use cache directive, cacheLife profiles, and cacheTag invalidation.

Read More
Next.js Hydration Errors: Causes and How to Fix Them
Web DevAugust 20269 min read

Next.js Hydration Errors: Causes and How to Fix Them

What the Next.js hydration mismatch error really means, the handful of causes behind it, and how I fix each one with useEffect, dynamic imports, and suppressHydrationWarning.

Read More
Securing Next.js Server Actions: Auth, IDOR & Zod Validation
Web DevAugust 202610 min read

Securing Next.js Server Actions: Auth, IDOR & Zod Validation

Every use server function is a public POST endpoint. How I harden Next.js Server Actions with per-action auth, ownership checks, Zod validation, and rate limiting.

Read More
Astro 5 Server Islands & Content Layer API: What's New
Web DevJuly 20269 min read

Astro 5 Server Islands & Content Layer API: What's New

Astro 5 shipped Server Islands, a stable Content Layer API, and typed astro:env — how each one works and when I actually reach for it.

Read More
Svelte 5 Runes: $state, $derived, $effect Reactivity
Web DevJuly 20269 min read

Svelte 5 Runes: $state, $derived, $effect Reactivity

Why Svelte 5 dropped the compiler-magic reactive model for explicit runes — how $state, $derived, $effect, and $props work, the signals under the hood, and how to migrate.

Read More
HTMX and the Hypermedia-Driven Application Approach
Web DevJuly 20269 min read

HTMX and the Hypermedia-Driven Application Approach

How HTMX revives the hypermedia model — hx-get, hx-swap, and HTML fragments instead of a JSON API — where it shines, where it does not, and what htmx 2.0 changed.

Read More
Tailwind CSS v4: Oxide Engine and CSS-First Config
Web DevJuly 20269 min read

Tailwind CSS v4: Oxide Engine and CSS-First Config

Tailwind CSS v4 is a ground-up rewrite on the Rust Oxide engine: CSS-first theme config, automatic content detection, and builds up to 5x faster.

Read More
React Compiler: Automatic Memoization Without useMemo
Web DevJuly 20269 min read

React Compiler: Automatic Memoization Without useMemo

React's build-time compiler now memoizes components and hooks for you. Here is what it does, how to wire it into Babel, Vite, and Next.js, and where it can still bite.

Read More
Biome vs ESLint + Prettier: One Rust Toolchain to Replace Two
Web DevJuly 20269 min read

Biome vs ESLint + Prettier: One Rust Toolchain to Replace Two

Biome is a single Rust formatter and linter that wants to replace ESLint plus Prettier. Here is the honest comparison: speed, config, Prettier compatibility, migration, and the limits I hit.

Read More
Rolldown: Vite's Rust Bundler Replacing Rollup
Web DevJuly 20269 min read

Rolldown: Vite's Rust Bundler Replacing Rollup

Why Vite ran esbuild in dev and Rollup in production, the inconsistencies that caused, and how Rolldown — the Rust bundler from the Vite team — unifies both.

Read More
Debouncing and Throttling in React the Right Way
Web DevJuly 20269 min read

Debouncing and Throttling in React the Right Way

Why naive useEffect timers leak, how to build a reusable useDebounce hook, and how to clean up debounce and throttle on unmount in React.

Read More
React Server Components vs Islands Architecture
Web DevJuly 20269 min read

React Server Components vs Islands Architecture

Two architectures for shipping less JavaScript — RSC's server-render boundary versus the islands model in Astro and Qwik — and how to choose.

Read More
TanStack Router: Fully Type-Safe Routing in React
Web DevJuly 20269 min read

TanStack Router: Fully Type-Safe Routing in React

How TanStack Router gives you typed params, validated search state, and route loaders — and why file-based routing beats hand-wiring the tree.

Read More
Valibot vs Zod: Bundle Size and Tree-Shaking
Web DevJuly 20268 min read

Valibot vs Zod: Bundle Size and Tree-Shaking

Valibot ships a schema in about 1.3 kB while Zod carries roughly 13 kB — here is why the modular pipe design tree-shakes and Zod's method chaining does not.

Read More
Web Workers in React: Offload the Main Thread with Comlink
Web DevJuly 20269 min read

Web Workers in React: Offload the Main Thread with Comlink

Heavy CPU work freezes React at 0fps. Here is how I move it to a Web Worker with Comlink, when a worker beats a server call, and how to hold 60fps.

Read More
What Changed in Zod 4: Performance, Mini, and Migration
Web DevJuly 20269 min read

What Changed in Zod 4: Performance, Mini, and Migration

Zod 4 rewrote the validation core for speed, added a 1.9 KB tree-shakable mini build, and reshaped error handling — here is what changed and how to migrate.

Read More
Dynamic Open Graph Images with Next.js ImageResponse
Web DevJuly 20268 min read

Dynamic Open Graph Images with Next.js ImageResponse

How to generate a unique Open Graph image for every blog post at request time using Next.js ImageResponse and Satori, without shipping a design tool.

Read More

More in this category