From first principles

Notes on software, learning, and building from the ground up

  1. How to Stop Claude from Ghostwriting Your Git History (And Fix It If It Already Did)

    Claude was silently adding itself as a co-author on every commit. Here's how I scrubbed it from my entire repo — branches, tags, and all — using git filter-repo.

  2. Why I'm Building SaaS in 2026

    In-house AI agents are seductive but fragile. Here's the case for using agents to explore and concrete workflows to ship.

  3. The Un-Abstracted Frontend

    Building a modern React app from scratch - no Vite, no Next.js - to demystify the magic of `create-react-app` and its friends.

  4. My bookmarks over the years (part 5)

    A dump of articles and links I've collected in my browser, with brief notes - part 5 of 5.

  5. My bookmarks over the years (part 4)

    A dump of articles and links I've collected in my browser, with brief notes - part 4 of 5.

  6. My bookmarks over the years (part 3)

    A dump of articles and links I've collected in my browser, with brief notes - part 3 of 5.

  7. My bookmarks over the years (part 2)

    A dump of articles and links I've collected in my browser, with brief notes - part 2 of 5.

  8. My bookmarks over the years (part 1)

    A dump of articles and links I've collected in my browser, with brief notes - part 1 of 5.

  9. CommonJS vs ES Modules in JavaScript

    Why JavaScript has two module systems, how they differ in practice, and when each one shows up in your code.

  10. Developer Rhapsody

    A parody of Bohemian Rhapsody, rewritten for the everyday struggles of shipping software.

  11. How to convert a Jekyll gem-based theme to a regular theme

    Notes-to-future-self on flattening a gem-based Jekyll theme into your repo so you can edit it directly.

  12. How to start a personal blog with Jekyll and Github Pages

    A no-frills walkthrough for spinning up your own static blog with Jekyll and hosting it free on GitHub Pages.

  13. Dynamic dispatch pattern in Scheme/Racket

    Implementing dynamic method dispatch - the polymorphism trick that powers JavaScript's toString - in plain Scheme.

  14. Hello World!!

    A short hello and what to expect from this blog.