At the store
I'm building a dashboard that my store uses extensively, with the expectation that it will soon roll out to the entire auto group of six stores. The screens below are rebuilt with made-up data. Same layouts, no real names, VINs, or numbers.

Store dashboard
My store uses it every day. Built to roll out to all six stores in the group. 322 commits.
One login for the store's tools, with user roles and per-tool access. Each tool moved in one at a time and got its own schema in one database.
Next.js 14, TypeScript, Supabase, Netlify

Demo mileage check-ins
Demo vehicles were piling up miles and nobody was watching.
Texts each driver on a schedule and asks for the odometer. They reply with a number and the list updates itself. Email with a one-click link is the fallback.
Twilio, approved for business texting on the third try. Supabase, Resend.

Upfit tracker
Sold status came from a spreadsheet somebody uploaded every morning, when they remembered.
Every hour it matches in-stock VINs to CRM deals and marks the sold ones itself. 378 vehicles moved into the dashboard without the public feed missing a beat.
React, Supabase, Netlify scheduled functions

Sales versus inventory
The two DMS exports don't line up. The sales one has no trim at all.
Decodes every VIN on both sides through the NHTSA API, then compares what sold against what's on the lot by model and trim. The rules live in one file and the math runs in Postgres.
Next.js, TypeScript, Supabase, NHTSA vPIC API

Employee parking map
A hand-kept spreadsheet. When a spot opened, whoever was next in line usually got skipped.
Request a spot or offer a trade. When a spot opens, the next person by seniority gets an email, and the chain keeps moving on its own.
React, Supabase, Netlify Functions, Resend
Nightly CRM feed
The CRM vendor drops a file every night. A small Python watcher on a server picks it up every five minutes and loads the database. Three tools read from it.
Python, systemd, AWS Lightsail, Supabase
Listing comments bot
Reads used vehicles out of vAuto, writes each listing description with Claude from one shared prompt file, and posts it back. A one-page tool uses the same prompts for anyone doing it by hand.
Node, Anthropic API
The email bug that took months
Every preview looked right and every iPhone showed the blasts at mixed widths. I read the delivered raw source instead and found it. Wrote the layout rule every store builds from now.
HTML email, four stores every week
Prototypes on the bench
A used-car pricing tool and a dealer reporting suite. Both built end to end, both waiting on live data feeds before anyone uses them.
Next.js, FastAPI, React
On my own time
Things I build at night and on weekends.

Turnkey Storefront
A storefront engine for small trades, turned into a product after I built it for a paying client.
Five demo businesses are live. Each one takes bookings that the server double-checks, and the owner runs it all from one admin page.
Cloudflare Workers, KV, Supabase, Resend, Stripe
Private client storefront
A gated mobile app for a retail client, delivered and handed over into his own accounts. Four security passes. Private by design, so no screenshot.
Cloudflare Workers, Supabase, Turnstile
Bills app
The cash-flow app I use every day. It reads bank statements and refuses to import one unless every section matches the printed totals. Packaged for the App Store as Thin Days.
React, Supabase, Capacitor
Did You Hear About
An AI-animated YouTube show and the Python pipeline behind it. Episode one is up.
Python, ffmpeg, ElevenLabs, Seedance
Etsy and KDP
Clipart, printable planners, and puzzle books, generated and listed by my own scripts. 39 live listings and paying customers.
Python, Etsy API, Gemini
How I work
- Test the real thing, not the preview. The bug is in what shipped.
- If a rule can't fail, it isn't a rule. Every standard gets a check.
- It isn't delivered until the person using it owns it.
About me
I started at Five Star Ford in 2004, right after I turned 20, answering sales calls in the BDC. In high school I'd spent hours in Microsoft Paint trying to make cool images, and at work that turned into custom desktop backgrounds for the people around me. Then Photoshop.
One day my boss couldn't get our website company to build a special the way he wanted it, so he asked me for a mockup to send them. He came back and said, "This is exactly what I want. I'm just going to send them yours." That was the next step, and it kept going like that for twenty years.
Early this year I hit the ceiling. I'd automated most of my own job with Excel and whatever else I could find, and I told my boss I needed more to do. That's about when I started using AI, and it fit right away. I know how things should look and how they should work. I know the pitfalls and the traps. What I never had was the code, and now I don't need to write it myself. I steer, I test, and I don't let it ship until it's right. I think the tools I've built are exceptional, and I'm excited about the side projects too. I'm probably running too many at once, but maybe one of them catches on.
Outside work
My favorite band is Tool, and I'm in a Tool tribute band. I run the live visuals. That's where my video work started: editing visuals for the shows, which I still do. It turned into real editing skill. I know what looks right and what doesn't, and I've learned to walk away from a cut, come back with fresh eyes, and fix what needs fixing.