The tools and patterns I actually keep coming back to.
This is less a shopping list and more a map of the environments I like working in. The exact stack changes, but the underlying preferences stay fairly consistent.
Development environment
macOS, Raspbian, Ubuntu, and Oracle Linux
I move between local development on macOS and a mix of Linux environments depending on what the system actually needs to do.
VS Code, gedit, and vi
The editor choice is less ideological than situational. I use the tool that matches the machine, the task, and how close I am to the system.
zsh, bash, and csh
I do not have a particularly strong shell preference. If the environment works and the job gets done cleanly, that is usually enough.
Application stack
Node.js and Express
Still a strong fit for backend services that need clear boundaries, practical deployment, and behavior that stays understandable over time.
Next.js
Useful when I want a web interface that ships quickly without losing touch with the backend reality underneath it.
SQLite, MySQL, and MariaDB
Databases are a recurring anchor in how I think about systems, whether the job calls for something embedded and lightweight or a more conventional service-backed setup.
Infrastructure and hosting
Cloud VMs and Raspberry Pi hardware
A lot of the interesting work lives in the gap between small cloud systems and small physical systems that still need to be maintained properly.
Docker, Podman, and Docker Compose
Containers are the default path for packaging and running services when I want repeatable deployments without making the environment opaque.
Cloudflare and Cloudflare Tunnels
They sit at the edge of a lot of what I host, handling ingress, routing, and the practical side of exposing services without overcomplicating the path in.
Forgejo, buildx, and a private Docker registry
I use Forgejo runners and Docker build tooling to build, tag, cache, and publish images through a private registry I host myself.
Networking and home systems
OpenWrt on Linksys WRT and Velop hardware
A recurring place to learn more about upgrades, packages, tunnels, and how networks behave when the happy path stops being enough.
WireGuard and Unbound
They cover two of the foundations I care about most in a personal network: private access that I can rely on and DNS behavior that I can actually reason about.
Home Assistant with Bluetooth presence and smart plugs
Best when the automations are local-first, predictable, and useful enough to quietly earn their place.
Working style
Incremental delivery
I prefer shipping something coherent first, then tightening the details with real usage.
Measured complexity
Complexity is acceptable when it buys control, performance, or reliability that matters.
Visible systems
If I cannot observe it, explain it, and repair it, I probably do not trust it yet.