§ Work

This website

A Spring Boot blog and portfolio with a Markdown editor, tagging, RSS, and an admin panel behind Spring Security.

Source

The site you're reading. Server-rendered Spring Boot, with everything editable from a browser rather than a config file.

Features

  • Markdown blog posts with tags, search, drafts, and reading-time estimates
  • Project portfolio with status tracking and a featured section
  • An About page whose content lives in the database, not the templates
  • RSS feed and sitemap generated from the published content
  • Admin panel protected by Spring Security with BCrypt password hashing

What was interesting

Slug collisions. Two posts called "Week 1" can't both live at /blog/week-1. The service appends -2, -3 until the slug is free, and skips the post's own row so editing doesn't rename it.

Markdown safety. Raw HTML in a post body is escaped rather than rendered. Only I can write posts today, but that stops being true the moment I add comments or import content from somewhere else.

Portable text columns. @Lob on a String maps to a Postgres large object, which is awkward to query. @JdbcTypeCode(SqlTypes.LONGVARCHAR) gives a CLOB on H2 and a TEXT on Postgres, so moving databases is a config change rather than a migration.