Publishing a Markdown Blog: Technical Options
Static Site Generators (SSG)
-
Jekyll (Ruby)
-
GitHub Pages integration
-
_posts
directory structure -
Front Matter support
-
Example workflow:
bundle exec jekyll serve
-
-
Hugo (Go)
-
Blazing fast builds
-
Theme ecosystem
-
Shortcodes for extended functionality
-
Deployment:
hugo -D && hugo deploy
-
-
Next.js (React)
-
MDX support
-
Dynamic routing
-
Example structure:
// pages/posts/[slug].js export async function getStaticProps({ params }) { const post = await getPostBySlug(params.slug); return { props: { post } }; }
-
Markdown-First Platforms
- Ghost (Node.js)
-
Native Markdown editor
-
API-driven headless CMS
-
Docker deployment:
FROM ghost:alpine
-
- Medium
- Markdown import support
- API for programmatic publishing
- Hashnode
- Dev-focused platform
- GitHub-flavored Markdown
CMS + Markdown
-
Forestry.io
- Git-backed CMS
- Previews with Netlify/Vercel
-
Netlify CMS
-
Open-source
-
React-based UI
-
Config example:
collections: - name: "blog" label: "Blog" folder: "_posts" create: true fields: - {label: "Title", name: "title", widget: "string"}
-
Hosting Options
Service | CI/CD | Free Tier | Custom Domain |
---|---|---|---|
GitHub Pages | ✅ | ✅ | ✅ |
Netlify | ✅ | ✅ | ✅ |
Vercel | ✅ | ✅ | ✅ |
AWS Amplify | ✅ | ❌ | ✅ |
Advanced Options
-
Pandoc (Document conversion)
pandoc post.md -o post.html
-
GitBook (Documentation-focused)
-
Obsidian Publish (Note-taking ecosystem)
Recommended Stack
- Simple: Jekyll + GitHub Pages
- Dynamic: Next.js + Vercel
- CMS: Hugo + Netlify CMS
Tips:
- Use
prettier
for Markdown formatting - Add syntax highlighting with Prism.js
- Implement RSS feed generation
- Set up Git hooks for linting