Skip to content
J

John Cravey

Founder

Founder of Frontend Horizon. Writes most of the long-form work on the FH blog.

71 posts published.

Professional Services·2 min

The Professional Services Growth Playbook, by Firm Size

Same fundamentals, different scale. The right move for a solo practice is the wrong move for an enterprise firm, and vice versa.

Professional Services·2 min

The Three Numbers a Professional Services Firm Should Track

Traffic is not a result. These three numbers are the difference between marketing you can manage and marketing you just pay for.

Professional Services·2 min

Site Speed and Core Web Vitals for Professional Services Firms

Speed is not a nice-to-have. It is the first impression, the ranking factor, and the conversion lever, all at once.

Professional Services·2 min

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.

Professional Services·2 min

Make Your Site Read Like the Firm You Are: Positioning for Professional Services

Your buyers compare three firms in a tab each. Generic copy makes you the one they close. Specific positioning makes you the one they call.

Professional Services·2 min

Answer Engine Optimization for Professional Services Firms

Ranking is no longer enough. If an AI answer cannot extract, trust, and cite you, you are invisible to the buyers who ask it first.

Professional Services·3 min

Who Is Actually Searching for Your Firm: Market Sizing for Professional Services

Most firms market on instinct. The ones that win start with the number: how much real demand exists, and how much of it you can take.

Web Design·4 min

2026 Web Design Trends That Aren’t Just Visual Noise

Most ‘2026 trends’ pieces are aspirational mood boards. Here’s what’s actually changing on production sites.

AI·4 min

Anthropic API Prompt Caching: The Pattern That Saves Thousands on Content Generation

Prompt caching cuts our content-gen costs by an order of magnitude. Here’s how and where it works.

Next.js·6 min

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.

SEO·4 min

AI Overviews and Zero-Click Search: The 2026 SEO Reality

AIO eats informational clicks. Transactional and local clicks are largely untouched. Here’s the playbook.

Supabase·6 min

Supabase Row Level Security: The Multi-Tenant Pattern We Use Across FH Clients

One Postgres database, many tenants, zero data leakage. Here’s the RLS setup that holds up under real production traffic.

Cloudflare·6 min

Cloudflare DNS and CDN: The Base Configuration for Every FH Client Site

Every FH site sits behind Cloudflare. Here’s the exact configuration and why each setting is where it is.

Search Console·6 min

Google Search Console: From Zero to Actionable in an Afternoon

GSC is free and tells you exactly what Google sees on your site. Most SMBs never look at it. Here’s how we set it up and what we check.

Performance·4 min

Core Web Vitals 2026: The Metrics That Matter and the Targets That Hold

Three numbers. Hit them and you’re competing on content; miss them and you’re competing one hand tied.

Next.js·5 min

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.

Analytics·5 min

Google Analytics 4: The Conversion Events That Actually Matter

Most GA4 installations track everything and surface nothing. Five events cover what SMBs actually need.

AI·5 min

AI-Assisted Content: How to Use Claude for Drafts Without Sounding Like Every Other AI Site

AI drafts are 60% of the work and 0% of the voice. Here’s how to use the time savings without losing the brand.

Next.js·4 min

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.

Supabase·5 min

Supabase Storage for Marketing Sites: The Bucket-Per-Tenant Pattern

Most teams store images in their build artifact. That doesn’t scale. Supabase Storage with the right bucket layout does.

Analytics·4 min

Privacy-First Analytics in 2026: GDPR, CCPA, AI Act, and What SMBs Actually Need

Privacy regulations are converging, not multiplying. Here’s what compliance actually looks like in 2026.

Cloudflare·5 min

Cloudflare Pages vs Workers vs R2: Picking the Right Cloudflare Product

Cloudflare has 30+ products. Three of them cover 80% of what most SMB sites need.

Search Console·5 min

Google Search Console Performance Report: Reading the Data Without Lying to Yourself

