Journal
Posts and long-form series on AI, startups, venture capital, and more.
All Posts
Rampart v0.7: Push Allowlists for Protected Branches
Rampart v0.7 adds push allowlists to branch protection configs. Specify which users, teams, and GitHub Apps can push directly to main.
Pasta e Piselli: A Simple Italian Pasta with Peas
A humble Neapolitan pasta dish of peas, onion, and pancetta that comes together in one pot and proves simple ingredients make the best food.
Spring Reading List 2026
Spring reading spanning banana empires, systems thinking, quiet farm life, and the continued misadventures of Arthur Dent.
The Full McGinnis Stack: An Opinionated Python Developer Setup
How to wire together ContextSwitch, python-skills, makefile-mcp, mutmut-mcp, Rampart, and the rest into a complete AI-powered Python development workflow.
Using Claude Code Hooks to Force uv
A simple pre-tool-use hook that intercepts bare pip and python commands in Claude Code and redirects them to use uv instead.
uv Changed How I Think About Python Projects
After years of pip, virtualenv, poetry, and conda, uv has quietly become the only Python packaging tool I recommend. Here's why.
Code Archaeology with AI
Using AI coding assistants to understand, document, and revive legacy codebases. What works, what doesn't, and where the hallucinations live.
Technical Debt Is a Leadership Problem
Most tech debt conversations happen between engineers. But the decisions that create and resolve it are fundamentally leadership decisions.
You Don't Need a Justfile
Justfiles, Pixi tasks, Taskfiles, and other modern Make replacements are solving a problem that was already solved in 1976.
Advanced Makefile Patterns for Python Projects
Beyond the basics: self-documenting targets, environment detection, conditional logic, and other Makefile patterns I use in real Python projects.