Kushal Srinivas
← Back to writing

Everything Blog — Automating the Entire Publishing Pipeline

Co-Founder · 2024Visit project →
Next.jsNotion APISSRSEOAutomation

I wanted a blog where writing was the only manual step. Everything else — formatting, SEO optimization, publishing, deployment — should happen automatically. So I built one.

Everything Blog uses Notion as a headless CMS. I write in Notion (which I already use for everything), and a custom script handles the rest: it pulls the content via the Notion API, applies SEO best practices, generates the metadata, and publishes to the website.

How it works

  • Content in Notion — Posts live in a Notion database. Each row is a post with title, tags, status, and the body content in the page.
  • Automated script — I run a command with just the title. The script creates the Notion page with SEO-optimized structure, proper headings, meta descriptions, and Open Graph tags.
  • Next.js frontend — The website pulls from Notion at build time via ISR. Server-side rendering ensures search engines can index everything. Pages are fast, accessible, and properly structured.
  • Zero manual deployment — Vercel watches the repo. Notion webhook triggers a rebuild. Post goes live within minutes of marking it as “Published” in Notion.

Technical decisions

Next.js with SSR was non-negotiable for SEO. The whole point is discoverability — if search engines can’t parse the content, the blog fails at its job. We use incremental static regeneration to keep pages fresh without rebuilding the entire site.

Notion as a CMS works surprisingly well. The API is stable, the editing experience is familiar, and the block-based content model maps cleanly to HTML. The tradeoff is speed — Notion’s API isn’t fast, so we cache aggressively.

What I learned

The best tool is the one you already use. Notion wasn’t designed to be a CMS, but it already had my content workflow. Building the bridge was cheaper than changing the workflow.

Automation compounds. The script I wrote in an afternoon saves me 15 minutes per post. Over a hundred posts, that’s 25 hours — and more importantly, it removes the friction that stops me from writing in the first place.

← Back to all entries