fredericklowe.com
Frederick Lowe, Nov 2025 (active)

Why wrestle with WordPress when you can create an LLM-integrated custom CMS that renders perfect Web pages from markdown?
The Problem
Content management systems have a Goldilocks problem. They're too heavy or too light. Also, they're all terrible, and writing anything in HTML is also terrible, and I just wanted to create something that isn't terrible for the love of G-d IS THAT TOO MUCH TO ASK? measured breathing
And so I give you:
- Markdown authorship
- First-fetch page caching and dynamic image sizing to appease the Lighthouse G-ds
- Hydration with dynamic content to do... you know... stuff
The Solution
A featherweight PHP service architecture:
- ArticleService loads and caches markdown
- TemplateService processes HTML with variable substitution
- BlogIndexService generates listings
- ImageService handles demand formatting and sizing, and first-fetch caching
- AnalyticsService records page views
- LLM article metadata generation
Architecture Highlights
Markdown-First Authoring
Articles are authored in markdown with a few custom extensions.
- Support for responsive images (
[[img-src:path;aspect:16:9]]) - Template variables that expand into dynamic content (
{{ latestblogposts }})
The MarkdownParser handles headers, lists, code blocks, and link processing with automatic external link detection.
Router performs cookieless inbound processing of all externally originating traffic, and directs all external links through a centralized endpoint.
Caching Strategy
- Redis caches article content with a (jittered) 60-second TTL
- Blog index content caches for one hour
- Cache invalidation triggers automatically when source files change
Image Pipeline
Client:
- Source image references are rendered as data-src on <img> tags
- Javascript interrogates viewport width on DCL, and advertises one of four target widths via image src
Server:
- Router converts source image full size png to sized webp on first fetch
Technology Stack
- Markdown for content authoring
- PHP 8* with custom routing
- PostgreSQL for analytics (views, referrers, outlinks)
- Redis for content caching