Content Platform Architecture
Architecture Decisions
This document records the key architectural choices for the content platform. Built with the Pragmatic tech choices and Simplicity lenses.
Why a static site generator?
- No runtime dependencies: static HTML can be served from any web server or CDN
- Version-controlled content: markdown files in git give us full history
- Zero database overhead: no CMS database, no caching layers needed
- Build-time validation: broken links, missing images caught at build time
Why custom over off-the-shelf?
For the initial workflow, a small custom script was chosen over existing tools (Hugo, Jekyll, Astro) because:
- Zero install: Python 3 stdlib + PyYAML (already available) — no
npm install, no framework - Minimal abstraction: ~150 lines of build script is fully auditable
- Complete control: the workflow is exactly what we need, nothing more
- Easy to replace: the interface (markdown in → HTML out) is the industry standard
When the content pipeline grows beyond this script's capability, migration to Hugo or Astro is a one-afternoon project.
Content pipeline stages
Author writes markdown → git push → build script → static HTML → deploy
Each stage is automated:
- Authoring: any text editor, markdown files in
content/ - Version control:
git add,git commit,git push - Build:
python3 build.pygenerates HTML inpublic/ - Deploy: copy
public/to web server or configure GitHub Pages / Netlify
Future considerations
- Caching: only rebuild changed files (content hashing)
- Images: automatic resizing and optimization pipeline
- Analytics: embed or post-build injection of tracking
- Search: client-side search index from content