What I use
A living list of hardware, software, and tools that make up my daily environment. Inspired by uses.tech. Last updated 2026.
Development Environment
Neovim + VS Code
Neovim for deep editing sessions; VS Code with Vim keybindings for project-wide work and extensions. Both configured from the same dotfiles.
Warp
Terminal emulator. Blocks, AI completion and multiplexed panes make it worth the switch from iTerm2.
Zsh + Oh My Zsh
Shell with Powerlevel10k prompt, zsh-autosuggestions, and zsh-syntax-highlighting. Aliases live in a separate file committed to dotfiles.
JetBrains Mono
Monospaced typeface with ligatures. Used in both the terminal and the editor at 14px.
Infrastructure & Cloud
Cloudflare
Tunnel for exposing local services without opening ports, Pages for static deployments, DNS for every domain, and Turnstile for bot protection on forms.
Docker + Docker Compose
Every service on the VPS runs in a container. Compose files are committed alongside the app code — no configuration drift between development and production.
Ubuntu Server (via CyberPanel)
Ubuntu LTS on a VPS. CyberPanel handles SSL certificate renewals and virtual host configuration so Nginx configuration stays out of my way.
GitHub Actions
CI/CD for every project. Linting, testing, building, and deploying on push to main. Secrets stay in GitHub; environment files are never committed.
Languages & Frameworks
Python — FastAPI, SQLAlchemy, Alembic
Primary backend language. FastAPI for APIs, SQLAlchemy for the ORM, Alembic for schema migrations. Type annotations throughout.
TypeScript — Astro, Node.js
Frontend and build tooling. Astro for this site and content-heavy pages; Node.js for scripts and lightweight servers.
SQL — SQLite, PostgreSQL
SQLite in production for most personal projects (simpler ops, zero infrastructure). PostgreSQL at work for high-concurrency workloads.
Bash / Shell scripting
Glue for deployment scripts, cron jobs, and CI steps. Kept short and readable; anything complex moves to Python.
Databases
SQLite
This site's backend database. Single-file, zero maintenance, and fast enough for the workloads I throw at it.
PostgreSQL
Go-to relational database for work and multi-user applications. Excellent tooling and extension ecosystem.
Redis
Caching layer and session store. Used primarily for rate limiting and short-lived token storage.
ClickHouse
Column-oriented OLAP database for analytics at work. Handles hundreds of millions of events with sub-second query latency.
Monitoring & Observability
Uptime Robot
Free-tier uptime monitoring with 5-minute checks and email/Telegram alerts. First thing I set up for any new service.
Python logging module
Structured JSON logging configured at the application level. Log level controlled by environment variable; no third-party logging library needed for most projects.
Docker logs → stdout
All containers log to stdout. Docker captures them; `docker logs -f` is the first tool I reach for during an incident.
Hardware
MacBook Pro M1
Primary development machine. The M1 performance-per-watt is still remarkable. Development, writing, and local Docker workloads all run here.
Ubuntu VPS
Production server. Runs all deployed services via Docker Compose. Managed through SSH and Cloudflare Tunnel — no exposed SSH port.