const uses: Setup
What I use
The editor, hardware, AI tools, and stack behind the work on this site — updated as the setup changes, not written once and forgotten.
Editor & Workflow
- Emdash
- AI-native development environment — I run multiple agent sessions in parallel across git worktrees, one per project or feature branch, so nothing blocks on context-switching.
- Git worktrees
- Isolated checkouts per task instead of stashing/branch-hopping. Each agent gets its own working tree; merges happen when the work is actually done.
- nix-darwin
- Declarative macOS system config — packages, dotfiles, and shell setup reproduce from one flake instead of living in my head.
AI Tools
- Claude Code (Pro)
- Primary agent for client work — planning, multi-file changes, code review. Trusted enough for production repos.
- Pi + DeepSeek
- Side-project and personal exploration — cheaper loop for lower-stakes iteration.
- Matt Pocock's AI skills
- Baseline skill set to keep agentic coding scoped and deliberate rather than freewheeling — how I frame what I hand to an agent versus what I keep for myself.
- Backlog.md
- Tool-agnostic project tracking that lives in the repo, pairs well with the skills above — a documented history an LLM can read directly, CLI/MCP-friendly instead of another tab in a web dashboard.
Terminal
- Ghostty
- GPU-accelerated terminal, minimal config.
- zsh
- Default shell, managed through the nix-darwin flake.
Hardware
- MacBook Pro, M3 Pro
- Daily driver.
- 24" external display
- Single external monitor, portrait-free — I keep the laptop screen as a secondary panel for agent logs/terminals.
const stack: Tech[]
What I reach for, and why
- TypeScript
- Default language for anything shipped — frontend, backend, scripts.
- Vue / Nuxt
- Primary frontend stack — client dashboards, SSR apps.
- Effect
- For services where correctness and typed errors matter more than speed of first draft — sync engines, reconciliation logic.
- Hono.js
- Lightweight API layer when I don’t need a full framework.
- SQLite + better-auth
- Coming back to SQLite for solo/side projects instead of reaching for a backend-as-a-service — more direct control, and its FTS and vector-search extensions are underused for how relevant they are to my workloads. Paired with better-auth (or equivalent) instead of an all-in-one platform's bundled auth.
- Mistral / Gemini / OpenAI
- LLM providers, picked per project on cost, latency, and tool-calling reliability — not brand loyalty.
See individual projectsfor per-project trade-offs — this page covers general tooling, not project-specific architecture decisions.