CASE-0015 · MISSION REPORT任務報告
Maintained

ghost-blog

Self-hosted Ghost 5 blog at blog.cativo.dev with a custom terminal-themed Handlebars theme.

ghost-blog screenshot
KEY FEATURES
  • Custom Handlebars theme: Tokyo Night Storm, hybrid hero feed, sidebar TOC, reading progress
  • Blog series support via Ghost internal tags with collapsible series index per post
  • Self-hosted: Ghost 5 + MySQL 8 + Docker Compose, fronted by Traefik v3.6 with SSL
  • Python migration toolkit using Ghost's Admin API — bulk tagging, theme upload, profiles
OVERVIEW

stars last commit license

Self-hosted Ghost blog with a custom terminal-themed Handlebars theme

The blog at blog.cativo.dev runs on Ghost 5 behind Traefik, with a custom theme called cativo-terminal — Tokyo Night Storm palette, terminal aesthetic (window chrome, prompts, monospace), hybrid hero feed, sidebar TOC, reading progress, Giscus comments, and grep-style search.

Why I built it

I wanted full control over the look of my blog without giving up Ghost's writing experience. Off-the-shelf Ghost themes either looked generic or didn't support the patterns I wanted (blog series, sidebar TOC, reading progress). Building a custom theme also gave me a place to apply the same Tokyo Night terminal aesthetic I use in my portfolio and dotfiles — one visual language across everything I publish.

What it does

  • Custom Handlebars theme with Tokyo Night Storm palette, dark and light modes.
  • Hybrid homepage — large hero featured post + terminal-style chronological feed.
  • Sidebar TOC with active-section highlighting and smooth scroll.
  • Reading progress bar at the top of each post.
  • Blog series — group posts via internal Ghost tags (#series: Series Name) and the theme renders a series badge above the title plus a collapsible series index at the bottom.
  • Giscus comments integrated via GitHub Discussions.
  • Terminal grep-style search UI.
  • Self-hosted stack — Ghost 5 + MySQL 8 + Docker Compose, with Traefik v3.6 routing blog.cativo.dev in production.
  • Migration scripts in Python — bulk tag assignment, series creation, theme upload, profile-image management — all via Ghost's Admin API with JWT.

Stack

Ghost 5 (Alpine), MySQL 8, Handlebars + custom CSS, Docker Compose, Traefik v3.6, Python (PyJWT + Requests) for migration utilities.

Status

Live at blog.cativo.dev.

cativo.dev API·checking…·自家管理
--:--:--·UTC-6 SV
GitHub·LinkedIn·X·© 2026