So we're rebuilding our company's documentation site. Three different content sources: Contentful for marketing pages, WordPress for the blog, and our internal API for product specs. The project manager wants everything looking unified - same navigation, same search, same everything.
First instinct was Next.js. Set up API routes to fetch from each source, build some shared components, call it a day. Except content comes from three different schemas, the blog uses WordPress's weird category structure, and the product specs change every week when engineering updates the API.
Three weeks into development, I had custom loading states for each content type, three different error handling patterns, and a caching strategy held together with duct tape and prayer. Every time someone added a new content field, I had to update the API route, the TypeScript interfaces, and the frontend components. Pure fucking hell.
Manager suggests trying Gatsby since the CIA website apparently uses it for similar multi-source content. Figured I'd waste a few days proving it wouldn't work, then get approval to rebuild everything in Next.js properly.
Turned out Gatsby's GraphQL layer actually handles this exact nightmare scenario. Write your sources once:
// gatsby-config.js
plugins: [
'gatsby-source-contentful',
'gatsby-source-wordpress',
'gatsby-source-custom-api'
]
Then query everything through one interface. All your data shows up in GraphiQL, relationships get created automatically, and you get one fucking query instead of three API calls with separate error handling.
When Your React Team Doesn't Want to Learn Yet Another Thing
Our frontend team knows React, Apollo Client, and TypeScript. That's it. They're good at those tools, but asking them to learn Astro's component syntax or Hugo's Go templates means weeks of ramping up.
With Gatsby, they write the same React components they've been writing for years. Same hooks, same component composition, same context patterns. The only new thing is GraphQL queries, and if your team already uses Apollo, that's not even new.
TypeScript docs switched to Gatsby specifically because their contributor base didn't want to learn a different framework. Airbnb Design did the same thing. When experienced React developers can be productive on day one without reading documentation, that's worth something.
The Plugin Ecosystem Actually Works (Unlike Most Frameworks)
Gatsby has 2,000+ plugins and most of them actually work together without breaking everything. The image plugin (gatsby-plugin-image) automatically handles responsive images, lazy loading, WebP conversion, and blur placeholders. No configuration hell, no CDN setup nightmares.
Try doing the same thing in Next.js and you'll spend a day configuring next/image, setting up CloudFront, and debugging why your responsive images look like shit on mobile:
// Gatsby: Automatic responsive images from GraphQL
<GatsbyImage image={data.image.childImageSharp.gatsbyImageData} />
// Next.js: Manual configuration required
<Image
src=\"/image.jpg\"
width={800}
height={600}
srcSet=\"...\" // Manual responsive variants
/>
The Gatsby plugin library has mature solutions for SEO, PWA stuff, analytics, and CMS connections that don't fuck with each other. Next.js can do the same things but good luck spending 3 days configuring dependencies that inevitably conflict.
When You Need Lighthouse Scores That Don't Suck
Gatsby generates static HTML with inline CSS and no render-blocking bullshit. Sourcegraph's docs get perfect Lighthouse scores without any performance optimization work. That's not marketing - that's just what happens when you pre-render everything.
Here's what you get out of the box:
- Critical CSS inlining: Above-the-fold styles load immediately (no FOUC)
- Code splitting: Each page loads only the JS it needs
- Prefetching: Next page resources load in background while user reads
- Image optimization: Automatic WebP, resizing, compression - all handled
Try implementing all that manually in other frameworks. Web.dev performance guides keep using Gatsby sites as examples of how to do performance right because it's actually hard to fuck up.
The One Time 47-Minute Builds Didn't Ruin My Life
So our marketing site at my last company updated maybe twice a month. New blog posts, product announcements, that kind of shit. The CEO would request changes on Friday at 5pm and expect them live Monday morning. Perfect use case for slow builds, right?
Wrong. First time our copywriter Sarah needed to fix a typo on the pricing page, she pushed to main at 2:30pm expecting a quick fix. Forty-seven fucking minutes later, the build was still running when the customer demo started at 3:00. Had to explain to prospects why our pricing page still said "Entreprise" instead of "Enterprise" during the product walkthrough. Sarah never used git push without asking me first after that.
But here's the thing - for purely marketing sites that genuinely update monthly, Gatsby's build time stops mattering. Our company blog got maybe 2 posts per month. WordPress would've been overkill with PHP version updates and security patches every week. Static files on Netlify just sit there working without maintenance.
The Figma blog probably rebuilds once a week for new posts. Nobody at Figma is sitting around waiting for builds to finish so they can preview a comma change. That's the only scenario where Gatsby's slowness doesn't actively hurt productivity.
Production Actually Works (Development Is Hell)
Production Gatsby sites are bulletproof once they're built. The React docs serve millions of developers without downtime, Apollo's GraphQL blog handles traffic spikes during conference announcements, Airbnb Design has been rock solid for years.
Static HTML and CSS files don't crash. No server memory leaks, no database timeouts, no Node.js processes dying unexpectedly. Put it on CloudFlare or AWS CloudFront and forget about it.
Meanwhile, development mode is a nightmare. gatsby develop
starts at 400MB RAM and climbs to 3GB after an hour of hot reloading. My MacBook Pro fans spin up just opening the project. Hot reload breaks randomly and requires full restarts. The GraphiQL interface crashes if you query too much data at once.
But once it's built? Rock solid. The Figma blog hasn't gone down in years. Hosting costs are basically nothing - entire sites run on $5/month Netlify plans while your Next.js app needs a $50/month Vercel plan to handle traffic spikes. No server crashes, no database timeouts, no surprise AWS bills when your article hits the front page of Hacker News.