Most teams misread the Performance report the same five ways. Here’s the honest read.

Analytics·4 min

Server-Side Tagging: When SMB Sites Should Pay For It (and When They Shouldn’t)

Server-side tagging is hot. For most SMB sites it’s a $300/month answer to a problem you don’t have.

Next.js·5 min

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.

Performance·4 min

Optimizing INP: The Five Patterns That Fix Interaction Latency

INP is the hardest of the three Core Web Vitals to hit. Five patterns cover most of what we ship to fix it.

AI·5 min

RAG for SMB Sites: When Retrieval-Augmented Generation Actually Solves a Real Problem

RAG is the right answer about 10% of the time. Here’s the framework for the other 90%.

Supabase·5 min

Supabase Edge Functions: When They’re Worth It and When They’re Not

Edge Functions are great for jobs that have to live outside your Next app. Not everything does. Here’s the decision framework.

Accessibility·4 min

Accessibility Law in 2026: The Lawsuit Landscape and the Compliant Build Posture

Accessibility lawsuits are up. Compliance is mostly about practice, not policy. Here’s what we ship.

Cloudflare·4 min

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.

Analytics·4 min

Google Analytics 4 Consent Mode v2: The Implementation That Doesn’t Break Your Data

Consent Mode v2 is required for ads-data in the EU. Implement it right and you don’t lose visibility for users who decline.

Next.js·4 min

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.

Web Design·4 min

View Transitions API and CSS Scroll-Driven Animations: The Browser Wins of 2026

View Transitions and scroll-driven animations replace 80% of what we used framer-motion for. Faster, smaller, simpler.

Search Console·5 min

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.

AI·4 min

AI Chat for Customer Service on SMB Sites: When It Helps and When It Hurts

AI chat is the most-overhyped SMB feature in 2026. It works for some sites. Most should think twice.

Supabase·4 min

Supabase Realtime: When SMB Sites Actually Need It (and When They Don’t)

Realtime sounds magical. For most SMB sites it’s a feature looking for a problem.

Analytics·4 min

GA4 Attribution Models: Which One to Look At When

Data-driven attribution is the default but it lies to small accounts. Here’s the per-channel reality check.

Next.js·5 min

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.

Performance·4 min

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.

PPC·3 min

Google Ads for Small Businesses: The Complete Guide to Running Campaigns That Don’t Waste Your Budget

Most SMBs lose money on Google Ads in the first 90 days because nobody told them how the auction actually works. Here’s the version we wish every operator had read first.

Cloudflare·4 min

Cloudflare Workers: When Edge Functions Actually Earn Their Keep

Workers are fast and cheap. They’re also the wrong answer for half the things people use them for. Here’s when they fit.

Web Design·4 min

Container Queries Everywhere: The CSS Feature That Killed the Breakpoint Mindset

Container queries went stable across browsers in 2024. The mental model shift is bigger than people realize.

Supabase·4 min

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.

Analytics·4 min

UTM Strategy for SMBs: The Tagging Conventions That Survive a Year

Sloppy UTM tagging is the cheapest way to lose your analytics. Here’s a convention that holds up.

Search Console·4 min

Google Search Console: AI Overviews Data and What to Do About the Clicks You’re Losing

AI Overviews are eating informational-query clicks. Here’s the data and the playbook.

Next.js·4 min

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.

Analytics·4 min

The Death of Cookie-Based Tracking: What Replaces It in 2026

Most attribution methods you learned in 2018 don’t work anymore. Here’s what replaces them.

AI·4 min

Embeddings for Internal Search: The Pattern That Replaces ElasticSearch for Most SMB Sites

Most SMB sites have either no internal search or terrible internal search. Embeddings fix it for $0 of new infrastructure.

Supabase·3 min

Reading Supabase Logs: The Five Queries That Catch 80% of Production Issues

The Supabase log explorer is underused. These five queries are the first place we look when something’s wrong.

Analytics·4 min

