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.
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.
- 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 - 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 - 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
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.
In products and in the build.
I keep prompts in source, use them where they help, and review the output before it ships.
- 01 Constraint Read what already exists
- 02 Interrogate Use the model to surface gaps in the spec
- 03 Prompt module Typed, versioned, in source
- 04 Execute Claude · Cursor · Claude Design · Figma
- 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.
What a scan returns
Run a scan. Anything I should worry about?
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.
- 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.
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.
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.
Different companies, same question.
How do I move this page or platform forward without breaking what is already running?
Working on something on the web?
Send a few sentences. Email works too.