Uses
What I work with.
The tools, stack, and workflow behind this site. I update it when something changes.
Editor & code
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.
Design
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.
Stack
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.
AI workflow
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.
Hardware
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.
This site
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.