Joining GA4 with Search Console: The Reporting View That Tells You What Actually Works

Search Console shows what queries clicked. GA4 shows what queries converted. The join shows what actually matters.

Next.js·5 min

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.

Cloudflare·5 min

Cloudflare WAF and Bot Management for SMB Sites: The Rules That Actually Work

WAF isn’t set-and-forget. Here’s the configuration that catches the real attacks without breaking legitimate traffic.

Performance·4 min

Critical CSS and Font Loading: The Last 200ms of LCP

Once you’ve fixed images and JS, font and CSS strategy is the next LCP lever. Here’s the pattern.

AI·4 min

AI Image Generation for Marketing Sites: What Works, What Trips the Slop Detector

AI imagery is everywhere. Most of it screams AI. Here’s how to use it without your site looking like every other 2026 redesign.

Search Console·4 min

Indexing Diagnostics: Why Your Pages Aren’t in Google (and How to Fix It)

‘My page isn’t indexed’ has eight common causes. Six of them are fixable in an hour.

Next.js·4 min

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.

Supabase·4 min

Supabase Performance: Indexing, Connection Pooling, and the Postgres Settings That Matter

Supabase is Postgres. Most performance issues are Postgres issues with Postgres solutions.

Cloudflare·3 min

Cloudflare Images and Image Resizing: When the Built-In Service Wins

Three options, three different cost curves. Picking right matters more than people think.

AI·5 min

Tool Use With Claude: Building Agents That Don’t Hallucinate Your Production Data

Agents are powerful when they have tools. They’re dangerous when those tools aren’t bounded. Here’s the safe pattern.

Supabase·4 min

Migrating from Firebase to Supabase: The Real Cost and the Step-by-Step Plan

Firebase pricing scales worse than Supabase past a certain point. Here’s the migration plan that worked for one of our clients.

Performance·4 min

Reducing Third-Party Script Weight: The Audit Pattern That Saves Half Your JS Budget

Third-party scripts are where bundles really go to die. Here’s the audit and the policy.

Search Console·4 min

Schema Markup for SMB Sites: The Three Types That Actually Help

Schema is one of the highest-ROI SEO investments. Three types cover 90% of the value.

AI·4 min

Cost-Effective AI: How to Pick Claude Opus vs Sonnet vs Haiku for Each Workload

Opus for the hard stuff. Sonnet for daily work. Haiku for high-volume cheap work. Mixing them right cuts costs by 70%.

Cloudflare·4 min

Cloudflare Email Routing: Free Email Forwarding for Every Client Domain

Email Routing is one of Cloudflare’s most underrated free features. Here’s the setup we run for every client domain.

Case Study·2 min

How a Construction Firm Generated 1,233% More Organic Clicks in 12 Months

1,233% organic click increase. 5.5% CTR. 987% impression increase. Here’s how it actually happened.

SEO·3 min

How Much Does SEO Optimization Cost: A Practical Pricing Guide for SMBs

“Starting at $299/month” SEO is almost always a content mill. Here’s what real SEO costs and why.

Case Study·1 min

Best Barns: Rebranding a Product Brand for the Search Era

Customers are seeking Best Barns at retail partners like never before. Here’s the work behind it.

Healthcare·1 min

Healthcare Marketing: The Compliance Lines You Cannot Cross

Most healthcare practices either over-share (and risk a HIPAA citation) or under-share (and lose patients to bolder competitors). Here’s the line.

SEO·1 min

Content That Actually Ranks for Professional Services Firms

Most professional-services content sounds the same because every firm pays the same content mill. Here’s how to sound like you.

Pricing·1 min

What to Look for When Hiring a Digital Marketing Agency

Most agency-vetting goes wrong because the buyer asks the wrong questions. Here are the right ones.

SEO·3 min

Local SEO Strategies Construction Firms Should Use in 2025

Construction local SEO is dominated by aggregators. The firms that learn to outflank them win the work that matters.