CG Blog: The Head-Only FOSS Dynamic Blog Engine

Creative Geekβ€’

Discover the engine behind the website you're currently browsing and learn about the Head-Only Dynamic Blog Engine, its features, and how it powers the blog.

CG Blog: The Head-Only FOSS Dynamic Blog Engine

CG Blog πŸŽ¨πŸ“

Minimalist React blog engine with first-class RTL support.

Why?

I wanted a simple platform to use as portfolio and to publish my articles on outside social media.

There are plenty of options out there, ranging from ready to use patforms like notion to frameworks designed to render markdown files. But none of them had good RTL support, so I decided to do it myself.

Features

πŸ” Auto RTL Article switching (Arabic/Urdu/Persian ready)
🌐 Server-side rendering (React Router 7)
πŸ“‘ Remote markdown content from any URL
♾️ Infinite scroll with loading states
πŸ–ΌοΈ Graceful fallbacks for missing data
πŸŒ— Built-in dark mode (Shadcn/ui)

Get Started in 4 Steps

  1. Clone:
git clone https://github.com/Creative-Geek/cg-blog.git
  1. Create Content:
  • Copy the template folder contents to a new folder and edit the content.

  • Set a build command:

    node generate-index.js
    
  • Deploy to any static serving service.

  1. Set content source in src/constants.js:
// Use any raw URL that provides the files.
export const BASE_URL = "YOUR_MARKDOWN_FILES_URL";
export const NAME = "Creative Geek";
  1. Launch:
npm install && npm run dev

Content Structure Template

Content Server/
β”œβ”€β”€ Articles/
β”‚   β”œβ”€β”€ my-post.md     # Article content in markdown
β”‚   β”œβ”€β”€ my-post.json   # Article metadata
β”‚   └── my-post.jpg    # Optional cover image
└── Pages/
    β”œβ”€β”€ about.md       # Static page content
    └── about.json     # Page metadata

Article JSON Format

{
  "title": "Your Article Title",
  "image": "optional-cover.jpg",
  "description": "A brief description of your article",
  "date": "DD MMM YYYY",
  "author": "Author Name"
}

Page JSON Format

{
  "title": "Page Title"
}

Hosting Strategies

  • Frontend: Deploy this repo to Vercel/Netlify/Github Pages
  • Content: Host MD files on GitHub/S3/Cloudflare
    Edits appear live without redeploys, only new articles need to be added to index using the build command

Why CG Blog?

  • πŸ•‹ Providing real RTL support to markdown content.
  • πŸš€ Content lives separately - no CMS wars
  • 🧩 Tested with 100+ articles (stress-free scroll)
# Rebuild search index when adding content
node generate-index.js

Contribute

Help us improve:

  • Develop Git-based CMS adapter
  • Provide feedback!

License: MIT