Clean, fast, content‑first blog starter with Next.js 15, React 19, and MDX.
pnpm install
pnpm dev| Feature | Status |
|---|---|
| MDX Support | Yes |
| Syntax Highlighting (Shiki) | Yes |
| Code Copy Button | Yes |
| Custom MDX Components | Yes |
| Static Site Generation | Yes |
| Fast Page Loads | Yes |
| Responsive Design | Yes |
| Table of Contents (scroll-spy) | Yes |
| Reading Time Estimate | Yes |
| Related Posts (tag-based) | Yes |
| Tags & Tagging | Yes |
| Series/Multi-part Posts | Yes |
| Draft Posts | Yes |
| Command Palette (⌘K) | Yes |
| Scroll Progress Bar | Yes |
| Scroll to Top Button | Yes |
| RSS/Atom/JSON Feeds | Yes |
| Sitemap Generation | Yes |
| SEO Optimized | Yes |
| Theme Mode | Yes |
| Theme-aware Components | Yes |
| YAML-based Plugin Config | Yes |
| Plugin arch / easy to extend setup | Yes |
| Comments (Giscus) | Yes |
| Open Graph Images (Dynamic) | |
| Search (Fuse.js) | Yes |
| Code Line Numbers | Yes |
| Code Language Badges | |
| Code Diff Highlighting | |
| View Counter | |
| Analytics (umami, plausible or simple-analytics) | Yes |
| Social Share Buttons | |
| Keyboard Shortcuts | |
| Series Navigation | |
| Content Warnings | |
| Diagrams (Mermaid) |
See docs/index.md for plugin documentation.
app/ Pages and routes
components/ UI and MDX components
content/ Blog posts (MDX)
lib/ Utilities and site config
plugins/ Plugin implementations
config/ YAML config (seo, projects, plugins)
docs/ Documentation
pnpm dev— start the dev serverpnpm build— production buildpnpm start— run the production serverpnpm export— static export toout/pnpm preview— serve the exported site fromout/
Giscus enables GitHub Discussions-powered comments on blog posts.
- Visit giscus.app
- Enter your repo (e.g.,
username/repo) - Enable Discussions in your GitHub repo settings
- Copy the generated IDs
- Update
config/plugins.yaml:
giscus:
enabled: true
repo: "username/repo"
repoId: "your-repo-id"
category: "General"
categoryId: "your-category-id"See config/plugins.yaml for all options (theme, position, etc).
Build and run the static site with Caddy on port 80:
docker build -t monolog-blog .
docker run -d -p 80:80 --name monolog monolog-blogThen open http://localhost.
Note: Static export is handled during next build via output: 'export' in next.config.ts.
pnpm install
pnpm devOpen http://localhost:3000.
MIT
Inspired by leerob.com and based on leerob/next-mdx-blog.