Building a PHP Blog Platform with Symfony

I decided to try building my own blog platform using PHP and Symfony instead of dealing with Hugo’s maintenance headaches. It was also a good excuse to get better at PHP since I use it at work.

Motivation

This site currently runs on Hugo, and honestly, it’s been a pain to maintain:

  • Site builds randomly break when Hugo gets updated
  • Themes I’ve used before (like the academic theme) either get abandoned or turn into paid products
  • Every Hugo upgrade feels like rolling the dice

I started thinking - why not just build my own thing from scratch and avoid all this third-party dependency mess?

Implementation approach

1. Tech Stack

  • Framework: Symfony web framework for structured PHP development
  • Styling: LaTeX.css for academic document aesthetics
  • Database: SQLite for lightweight data persistence
  • Templating: Twig for clean template separation

2. How it went

It was surprisingly quick to get something working! PHP is just really good at spitting out web content, and Symfony made everything feel organized. I managed to recreate most of my blog’s functionality in about a day, keeping the same LaTeX.css styling so it looked identical.

What worked well:

  • Twig templates are clean and easy to work with
  • Symfony keeps things organized without being too rigid
  • SQLite was perfect for simple data storage
  • Built an admin page where I could write posts directly

Why I abandoned it

1. Security headaches

Auth is overkill: Setting up proper authentication for just me to edit posts felt like way too much work and risk for a simple blog.

Deployment mess: I’d need to deploy two versions - one with admin stuff for me, and a clean public version. Or I’d have to secure admin endpoints properly, which means exposing my server, adding MFA, the whole nine yards. Too much hassle.

2. Feature gaps

Basic editor: The editor I built was pretty basic. I wanted rich text editing, but that means more dependencies and more things to maintain.

Performance reality check: A dynamic site just can’t compete with static files when it comes to speed and security. Static sites are just… simpler.

What I learned

Symfony is actually pretty great: Even though I didn’t stick with it for the blog, Symfony impressed me. It’s well-designed and makes web development feel smooth.

Right tool for the job: For a simple blog that I update occasionally, static generation just makes more sense. But for actual web apps with users, databases, and complex features? Symfony would be my go-to.

PHP development velocity: I forgot how fast you can move with PHP for web stuff. The feedback loop is immediate and satisfying.

What’s next

Even though I went back to Hugo (for now), I’m glad I spent time with Symfony. I’ll definitely reach for it on my next web project that actually needs a backend. Sometimes the best way to appreciate what you have is to try building an alternative!

For now, I have updated my process to write blogs by using Obsidian to write the markdown and adding some make commands to manage Hugo operations.