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.