Deleting One Server Fixed Twenty Audit FindingsOur static documentation site ran on an EC2 box behind nginx, with SSH open to the internet. A quarterly PCI scan returned twenty-plus findings on that one host. Here is how we migrated it to S3 and CloudFront and dropped the finding count to zero, including the parts the AWS docs skip over.Oct 16, 2026·11 min read·4
I Built a Production Go Payment Ledger in 14 Weeks. Here's What I'd Do Differently.Jul 14, 2026·11 min read·19
Approval Workflows and an Outbox Event Stream in Go: Eventing Without KafkaJul 13, 2026·11 min read·10
Nested Accounts in a Go Ledger: Rolling Up Balances Without Storing OneHow do you show the total under a parent account when the whole system refuses to store a balance? A recursive query, a trigger that refuses to draw a circle, and a rule about what actually has to sum to zero.Jul 12, 2026·7 min read·5
The Exchange Rate Was Hiding in an Environment VariableEvery time I wanted to change an FX rate I had to edit a file on the server and restart the app. So I moved rates and markup into a live admin API, and then audited it hard enough to find the bug that quietly undid the whole thing.Jul 12, 2026·9 min read·3
I Audited My Own Ledger Like a Fintech Expert. It Failed.A double-entry ledger that passed every test still had a bug that turned 100 dollars into 15 dollars, a chain that forked the moment you ran two copies, and no way to ever forget a customer. Here is the teardown, and the fix.Jul 11, 2026·12 min read·3
Multi-Currency and FX in a Go Ledger: Keeping Double-Entry Honest Across CurrenciesYou send 100 dollars, your friend abroad receives 92 euros, and a few cents seem to vanish into thin air. This week I built the currency exchange machinery that makes those cents go exactly where they should, and never anywhere else.Jul 10, 2026·13 min read·5
I Push to Main and Ninety Seconds Later It Is Live. Here Is Every Step in Between.No SSH, no checklist, no remembering the one command I always forget. Just git push, and production updates itself. This is exactly how that pipeline is wired, and how you can build the same one for a plain server.Jul 9, 2026·8 min read·9
The Server Lived in My Head. This Week I Wrote It Down.My ledger has run in production for weeks on a box I set up by hand one evening and never wrote down properly. If it died, I would rebuild it from memory. That is not a plan, so I turned the memory into code.Jul 9, 2026·8 min read·8