When I started building my personal site adarshsharma.dev, I quickly realized I needed a CMS - not just for the blog, but to manage the entire website: hero sections, navigation, pages, media, everything.
Here's what I found after researching all the options.
The Problem with Most CMS Options
Most tutorials only show you how to manage a blog with a CMS. But what if you want to manage your entire site - landing page, about section, projects, navigation - all from one dashboard?
That narrowed my list down fast.
The Top 3 Free CMS Options for Next.js
1. 🏆 Payload CMS — Best Overall
Payload runs inside your Next.js app. No separate service, no vendor lock-in.
- TypeScript native
- Manage pages, content, media, navigation — everything
- Completely free & open source
- Needs: MongoDB Atlas (free) or Neon Postgres (free)
2. Sanity — Best Hosted Free Option
- Free tier: 3 users, 10GB bandwidth, unlimited content types
- Sanity Studio for visual full-page editing
- No server needed — Sanity hosts the CMS UI for you
- next-sanity package makes integration seamless
3. Keystatic — Best for Git-based Content
- Stores content directly in your GitHub repo — no DB needed
- Completely free forever
- Works inside Next.js like Payload
- Perfect if you want zero infra overhead
Why I Chose Payload CMS
For a personal site where I want full control, Payload was the clear winner:
ts// payload.config.ts
import { buildConfig } from 'payload/config'
import { Pages } from './collections/Pages'
import { Media } from './collections/Media'
export default buildConfig({
collections: [Pages, Media],
db: postgresAdapter({
pool: { connectionString: process.env.DATABASE_URL },
}),
})
You define your content structure in code. It generates the admin UI automatically. Clean, powerful, and 100% yours.
Where to Host Payload + Next.js (Free & Cheap Options)
Payload needs a Node.js server - so platforms like Vercel's free tier won't cut it for the backend.
My Recommended Stack for Personal Sites
- Next.js + Payload → Railway (~$5/mo)
- Database → Railway Postgres (included)
- Media Storage → Cloudflare R2 (free up to 10GB)
- Domain → Your own domain ✅
Why Railway?
- One-click deploy from GitHub
- Auto deploys on every push
- Built-in Postgres
- Simple dashboard — no DevOps needed
- Pay only for what you use
Completely Free Stack (for experimenting)
- Render (free tier) → ⚠️ Sleeps after 15 mins inactivity
- Neon DB → Free Postgres (500MB)
- Cloudflare R2 → Free media storage (10GB)
- Fine for development. Not ideal for production.
Bonus: Don't Make My Google Search Console Mistake
While setting up my site, I tried to get my Instagram profile indexed via Google Search Console — and kept getting:
"URL not in property"
Turns out, GSC only lets you inspect and manage URLs under your own verified domain. You can't force-index social media profiles.
The fix? Add a visible link to your Instagram/socials from your verified domain. Google will follow it naturally.
TL;DR
- Want a free CMS for your entire Next.js site? → Use Payload CMS
- Need simple hosting with a DB? → Use Railway (~$5/mo)
- On a zero budget? → Render free tier + Neon DB
- Don't try to index Instagram in GSC → it won't work 😅
Building something with Next.js + Payload? Drop a comment - happy to help!
Follow me on Instagram , LinkedIn and Linktree for more dev content.
Connect at: https://adarshsharma.dev/
Tags: nextjs react nodejs cms webdev javascript beginners
Top comments (5)
Solid choice with Payload. I've shipped a few client projects on Payload + Next.js and the fact that it runs natively inside your Next.js app is a huge advantage no separate CMS service to maintain, full control over the data layer, and you can customize literally everything.
One thing worth mentioning on the hosting side, instead of free tiers with limitations, a basic Hetzner VPS gives you way more resources and zero cold starts. You own the server, run Postgres locally, and don't worry about sleep timeouts or bandwidth caps.
Great writeup though, thanks for sharing!
That's a great point about Hetzner! I hadn't considered running Postgres locally on the same VPS, that actually simplifies the stack a lot.
Do you use any particular setup for deployments on Hetzner? Like Docker + Coolify or just raw PM2?
Also, would love to hear how you are managing it on client projects!
Raw PM2 :D I'm old-school mate
Great breakdown! I've been using Payload CMS for a while now and totally agree — it's one of the most underrated options for Next.js. The flexibility it gives you to manage the entire site (not just blogs) is a game changer. Where did you end up hosting it?
Thanks! Honestly still deciding. Leaning towards Railway for now since it's the easiest to get started with (Postgres included, auto deploys from GitHub). But after the @madeburo comment, Hetzner is looking more appealing for the long run 😄
What are you using for hosting your Payload projects?