random thoughts — a journey to somewhere
Migrating from GitLab CE to Forgejo
Why we moved 300+ repos off a struggling self-hosted GitLab CE onto Forgejo, how the migration went, and how it performs on 1.5GB of RAM. Read more 28 Mar 2026 - 2 minute read
AI Coding Tools: My Experience and Practical Tips
What I learned using Cursor and Claude day to day — planning with AI, staying in control of the diff, leaning on git, and why the language you pick matters. Read more 31 May 2025 - 7 minute read
Understanding HTTP/1.1: Redirects in Go (Part 3)
301 vs 302 vs 307 vs 308 — which HTTP redirect to use, which ones browsers cache, which preserve the request method, tested against a small Go server. Read more 25 Jan 2025 - 4 minute read
Understanding HTTP/1.1: Content-Type in Go (Part 2)
How the Content-Type header decides what a browser does with your response, plus a hand-rolled http.ResponseWriter implementation in Go. Read more 28 Dec 2024 - 7 minute read
Understanding HTTP/1.1: TCP Server in Go (Part 1)
Build a raw TCP server in Go, inspect what curl and a browser actually send over the wire, and hand-craft a valid HTTP/1.1 response. Read more 12 Dec 2024 - 12 minute read