Publishing a Markdown Blog: Technical Options

Static Site Generators (SSG)

  1. Jekyll (Ruby)

    • GitHub Pages integration

    • _posts directory structure

    • Front Matter support

    • Example workflow:

      bundle exec jekyll serve
      
  2. Hugo (Go)

    • Blazing fast builds

    • Theme ecosystem

    • Shortcodes for extended functionality

    • Deployment:

      hugo -D && hugo deploy
      
  3. 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

  1. Forestry.io

    • Git-backed CMS
    • Previews with Netlify/Vercel
  2. 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)

  1. Simple: Jekyll + GitHub Pages
  2. Dynamic: Next.js + Vercel
  3. 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