OpenBlog is an open-source, agent-native blog CMS for product websites. Mount it at /blog, keep Markdown in Git as the content source of truth, and let coding agents maintain content, routes, theme, site chrome, and blog SEO through reviewable pull requests.
The Next.js implementation ships blog list and article pages, taxonomy, RSS, sitemap, robots, canonical URLs, and JSON-LD without adding a CMS database or separate editorial backend.
Git is the CMS. Your coding agent is the admin.
Integrate OpenBlog into an existing product site →
Or try the standalone scaffold below.
Use this path when you already have a homepage, SaaS product, or documentation site and want the blog to share its domain, navigation, logo, and visual system.
git clone https://github.com/kostja94/openblog.git
cd openblog
npm install
npm run dev
# http://localhost:3000/blogThen follow INTEGRATION.md to choose a subdirectory, monorepo, or subdomain pattern and connect openblog.config.ts, site chrome, theme, and deployment variables.
Optional brand draft:
npm run integrate -- --site https://yourproduct.comgit clone https://github.com/kostja94/openblog.git
cd openblog
npm run create-openblog -- my-blog
cd my-blog
npm install
npm run dev
# http://localhost:3000/blogScaffold options and output structure are documented in packages/create-openblog. Demo configuration uses openblog.ai as a placeholder domain, not a live service.
npx skills add kostja94/openblog --skill blog-cms integrate-product-site setup-blog-moduleStart with blog-cms when the correct path is unclear. The complete skill catalog covers integration, setup, post maintenance, validation, and publishing: skills/README.md.
Most product teams already review website code and deployments in Git. OpenBlog extends that workflow to the blog instead of introducing another application, database, and disconnected design system.
| OpenBlog provides | Why it matters |
|---|---|
| Markdown + YAML frontmatter in Git | Portable content, version history, searchable files, and reviewable diffs |
| Product-site integration | Mount at /blog and reuse the host site's domain, navigation, logo, and design language |
| Static blog routes | Crawlable list, article, category, tag, and author pages without a runtime content API |
| Blog SEO primitives | Canonical URLs, sitemap, RSS, robots, metadata, and structured data are part of the module |
| Agent contracts | AGENTS.md, Skills, schemas, and validation tell coding agents how to change the system safely |
| Decoupled packages | Core, content, components, themes, and frontend adapters can evolve independently |
OpenBlog is not an AI article generator. Agents maintain the CMS and can edit user-supplied content; editorial strategy and approval remain with the team.
Markdown post
↓
Schema and link validation
↓
Next.js static routes + SEO metadata
↓
Preview and pull-request review
↓
Merge and deploy
Posts live under templates/next/content/blog/*.md. The filename matches the slug, drafts stay out of RSS and sitemap output, and published slugs are statically generated.
- Blog index and article routes
- Category, tag, and author archives
- RSS, sitemap, robots, canonical metadata, and JSON-LD
- Configurable site header, footer, logo, navigation, and home URL
- Theme presets and generated CSS tokens
- Optional table of contents, author box, sharing, previous/next links, tags, TL;DR, and X embeds
- Local Markdown content adapter with schema validation
- Agent Skills for setup, integration, content operations, validation, and publishing
Categories, tags, authors, and RSS are individually configurable. See features and theming.
| Mode | Public URL example | Best fit |
|---|---|---|
subdirectory |
yourproduct.com/blog/post-slug |
Existing product site with separate blog deployment |
monorepo |
yourproduct.com/blog/post-slug |
Blog routes maintained inside the product repository |
subdomain |
blog.yourproduct.com/post-slug |
Independently branded or deployed publication |
standalone |
example.com/blog/post-slug |
New blog without an existing product frontend |
Reverse-proxy and asset-prefix details live in INTEGRATION.md and the deployment routing guide.
Alignify runs the Markdown + Git + Agent workflow in production and identifies OpenBlog as the reusable module for this path. Its public implementation walkthrough documents the evolution from WordPress and generated prototypes to an agent-maintained Git workflow: How to build a blog without a CMS using AI.
OpenBlog also draws on broader product-site work documented by Alignify across 100+ AI products and partners. That number describes Alignify's service and research experience—not 100+ verified OpenBlog installations. See the published customer stories and partner scope.
Repository-level evidence is reproducible: CI installs dependencies, runs unit tests, builds a fresh scaffold, lints the Next.js template, validates posts, and completes a production build.
The useful question is not whether one CMS category always wins; it is who maintains content and where the source of truth should live.
| Capability | OpenBlog | Traditional CMS | Headless CMS | Custom blog |
|---|---|---|---|---|
| Primary content source | Git Markdown | CMS database | Hosted content API/database | Project-specific |
| Main editing workflow | Agent or developer edits + pull requests | Visual administration UI | Visual UI + API-driven frontend | Project-specific |
| Product-site integration | Blog module, shared routes, or routed deployment | Theme or plugin integration | Custom frontend consuming an API | Fully custom |
| Separate content database | No | Usually | Yes, provider-managed | Depends |
| Blog routes included | Yes | Yes | Frontend required | Must be built |
| SEO primitives | Included for blog paths | Core features and plugins | Frontend responsibility | Must be built |
| Review model | Git diff, preview, CI, merge | CMS roles and workflow | CMS roles and workflow | Project-specific |
| Strongest fit | Agent- or developer-maintained product sites | Teams publishing mainly through a visual admin | Multi-channel and structured editorial teams | Products with unique requirements |
This table describes common architecture patterns, not every product in each category. If non-technical editors publish frequently or require complex approvals, a traditional, headless, or Git-based visual CMS may be a better fit than a pull-request-first workflow.
Users customize the module through openblog.config.ts; core packages should rarely need to be forked.
openblog/
├── openblog.config.ts # site, chrome, theme, features, content
├── packages/ # core, content, components, themes, scaffold CLI
├── templates/next/ # Next.js routes, Markdown posts, chrome overrides
├── integrations/ # deployment patterns and generated integration artifacts
├── skills/ # Agent workflows
└── AGENTS.md # repository and content contract
A post starts with validated frontmatter:
---
title: "Your post title"
description: "A useful 80–320 character description for search and article discovery."
slug: "your-post-slug"
date: "2026-09-25"
author: "Your team"
category: "engineering"
tags: ["open-source", "blog"]
draft: false
---The complete schema, URL rules, content paths, and validation requirements are maintained in AGENTS.md.
OpenBlog includes Skills for the work around the CMS:
| Request | Skill |
|---|---|
Add /blog to a product site |
integrate-product-site |
| Scaffold a standalone blog | setup-blog-module |
| Add or edit user-supplied content | create-post |
| Check blog SEO and build output | validate-blog-seo |
| Follow the merge and deployment checklist | publish |
Pagina owns reusable page contracts, and Bricks owns reusable component contracts. OpenBlog declares which of those contracts its runnable CMS implements without taking runtime dependencies on either project. The generated mapping is in Agent contracts.
For site-wide SEO, GEO, keyword research, and growth work beyond the blog module, use marketing-skills. OpenBlog only owns blog-path SEO primitives.
| OpenBlog is designed for | Choose another path when you need |
|---|---|
| Product-site blogs maintained by agents or developers | A whole-site or multi-tenant CMS |
| Git-reviewed Markdown publishing | Daily self-service editing by a large non-technical team |
| Static public content and blog taxonomy | Real-time collaborative editing or complex approval workflows |
A reusable /blog module |
A marketing landing-page generator or documentation platform |
| Blog-level SEO infrastructure | Site-wide keyword strategy, GEO, or campaign operations |
Optional visual editing can be added through tools such as Tina or Decap while keeping Git as the content source of truth, but those systems are not bundled with OpenBlog.
npm install
npm test
npm run lint
npm run validate:posts
npm run buildThe repository uses Next.js App Router, TypeScript, Markdown with gray-matter, Zod, Tailwind CSS, Vitest, and npm workspaces.
- Decoupled core, content, component, theme, and frontend layers
- Configurable deployment modes, chrome, themes, and optional features
- Agent contracts, content validation, CI, and standalone scaffolding
- Publish
create-openblogto npm for directnpx create-openblogusage - Explore optional MCP integration without changing Git as the source of truth
OpenBlog is MIT licensed: use it, adapt it, and fork it for your own sites. Upstream pull requests are reserved for enterprise design-token and component/platform partners; everyone can report bugs or propose improvements through Issues and Discussions. See CONTRIBUTING.md.
Maintained by kostja · Documentation · Release guide