Skip to content

Setup

Everything I use to build, write, and ship. Updated as things change.

Hardware

I type on a Keychron Q10 Max — Alice layout, wireless, QMK. The split ergo layout fixed the wrist pain I was getting from flat keyboards. When I’m working from a coffee shop I bring the NuPhy Air75 V3, which is thin enough to fit in my bag without thinking about it.

Mouse is a Logitech MX Vertical. Took a week to get used to the grip. Now a normal mouse feels wrong.

All of this runs on a MacBook Pro 14” M4 Pro. Everything I need fits in an Arc’teryx Aerios 35 — laptop, charger, keyboard, water bottle, and still room for a layer.

Apps

Zed for editing. Fast and has Vim mode. I switched from VS Code and haven’t looked back.

Ghostty for terminal. GPU-accelerated, native on macOS, and the config is just a text file. I run tmux inside it and zsh with a starship prompt.

Helium for browsing. Lightweight, no bloat.

Obsidian for everything else. Notes, vaults, all my markdown. If I’m writing something that isn’t code, it’s in Obsidian.

Stack

I’m full-stack TypeScript. Bun runs everything — runtime, package manager, test runner. I tried going back to Node once and it felt slow. uv when I need Python, which is rare now but still happens.

Backend is Convex. Real-time, no infra to manage, and the DX is the best I’ve used. Better Auth for auth because I got tired of rolling my own. Zod for validation because I don’t trust anything that comes over the wire.

Frontend is Tailwind v4 + shadcn/ui for styling — if it doesn’t have shadcn support, I don’t want it. React and React Native for UI, Expo for mobile, TanStack for routing, state, and queries.

Linting is Oxlint + Oxfmt for TypeScript, Ruff for Python. Type checking with tsgo or tsc for TypeScript, ty for Python.

CLI Tools

I replaced most of the default Unix tools with faster Rust alternatives. Keyboard over mouse, terminal over GUI.

ToolPurpose
yaziFile manager
lazygitGit TUI
deltaGit diffs
ghGitHub CLI
fzfFuzzy finder
fnmNode version manager
jqJSON processor
yqYAML processor
jlessJSON viewer
batCat with syntax highlighting
fdFast find
ripgrepFast grep
ezaModern ls
zoxideSmarter cd
dufDisk usage
dustDisk usage visualizer
fastfetchSystem info
btmSystem monitor
procsModern ps
trashSafe rm
hyperfineBenchmarking
tldrMan pages

Coffee

V60 pour over, every morning. I drink Nordic style light roasts — Sey and Native are the two roasters I keep coming back to. If the bag doesn’t have tasting notes that sound like fruit, I’m not buying it.