2026-05-27
·
4 min
·
#htb#ctf#vhost-enum#localstack#s3
First HTB writeup, an easy box where the automated vhost enum returned clean and a ten-line bash loop found the LocalStack S3.
2026-05-26
·
4 min
·
#ci#github-actions#release-please
Three traps adopting release-please on a Python repo — bootstrap-sha, package-name, and the trigger that never fires. Each fix is a one-line config delete or a workflow restructure.
2026-05-25
·
3 min
·
#jekyll#ruby#github-pages#blog
How `github-pages` pinned me to a Liquid that bit-rotted, and why the fix was to drop the gem entirely and build with GitHub Actions.
2026-05-17
·
4 min
·
#iot#qr#ble-mesh#dockpulse
How the DockPulse adoption QR went from a COSE_Sign1 Ed25519 claim at version 17 down to plain SERIAL:HEX at version 3. The smaller QR was a side effect — the actual fix was that the signature was in the wrong place.
2026-05-04
·
5 min
·
#pki#mqtt#iot#mtls
How DockPulse runs two parallel root CAs for an MQTT bus, and why short-lived device certs let me skip the revocation problem entirely.
2026-03-04
·
5 min
·
#c#data-structures#http#lwhttp
A C pointer trick from lwhttp's header map. The public type is Entry*, but the capacity and count live at entries[-1].
2025-10-12
·
4 min
·
#embedded#riscv#uart#crypt-chat
Notes from the crypt-chat framer on a bit-banged RISC-V UART. Why the framer needed a per-frame timeout, and what I almost forgot to stuff.