Blog
Thoughts on software, entrepreneurship, and everything in between.
Thoughts on software, entrepreneurship, and everything in between.
Got a project in mind, a question, or just want to chat? I would love to hear from you.
Send an EmailThoughts on building software, running a business, and everything in between.
Machine learning and the ideas behind it, architecture decisions, the bugs that were harder than they looked, and what I would build differently now.
Physics meant something exact by emergence. Machine learning borrowed the word and kept only the drama. The difference is worth knowing before you use it.
Why I split a WhatsApp messaging gateway into a public front door and an unreachable engine room, how the two halves confirm every send, and why the engine room left my desk.
How to make a personal site readable by AI agents and LLMs: implementing llms.txt, structured RSS, semantic HTML, JSON-LD, and machine-readable metadata.
Performance patterns for Next.js 15 on Cloudflare Workers via OpenNext: Server Components, static generation, the missing filesystem, images without an optimiser, redirects in config, and font and CSS budgets.
Practical CI/CD pipeline design for solo projects: GitHub Actions, caching, parallel jobs, and deployment strategies built for speed and reliability.
Hard-won open-source licensing lessons: why MIT was the wrong default, the move to CC BY-NC-SA, dual licensing, AGPL for SaaS, and why a CLA matters.
How I built a Discord invite-tracking system that handles thousands of events per minute and detects fake accounts with behavioural heuristics.
Practical MongoDB patterns for high-throughput apps: per-guild documents, capped collections, compound indexes, bulk writes and lazy schema migration at scale.
The architecture behind Chat Guard, a Discord moderation bot running across thousands of servers: sharding, MongoDB at scale, and the event pipeline.