The 80/20 of Web Performance for a Content Site
The handful of changes that deliver most of the speed for a content site: gzip, browser caching, image size, and a fast origin. No framework wars.
Every review is written after real use. Every calculator shows the math. No recycled spec sheets.
The handful of changes that deliver most of the speed for a content site: gzip, browser caching, image size, and a fast origin. No framework wars.
VACUUM INTO is the safest way to back up and compact a SQLite database while it is running. Here is how it works, when it fails, and why I use it over file copies.
Moving from WordPress to a Go-based CMS — what the WXR import handled, what needed manual work, and the surprises that made it easier than feared.
A daily SQLite backup you never have to think about: a systemd timer running VACUUM INTO, plus retention and a restore-test hook. Real config included.
Go's html/template escapes output automatically — that is the feature, not a limitation. How it stops the XSS you would otherwise write, and where it gets in the way.
The honest path between 'keep it in SQLite' and 'run your own Postgres': move the part that needs it to a managed database and keep the rest in the file.
How to actually read your server logs: systemd journal for the app, GoAccess for traffic, and log rotation so logs never fill the disk.
Comments are where a small site gets spammed and defaced. Here is the approve-first moderation flow that keeps comments useful without hiring a moderator.
I corrupted SQLite databases on purpose and integrity_check passed on one that was actually broken. Here is the verified boundary of what this check can and cannot see.
The nginx line that serves generated pages, clean URLs, and a proper 404 — explained. Plus the cache and gzip settings worth adding.