01 Uses A practical colophon

What I work with.

The actual tools, stack, and workflow behind the work on this site. Updated when something changes, not on a schedule.

02 05
VS Code
Daily driver. JetBrains keymap, no theme overrides.
Cursor
When the work is local iteration on a tight loop.
Claude Code
When the work needs to think across more than one file.
iTerm2 + zsh
Tabbed sessions, per-project profiles.
GitHub Desktop
For diffs and quick commits. Branching and rebasing in CLI.
03 03
Figma
Precision design, component-system maintenance, handoff fidelity.
Claude Design
Visual exploration when a frame is faster to think in than markup.
iA Writer
Writing-first for long-form content and case study drafts.
04 07
TypeScript
Default for everything I author from scratch.
Astro
This site. Static-first, content collections, MDX, view transitions.
React + React Native (Expo)
ChatOBD2 mobile + web surfaces.
ASP.NET MVC + Razor
MagTek platform. Razor partial library past 100 typed components.
Hand-written CSS
Tokens, layout primitives. No utility-class framework on this site.
Tailwind
On projects where the team is already on it.
Supabase
Database, auth, edge functions for ChatOBD2.
05 04
Prompt modules in source
Typed, versioned, reviewed in PRs like any other code.
Schema-bound outputs
Model output is constrained at the boundary, not at the UI layer.
Deterministic layers in front
Six reasoning layers run before every model call in ChatOBD2.
Token budgets as resource budgets
38,000-token system prompt assembled per scan, P0 sections always make the cut.
06 03
MacBook Pro 14"
M3 Pro, 36 GB. Daily.
Studio Display
Single screen, no second monitor. Forces tab discipline.
iPhone 15 Pro
Always nearby, mostly because of ChatOBD2 testing.
07 06
Astro 4
Static-first, content collections for case studies, MDX.
Hand-written CSS
No CSS framework. ~12 KB of design tokens carry the system.
Inter, Instrument Serif, JetBrains Mono
Loaded from Google Fonts via preconnect.
Plausible analytics
Privacy-respecting. No cookies, no fingerprinting.
Web3Forms
Static contact form, no backend required.
Cloudflare Pages
Static deploy, edge caching.