A modern, stable blog framework built with Next.js 16. Fork it, add your content, and you're ready to publish!
๐ Live Demo | ๐ Documentation | ๐๏ธ Architecture | โ๏ธ Attributions
๐ Quick Start
This is a blog framework/template, not a finished blog. Think of it like:
- ๐๏ธ Framework: The code that powers the blog (you don't need to touch this)
- ๐ Your Content: Blog posts and assets (this is what you customize)
You customize: /content (your posts) + /public (your assets) + config.ts (your settings)
We provide: Everything else works out of the box!
๐ See CUSTOMIZATION.md for the complete customization guide
I needed a specific combination of features that I couldn't find in a single existing framework:
- Simplicity: I wanted to start writing immediately without complex configuration.
- RTL Support: I needed first-class support for Arabic content.
- Embeddability: I needed to render blog posts inside other applications (dashboards), not just as a standalone site.
- Ownership: I wanted to keep my content in standard Markdown/MDX to avoid lock-in.
A minimalist blog framework that:
โ
Works out of the box with sensible defaults
โ
Fully static (no server required) for maximum performance
โ
Pure markdown/MDX - own your content forever
โ
Customizable everything via simple config files
โ
Modern tech stack (Next.js 16, TypeScript, Tailwind v4)
โ
Special Feature: Dual deployment modes (standalone + embeddable fragments)
โ
Special Feature: First-class RTL language support
- ๐ป Developers who want a simple, customizable technical blog
- ๐ Writers who want to write in Markdown without overhead
- ๐ Multilingual authors needing robust RTL support
- ๐ข Teams needing to embed blog content into existing apps
- ๐ Educators organizing content into sequential series
๐ข Performance: 95/100
๐ข Accessibility: 95/100
๐ข Best Practices: 96/100
๐ข SEO: 100/100
- Build Time: ~17.5 seconds (9 posts)
- Measured using
Measure-Command { cmd /c "npm run build:standalone" }on Windows
- Measured using
- Bundle Size: ~195 kB total
- Largest Contentful Paint: < 2.4s
- โ 100% Static: No server-side rendering overhead
- โ Optimized Images: Automatic image optimization
- โ Code Splitting: Only load what you need
- โ Tree Shaking: Unused code eliminated
- โ Minimal JavaScript: Static HTML with progressive enhancement
- โ
Markdown & MDX Support - Write content in
.mdor.mdxfiles - โ Static Site Generation - Pre-rendered HTML for optimal performance
- โ Search Functionality - Fast, client-side search with Fuse.js
- โ Series Support - Group related posts into series
- โ Syntax Highlighting - Beautiful code blocks with highlight.js
- โ GitHub Flavored Markdown - Tables, task lists, and more
- โ Frontmatter Support - Rich metadata (title, date, tags, author, etc.)
- โ Reading Time Estimation - Automatic calculation
- โ Table of Contents - Auto-generated from headings
- โ
Draft Posts - Hide posts in production with
draft: true
- โ Dark & Light Mode - Automatic theme switching with persistence
- โ Responsive Design - Mobile-first approach
- โ Modern Typography - Tailwind Typography plugin
- โ Fully Customizable Theme - Easy color customization via CSS variables (MDB 5 based)
- โ Smooth Transitions - Polished user experience
- โ Single Post Conversion - Fast Markdown to HTML conversion script
- Standalone Website - Full-featured blog with navigation system
- Embeddable Content - Pure HTML fragments for custom CSS integration
- Bootstrap-Compatible - Drop-in ready fragments for Bootstrap/MDB projects
Use Case: Build your blog once, embed articles anywhere (corporate dashboards, learning management systems, Bootstrap apps).
- โ Native Arabic and RTL language support
- โ Per-post language control
- โ Automatic direction detection
- โ RTL-aware layouts
Use Case: Create multilingual blogs or Arabic-first content without complex CSS overrides.
| Light Mode | Dark Mode |
|---|---|
![]() |
![]() |
๐ Expand to see more screenshots
| Feature | This Framework | Gatsby | Hugo | Jekyll | Astro |
|---|---|---|---|---|---|
| Focus | Simplicity + RTL | Ecosystem | Speed | Simplicity | Performance |
| Setup Time | < 5 min | ~30 min | ~15 min | ~15 min | ~10 min |
| TypeScript First | โ | โ | โ | โ | โ |
| MDX Support | โ | โ (plugin) | โ | โ | โ |
| RTL Support | โ Native | โ Manual | โ Manual | โ Manual | โ Manual |
| Embeddable Mode | โ Built-in | โ | โ | โ | โ |
| Series Navigation | โ | โ | โ | โ | โ |
| Dark Mode | โ Built-in | โ Manual | โ Manual | โ Manual | โ (some themes) |
| Search | โ Client-side | โ (plugin) | โ | โ | โ Manual |
| Bundle Size | ~70 kB | ~200 kB | ~50 kB | ~100 kB | ~80 kB |
| Learning Curve | Low | High | Medium | Low | Medium |
- โ You need RTL support out of the box
- โ You need embeddable content for other apps
- โ You prefer a Next.js/React stack
- โ You value simplicity over a massive plugin ecosystem
# Fork this repo on GitHub, then clone your fork
git clone https://github.com/YOUR-USERNAME/next-ssg-for-md-blog.git
cd next-ssg-for-md-blognpm install# Edit site configuration
nano config.tsexport const config = {
site: {
name: process.env.SITE_NAME || "Your Blog Name", // โฌ
๏ธ CHANGE THIS
description: process.env.SITE_DESCRIPTION || "Your description", // โฌ
๏ธ CHANGE THIS
url: process.env.SITE_URL || "https://yourdomain.com", // โฌ
๏ธ CHANGE THIS
author: "Your Name", // โฌ
๏ธ CHANGE THIS
},
language: "default", // 'ar' for RTL, 'ltr' for LTR, 'default' for auto-detect
// ...
};# Remove example posts (or keep them as reference)
rm -rf content/blog/*
# Create your first post
nano content/blog/my-first-post.md---
title: "My First Post"
date: "2026-01-07"
author: "Your Name"
tags: ["welcome"]
description: "My first blog post!"
---
## Hello World!
This is my first post using this awesome blog framework!npm run devVisit http://localhost:3000 - You're live! ๐
# Build for production
npm run build
# Deploy to Vercel, Netlify, or any static host/content/blog/- Your blog posts (.mdfiles)/public/- Your images, favicon, assetsconfig.ts- Your blog name, description, URL
src/app/globals.css- Theme colors (line 16+)components/layout/Header.tsx- Navigation links
- Fonts, metadata, advanced features
๐ Full customization guide: CUSTOMIZATION.md
next-ssg-for-md-blog/
โ
โโโ ๐ CUSTOMIZE THESE (Your Content)
โ โโโ content/ # Your blog posts & pages
โ โ โโโ blog/ # .md files for blog posts
โ โ โโโ pages/ # .md files for static pages
โ โโโ public/ # Images, favicon, static assets
โ โโโ config.ts # Blog configuration
โ
โโโ ๐จ CUSTOMIZE IF NEEDED (Styling)
โ โโโ src/app/globals.css # Theme colors
โ โโโ components/layout/ # Header, footer, navigation
โ
โโโ โ๏ธ DON'T MODIFY (Framework - works out of box)
โโโ src/app/ # Next.js pages & routing
โโโ components/blog/ # Blog components
โโโ lib/ # Markdown processing, utilities
โโโ types/ # TypeScript types
โโโ next.config.ts # Next.js configuration
Create a new file in content/blog/your-post-name.md or content/blog/your-post-name.mdx:
---
title: "Your Post Title"
date: "2026-01-07"
author: "Your Name"
tags: ["tag1", "tag2"]
category: "Category Name"
description: "A brief description for SEO"
language: "ar" # Optional: 'ar' for Arabic/RTL, 'en' for English/LTR
draft: false
---
## Your Content Here
Write your blog post content using markdown...
### Subheadings work great
- Lists are supported
- Including nested lists
- Like this
Code blocks with syntax highlighting:
```javascript
console.log("Hello, world!");
```And much more!
### Frontmatter Reference
| Field | Type | Required | Description |
| ------------- | ------------------- | -------- | -------------------------- |
| `title` | string | โ
| Post title |
| `date` | string (YYYY-MM-DD) | โ
| Publication date |
| `author` | string | โ | Author name |
| `tags` | string[] | โ | Post tags |
| `category` | string | โ | Post category |
| `description` | string | โ | SEO description |
| `image` | string | โ | Cover image path |
| `language` | string | โ | 'ar' for RTL, 'en' for LTR |
| `draft` | boolean | โ | Hide in production |
| `series` | string | โ | Series name |
| `seriesOrder` | number | โ | Order in series |
### RTL Language Support
The blog supports Arabic and other RTL languages. See [docs/RTL_SUPPORT.md](./docs/RTL_SUPPORT.md) for details.
**Quick example:**
```yaml
---
title: "ู
ุฑุญุจุงู ุจู"
language: "ar" # This post will render in RTL
---
Edit src/app/globals.css (around line 16):
@theme {
/* Change these to your brand colors */
--color-primary: #3b82f6; /* Links, CTAs */
--color-accent: #8b5cf6; /* Accents, highlights */
--color-background: #ffffff; /* Page background */
--color-surface: #f8fafc; /* Cards, surfaces */
/* ... more colors ... */
}Popular themes:
- Tech (current): Blue
#3b82f6+ Purple#8b5cf6 - Nature: Green
#10b981+ Teal#14b8a6 - Creative: Pink
#ec4899+ Orange#f97316
See full color customization in CUSTOMIZATION.md
npm run dev # Start dev server (localhost:3000)# Standalone website (standard mode)
npm run build
# Specialized build modes
npm run build:standalone # Complete blog site with full pages
npm run build:embeddable # Pure HTML fragments (custom CSS)
npm run build:embeddable-bootstrap # Bootstrap-compatible fragments
npm run build:both # Builds standalone + embeddable
npm run build:all # Builds all three modes
# Single file conversion (FAST)
npm run convert:md content/blog/your-post.mdOutput: Static files in the out/ directory.
Tip
Single Post Conversion: Use npm run convert:md to quickly convert a single Markdown file to Bootstrap-embeddable HTML without rebuilding the entire project.
Note
Embeddable Modes:
build:embeddable- Clean HTML fragments for custom CSS integrationbuild:embeddable-bootstrap- Bootstrap 5-compatible fragments with included CSS
See docs/EMBEDDABLE_FRAGMENTS.md and docs/BOOTSTRAP_EMBEDDABLE.md for details.
To test the standalone build locally, you need to serve the files via an HTTP server (e.g., npx serve out). The embeddable fragments can be viewed directly as they are pure HTML snippets.
The blog is pure static HTML/CSS/JS. Deploy to:
- Vercel (recommended) - Auto-deploy from GitHub
- Netlify - Connect repo, build & publish
- GitHub Pages - Free hosting for public repos
- Cloudflare Pages - Fast global CDN
- AWS S3 + CloudFront - Scalable cloud hosting
- Any static host - Just upload the
out/folder!
- Push your repo to GitHub
- Go to vercel.com
- Import your repository
- Click Deploy
- Done! โจ
๐ See docs/DEPLOYMENT.md for a detailed step-by-step guide including Environment Variables.
- Framework: Next.js 16 (App Router) with Static Site Generation
- Language: TypeScript
- Styling: Tailwind CSS v4 + Typography plugin
- Content: Markdown/MDX with gray-matter frontmatter
- Syntax Highlighting: highlight.js
- Deployment: Static export (works anywhere)
- CUSTOMIZATION.md - Complete customization guide
- docs/RTL_SUPPORT.md - RTL language configuration guide
- docs/SERIES_FEATURE.md - Guide for creating series
- docs/DEPLOYMENT.md - Detailed deployment instructions
- docs/EMBEDDABLE_FRAGMENTS.md - Embeddable mode guide
- docs/ARCHITECTURE.md - Visual architecture & design flows
- docs/ - Additional guides & documentation
This blog framework is perfect for:
- ๐ป Developer Blogs - Technical tutorials and articles
- ๐ Personal Blogs - Share your thoughts and experiences
- ๐จ Portfolio Sites - Showcase your work with blog posts
- ๐ Documentation Sites - Product docs or knowledge bases
- ๐ข Company Blogs - Content marketing and announcements
- ๐ Learning Journals - Document your learning journey
- ๐ Multilingual Sites - Arabic, Hebrew, or mixed LTR/RTL content
- ๐ง Embeddable Content - Integrate blog posts into dashboards or CMS
- Markdown/MDX rendering
- Blog post pages
- Homepage with latest posts
- Syntax highlighting
- Dark/light mode
- Responsive design
- Custom theme system
- RTL language support
- Embeddable content mode
- Search functionality
- Tag/category filtering
- Series support
- Related posts
- RSS feed
- Sitemap generation
- Enhanced SEO
- UI Refinement: Integrate Shadcn UI and modern design patterns (v0/Lovable inspired)
- Comments system (Giscus)
- Analytics integration
- Newsletter integration
- Social sharing
- Performance monitoring
- Admin Interface: Web-based CRUD for articles using
react-md-editor
Contributions are welcome! Here's how you can help:
- ๐ Found a bug? Open an issue
- ๐ก Have a feature idea? Start a discussion
- ๐ง Want to contribute code? Fork and submit a PR!
- ๐ Improve docs? Documentation PRs are highly appreciated!
MIT License - feel free to use this for your own blog!
You are free to:
- โ Use commercially
- โ Modify as needed
- โ Distribute
- โ Use privately
Just keep the license notice. That's it!
- Built following the Next.js SSG documentation
- Inspired by Intermediate React v6 course
- Uses the excellent Tailwind Typography plugin
- ๐ Read the docs
- ๐ Report issues on GitHub Issues
- โญ Star this repo if you find it useful!
Ready to start blogging? Fork this repo and make it yours! ๐






