Uses Tools and setup

What I work with.

The tools, stack, and workflow behind this site. I update it when something changes.

5
VS Code
Daily driver. JetBrains keymap, no theme overrides.
Cursor
For local iteration on a tight loop.
Claude Code
For changes across multiple files.
iTerm2 + zsh
Tabbed sessions, per-project profiles.
GitHub Desktop
For diffs and quick commits. Branching and rebasing in CLI.
3
Figma
Design and component systems.
Claude Design
For early visual exploration; the result goes back into code.
iA Writer
Writing-first for long-form content and case study drafts.
7
TypeScript
Default for everything I author from scratch.
Astro
This site. Static-first, content collections, MDX, view transitions.
React + React Native (Expo)
VINly and ChatOBD2 mobile + web surfaces.
ASP.NET MVC + Razor
MagTek platform. Full-stack C#/ASP.NET MVC and 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 VINly and ChatOBD2.
4
Prompt modules in source
Typed, versioned, reviewed in PRs like any other code.
Schema-bound outputs
The output schema is validated before it reaches the UI.
Deterministic layers in front
Six reasoning layers before every model call in ChatOBD2; in VINly a VIN is check-digit validated on-device before anything is looked up, and no model runs at all.
Token budgets as resource budgets
A 38,000-token prompt is assembled for each scan; P0 sections are always included.
3
MacBook Pro 14"
M3 Pro, 36 GB. Daily.
Studio Display
Single screen, no second monitor. Forces tab discipline.
iPhone 15 Pro
Always nearby, mostly for VINly and ChatOBD2 field testing.
6
Astro 4
Static-first, content collections for case studies, MDX.
Hand-written CSS
No CSS framework; design tokens and component styles do the work.
Anybody, Inter, Martian 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.