Hardening Django in Production: The Security Fixes That Actually Matter
An exposed .env, an unguarded admin URL, rate limiting that broke per-worker, missing security headers — the holes that show …
Thoughts on python development, DevOps, and technology
An exposed .env, an unguarded admin URL, rate limiting that broke per-worker, missing security headers — the holes that show …
What happens after `git push origin main` on this site: an SSH trip to a Hetzner VM that pulls the …
This site hides a post unless is_published is True AND published_at is set and in the past. Why? Because a …
Manual server setup is unreproducible. Terraform defines infrastructure as code — servers, networks, firewalls. Ansible configures the environment — dependencies, …
A Django CI pipeline requires three mandatory stages: tests (pytest/Django runner), linting (Black/flake8), and security scans (bandit/check --deploy). Everything else …
HTMX replaces JavaScript frameworks by having the server return HTML fragments that the browser swaps directly. No JSON APIs. No …
Indexing is not optional. Without it, PostgreSQL scans entire tables. With it, queries jump straight to rows in logarithmic time. …
Most portfolio deploys are done by hand and remembered by hope. I rewrote mine as code: Ansible to provision and …
One of the biggest confusions for junior developers: where do I code, where do I test, and how does Git …
What happened when my newly-launched Django portfolio site got hit by automated vulnerability scanners, and the 6 changes I made …