Next.js
Next.js, Supabase, Cloudflare, and the deploy plumbing under every FH site.
Titles, Meta Descriptions, and Social Cards: The Next.js Metadata Playbook for Every Business Size
Your title tag is the ad you never wrote. Here’s how to make Next.js render one that gets clicked, whatever size you are.
Structured Data in Next.js: How JSON-LD Gets You Cited by Google and AI
Structured data is how you tell Google and AI what your page means, not just what it says. Here’s the Next.js way to ship it.
Sitemaps and robots.txt in Next.js: Telling Crawlers and AI Bots What Actually Matters
A crawler’s time on your site is a budget. Sitemaps and robots.txt are how you spend it on the pages that make you money.
Redirects in Next.js: How Not to Torch Your Rankings in a Redesign
Every redesign is a chance to lose the rankings you spent years earning. Redirects are the seatbelt. Here’s how to wear it.
Speed Is a Ranking Factor: The Next.js Performance Checklist by Business Size
Google measures your speed with real users and ranks you on it. Next.js hands you the tools to win. Most sites leave them switched off.
AGENTS.md and llms.txt: Making Your Next.js Project Legible to AI
AI reads your code and your site whether you help it or not. Two small files decide whether it reads them right.
The Next.js MCP Server: Letting AI Agents See Your App While They Build It
An AI agent guessing at your app’s state is slow and wrong. One that can read it live is a different tool entirely.
The Platform Under a Fast Professional Services Site: Next.js and Cloudflare in Plain English
Most firm sites are built on plumbing that makes them slow to load and painful to change. The platform choice is why, and it is fixable.
Next.js 16.1 in Production: The Migration Playbook We Run on Every FH Site
Next 16.1 is the lean target. Here’s the exact migration we run, what breaks, and what to delete after.
App Router Patterns That Actually Scale in 2026
App Router is a different mental model than Pages. Most teams misuse it the same way. Here’s the structure that holds up at 100+ routes.
Server Components vs Client Components: The Mental Model That Stops You Reaching for ‘use client’
Most teams add ‘use client’ because they’re scared. The bundle pays for it.
Server Actions for Lead Forms: Replacing Your API Routes Without Losing Sleep
Server actions cut form code in half and ship progressively enhanced HTML. Here’s how to use them without leaking a database query.
Cloudflare Turnstile: The CAPTCHA That Doesn’t Make Your Users Hate You
reCAPTCHA hurts conversion. Turnstile doesn’t. Here’s the wiring that keeps your forms spam-free without the click-the-bicycles ritual.
Next/Image with Supabase Storage: The Pattern That Saves 70% of Hero Image Bandwidth
Most teams either skip next/image (and ship 4MB heroes) or misconfigure it (and break Coolify deploys). Here’s the pattern that works.
Sitemaps for Next.js Sites: The Pattern That Keeps Google Indexed
Sitemaps aren’t optional. Here’s the pattern that ships with every FH client build.
ISR, SSG, SSR, and Edge: Picking the Right Rendering Mode for Each Page
Static for marketing pages. ISR for blog. SSR for dashboards. Edge for low-latency reads. Most teams pick wrong.
Bundle Size Budgets: How to Stop JS Bloat Before It Ships
Without a budget, JavaScript weight only goes up. Here’s how to enforce one in CI.
Supabase Auth With Next.js App Router: The Setup We Actually Ship
Most auth tutorials show the wrong pattern. Here’s what actually works in production.
Next.js Middleware: The Five Patterns That Earn Their Keep
Middleware runs on every request. Use it for things that have to happen before the page renders. Stop using it for everything else.
Deploying Next.js on Coolify: The Production Posture We Run Across the FH Client Book
Coolify is cheap, fast, and self-hosted. It’s also the deploy environment where we’ve hit the most breakage. Here’s the posture that works.
Static Generation at Scale: Why FH Builds Ship 800+ Pages Without a Headless CMS
Headless CMS is the wrong answer for most marketing sites. Static generation from TypeScript data is faster, cheaper, and easier to maintain.