HopHop

How I Chose My Blog Stack

grav mcp fediverse meta

I'd been thinking about it for a while: a personal blog to document my Home Assistant tinkering, my self-hosted experiments, and generally everything that makes me proud in my little geek corner. Something simple, not too time-consuming, and visually acceptable without having to get my hands too dirty with frontend work. Yuck.

TL;DR

For those in a hurry, here's the journey:

  • Defining criteria (Markdown, multilingual, PHP, AI integration)
  • Eliminating the usual suspects (WordPress, Ghost)
  • Discovering Grav and its flat-file approach
  • Developing an MCP plugin to control the blog from Claude
  • Connecting to the Fediverse via Bridgy Fed

What I Wanted

My initial criteria seemed reasonable:

  • Native Markdown — I write code, I want to write my articles like my READMEs
  • Syntax highlighting — A tech blog without syntax highlighting is like a pizza without cheese
  • Multilingual — For days when I feel international
  • Not ugly — Yes, that's a technical criterion
  • Open source — Can't help it
  • PHP preferably — It's my daily playground, might as well stay on familiar ground

So far, nothing crazy. Then I added two small lines:

  • Claude MCP integration — Because asking Claude to translate my articles or create posts from the terminal really appealed to me
  • Fediverse — Being able to receive comments from Mastodon rather than managing a comment system and its spam

"It's not much", I told myself. Ha.

The Tour

WordPress? No thanks.

The classic reflex. But for a personal blog, it's like taking a semi-truck to pick up bread. Security plugin, cache plugin, plugin to make plugins work together... Ain't got time for that...

Ghost? Almost.

Elegant, modern, great API. But it's Node.js. And me, Node on my server, if I can avoid it...

Grav? Bingo.

Flat-file (no database), native PHP, basic Markdown, built-in multilingual... Especially since I plan to use AI quite a bit for writing, it seemed promising.

Target Architecture

Here's what I'm aiming for:

┌─────────────────────────────────────────────┐
│              My server                       │
│                                             │
│   Grav ──── MCP Plugin ◄──── Claude Code   │
│     │                                       │
│     └──── RSS ──── Bridgy Fed ──── Mastodon │
│                         │                   │
│                    Webmention               │
│                   (comments)                │
└─────────────────────────────────────────────┘

Grav for Content

My articles are simple Markdown files in folders. Backup? cp -r. Migration? scp. Git? Native. Easy peasy.

A Homemade MCP Plugin

This is where it gets fun. I developed a plugin that exposes an MCP API on my blog. I talk about it in detail in the article about developing the MCP plugin. Result: I can ask Claude "Create an article about my new Zigbee setup" or "Translate the Home Assistant article to English", and it does it. Directly. Without opening the admin.

The plugin is in PHP thanks to the official MCP SDK, and I plan to share it with the Grav community once it's well tested.

Bridgy Fed for the Fediverse

The idea: connect my RSS feed to Bridgy Fed. I ended up developing a complete Grav plugin for this, which I detail in this article. People can follow me from Mastodon, and when they comment, it comes back to my blog via Webmention. No account to create, no spam to moderate, no GDPR to manage. Just conversations.

I admit I'm doing this for the beauty of the gesture. Since I'm not big on social media, I think I have 4 followers ;) But hey, I like the concept behind Mastodon and the Fediverse in general and I wanted to integrate with it...

What's Next

The blog is online, the MCP works, and I can finally start writing. Well, we'll see if I actually do ;)

Catch you later!


This article was originally written in French. This translation was generated automatically with AI assistance.

Fediverse Interactions

1

Previous Post Next Post