Writing

Blog

Essays, project retrospectives, and notes from building things.

  1. Building Ledvo: A Local-First Accounting Book That Does Not Pretend the Ledger Is Optional
    SolidJSAccountingLocal First

    I built Ledvo because accounting software should treat the ledger as the product, not as a backend detail hidden behind dashboards.

  2. Building Namna: From a Spreadsheet Question to a Private Financial Planning App for Filipinos
    React NativeExpoTypeScript

    I first tried answering a personal money question in Excel. The spreadsheet worked, but it did not feel like the right tool. That question eventually became Namna.

  3. Wrap, Don't Reimplement: Building obsidian-cli.nvim
    NeovimLuaObsidian

    I built a Neovim plugin for Obsidian as a thin wrapper over Obsidian's official CLI — not a Lua reimplementation of the vault format. Here's why 2,000 lines beat 4,500 lines once the official CLI shipped....

  4. sajj: Can a Couple of AI Agents Handle Your Workflow?
    AIGeminiReact

    I've been getting the 'can AI handle my workflow?' question enough times to want a serious answer. So I built a free tool that decomposes any business process, scores each step against four criteria, and generates...

  5. citruszest-ghostty.nvim: One Palette for Neovim and Ghostty
    NeovimLuaGhostty

    I wanted my terminal and my editor to use the exact same 16 colors — not just close enough, the same hex values. So I shipped a Neovim colorscheme that shares a palette with Ghostty.

  6. My First App Store Rejection, and Why I'm Okay With It
    iOSApp StorewatchOS

    I spent four weekends building my first Apple Watch app with an accompanying iPhone companion. Designed it, coded it, submitted it, and got rejected under Guideline 5.2.5 — a trademark issue. Here's what I learned, and...

  7. pyworks.nvim: Zero-Config Python Notebooks in Neovim
    NeovimPythonLua

    I built a Neovim plugin that brings Jupyter-like notebook workflows to the terminal with zero configuration. Here's why I created it and how it works under the hood.

  8. Automating tmux Setup with dev-session-manager
    tmuxBashDeveloper Tools

    I got tired of manually creating the same tmux windows every time I switched projects, so I built a tool to automate it and published it as a Homebrew tap.

  9. Automating MCP Server Management for Phoenix LiveView
    ElixirPhoenixAI

    Most Claude Code CLI MCPs work great once configured, but server-dependent MCPs like Tidewave need to connect to specific project endpoints. Here's how I automated the connection management for seamless project switching.