Approach

How I work.

Frontend, full-stack, and AI features.

Most of the work I take on is repair: a platform that grew without a system, a site that ranks but doesn't convert, a frontend that works in Chrome and breaks on iOS, or an AI feature that needs a real home in the codebase. Greenfield happens, but it's not most of my work.

I work across the stack, mostly frontend: UX, design systems, content, SEO, performance, accessibility, and AI features. I can take a project from design through production and make the tradeoffs between those areas myself.

Read / Pick / Use

Three steps.

I start by reading the existing system, then choose a structure that fits it. I put the result in front of real users and review it before it ships.

  1. 01 Read

    Start with the system.

    Long-running platforms already have rules. Before I design anything, I read the code, content, and analytics to see what the system actually does.

    MagTek platform
  2. 02 Pick

    Choose the structure.

    A lot of bugs come from a structure that doesn't fit the work. I choose the components, data model, and prompt structure once, then reuse them.

    vinplain
  3. 03 Use

    Use AI carefully.

    I keep prompts in source, validate the output, and put deterministic checks before the model. I use AI only where the result can be reviewed and shipped.

    ChatOBD2, in QA
A normal week

What a normal week looks like.

  • Change a Razor partial used in fifty places. The typed ViewModel shows every consumer that needs updating.
  • Replace a carousel with a static hero, then move the pages and analytics one step at a time so nothing breaks.
  • Find the spacing token that is almost right, then decide whether to add a new one or use the existing scale. Usually the existing scale.
  • Write and version a prompt module for ChatOBD2, and keep it inside the 38,000-token budget.
  • Translate a Figma handoff into production and fix small spacing issues as I go.
  • Run Lighthouse after a marketing hero lands, find the LCP regression, and make a tradeoff both teams can live with.
How I use AI

In products and in the build.

I keep prompts in source, use them where they help, and review the output before it ships.

  1. 01
    Constraint Read what already exists
  2. 02
    Interrogate Use the model to surface gaps in the spec
  3. 03
    Prompt module Typed, versioned, in source
  4. 04
    Execute Claude · Cursor · Claude Design · Figma
  5. 05
    Review & ship Output in code or schema-bound

ChatOBD2 is the product example, currently in QA and field testing. Vehicle data goes through six deterministic reasoning layers before any model call. The system prompt is a module that assembles fragments by priority within a 38,000-token budget, based on the verdict and code context. The fragments are typed, versioned, and reviewed in pull requests. Outputs are schema-bound, so the UI gets the shape it expects.

VINly shows when to leave the model out. Its VIN reader used to send a photo to a server for a vision model. That worked, but it cost money on every scan of a free app, needed a network round trip, and forced a photo disclosure in App Privacy. Apple's Vision framework does the job on-device, offline, for free. I removed the model. A VIN is valid based on the ISO 3779 check digit, which the phone can calculate.

I keep prompts in source, version them, test failure modes, and track token budgets like any other resource. New behavior lands as a new prompt fragment with a clear name.

ChatOBD2 verdict surface
A Product surface

What a scan returns

9:41 connected · 2014 Civic
You

Run a scan. Anything I should worry about?

Safe to drive Monitor
Scan confidence Solid · 14 PIDs
Verdict

One pending code, no immediate action

P0420 (catalyst efficiency) is logged but not active. Drivetrain pulled clean across two cycles. Re-scan in 200 mi.

What matters most
  • P0420 Catalyst efficiency below threshold
  • 12 systems Healthy across drivetrain & emissions

For code, I use Claude and Cursor; which one depends on the task. Figma is for design and component systems. Claude Design is for early visual exploration, and the result goes back into the codebase.

The model is one step in a controlled pipeline. A person makes the final call.

What I do

Where I do my best work.

  • I can own a whole site when there isn't a team for it: design, frontend, content, SEO, performance, and accessibility.
  • I modernize platforms that can't be rewritten. I learn how the current system works, then ship changes in small steps that don't require a flag day.
  • I build design systems engineers use: typed components, tokens, and layout primitives, with real consumers from the start.
  • I work between design and engineering. I read the intent behind a design and catch the handoff gaps that cause bugs.
  • I build AI features with prompts in source, schema-bound output, and deterministic checks before the model call. VINly validates the VIN on-device; ChatOBD2 uses six reasoning layers and a 38,000-token budget.
Tools

What I use.

  • Claude
    For code changes and reasoning across multiple files.
  • Cursor
    For local iteration. Same kind of work as Claude; whichever is faster.
  • Figma
    For design and component systems.
  • Claude Design
    For early visual exploration; the result goes back into code.
Across the work

Different companies, same question.

How do I move this page or platform forward without breaking what is already running?

Get in touch

Working on something on the web?

Send a few sentences. Email works too.