Welcome to the Beniverse
I finally built myself a proper home on the internet. Here's what's here.
Why I Picked Starlette Over FastAPI for This Site
FastAPI is great, but sometimes simpler is better.
Idle Games Are Weirdly Hard to Build
What I learned building Idle Rampage. Spoiler: spreadsheets.
You Might Not Need React
For a lot of projects, vanilla JavaScript is fine. Better, even.
uv Changed How I Python
A Rust-powered Python package manager that's absurdly fast.
Pydantic v2 Broke Everything (And It Was Worth It)
The migration was painful. The performance gains are real.
Ruff Is All You Need
One linter to rule them all. And it's absurdly fast.
File-Based Storage Is Fine, Actually
Not every project needs PostgreSQL.
Async Python: The Stuff Nobody Tells You
The gotchas I learned the hard way.
Jinja2 Is Better Than You Think
It's not just 'that template language Flask uses.'
The Trick to Testing Starlette Apps
Test your ASGI app without running a server.
I Only Use Docker for Databases
Docker for databases, native Python for everything else.
My 10-Line GitHub Actions Workflow
CI doesn't have to be complicated.
orjson Is Stupid Fast
10x faster JSON serialization. What's not to like?
React Native Was Slow Until I Fixed This
Most React Native performance problems have the same fix.
Just Use httpx
If you're doing async Python, stop using requests.
Type Hints Changed How I Code Python
I resisted type hints for years. I was wrong.
CSS Variables Are All You Need for Theming
Dark mode with plain CSS. No library needed.
Pre-commit Is Worth the 5 Minutes to Set Up
Catch linting errors before they hit CI.
Making CLI Tools in Python
argparse + rich = nice CLI tools.
Environment Variables: Doing It Right
pydantic-settings makes config easy.
Git for Solo Devs
Keep it simple when you're working alone.
Print Debugging Is Fine
Sometimes the simplest solution is the right one.
Boring Code Is Good Code
The cleverest code is often the worst code.
Stop Using os.path
pathlib is better. Just use it.
Dataclasses vs Pydantic: When to Use Which
Both are useful. Know when to use each.
The Walrus Operator Is Actually Useful
It's not just a meme. It's actually useful.
structlog > logging
Log data, not messages.
Context Managers Are Underrated
with statements aren't just for files.
What Those Underscores Mean in Python
A quick reference for Python's underscore conventions.
Python's Match Statement Is Actually Good
Pattern matching is more than a fancy switch statement.
Generators Save Memory
yield instead of return when you're processing lots of data.
Speed Up Slow Functions with lru_cache
One decorator to make slow functions fast.
itertools Tricks I Actually Use
The itertools functions worth knowing.
Web Dev in 2025 Is Weird
Some thoughts on the current state of web development.