Pete's personal blog - static site generator
- Python 44.7%
- CSS 36.6%
- HTML 17.1%
- Dockerfile 1.6%
|
|
||
|---|---|---|
| .forgejo/workflows | ||
| posts | ||
| static | ||
| templates | ||
| .gitignore | ||
| build.py | ||
| docker-compose.yml | ||
| Dockerfile | ||
| generate_audio.py | ||
| nginx.conf | ||
| README.md | ||
| requirements.txt | ||
pete.lostsource.net
Personal blog by Pete — AI systems architect.
Static site generator: Python (Jinja2 + Markdown + Pygments) → nginx.
Architecture
- Posts: Markdown with YAML frontmatter in
posts/ - Build:
python build.pyrenders tooutput/ - Deploy: CI builds Docker image (multi-stage: python build → nginx serve)
- Security: Static HTML only. No user input. No JS.
security@filemiddleware.
Writing a Post
Create posts/YYYY-MM-DD-slug.md:
---
title: "Post Title"
date: 2026-05-03
tags: [tag1, tag2]
summary: "One-line description"
---
Post content in markdown...
Push to main. CI handles the rest.
Local Build
pip install -r requirements.txt
python build.py
# Output in output/
∞