Patrick McLemore
I build internal software and AI automation for a business that runs on it.
About
Twenty-two years inside one auto group. 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. I put a nightly data pipeline under it. On my own time I ship client sites and pipelines that run without me. I use Claude Code every day and I am good at it.
The work screens below are rebuilt with made-up data. Same layouts, no real store names, VINs, or numbers.
Work
Store dashboard
My store uses it every day, and it is built to roll out to all six stores in the group: login, user roles, per-tool access, and the standalone tools consolidated into one codebase and one database, a schema per tool. 322 commits.
Next.js 14, TypeScript, Supabase, Netlify
Nightly CRM feed
The CRM vendor drops a CSV every night. A standard-library Python watcher on a systemd timer picks it up every five minutes and loads Postgres. Three apps read from it. Sold vehicles now mark themselves hourly.
Python, systemd, AWS Lightsail, Supabase
Upfit tracker
Tracks aftermarket upfits on in-stock trucks. Sold status used to come from a spreadsheet somebody uploaded every morning. Now an hourly job matches in-stock VINs to CRM deals and marks them itself. 378 vehicles moved into the dashboard, old crons removed, public feed kept.
React, Supabase, Netlify scheduled functions
Demo mileage check-ins
Demo vehicles were piling up miles and nobody was watching. Now the dashboard 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. Getting the carrier approval for the texts took three tries.
Next.js, Supabase, Twilio, Resend
Sales versus inventory
What the store sells against what it stocks, by model and trim. The two DMS exports do not line up, so every VIN on both sides is decoded through the NHTSA API and joined on the same labels. Business rules live in one file. All the aggregation happens in Postgres.
Next.js, TypeScript, Supabase, NHTSA vPIC API
Employee parking map
Replaced a hand-kept spreadsheet. People request a spot or offer a trade, admins assign and swap, and when a spot opens the next person by seniority gets an email automatically and the chain keeps moving on its own.
React, Supabase, Netlify Functions, Resend
Listing comments bot
Reads used vehicles out of vAuto, writes the listing description through the Anthropic API from one shared prompt file, and posts it back. A one-page browser tool uses the same prompts for anyone who wants to do it by hand, so the two cannot drift.
Node, Anthropic API
Email blasts, and the bug that took months
Weekly HTML email for the stores. Every local preview looked right and every iPhone showed mixed widths. Read the delivered raw source instead: CSS ignores max-width on tables, so Apple Mail scales the whole message to the widest one. Wrote the layout standard every store builds from now.
HTML email, Resend for test sends
Own time
Turnkey Storefront
A storefront engine for small trades, productized from a paid client build. Five demo businesses live, each with server-validated booking and an admin page the owner runs. The storage adapter picks Supabase, Workers KV, or memory from config.
Cloudflare Workers, KV, Resend, Stripe
Private client storefront
Gated mobile app for a retail client, delivered and handed into his own accounts. A Cloudflare Worker holds every secret and is the only thing that talks to the database. Four security passes. Mozilla Observatory A+. Private by design, so no screenshot.
Cloudflare Workers, Supabase, Turnstile
- Bills app. Personal cash-flow app in daily use. Bank statement parser that checks every section against the printed totals before it imports. Packaged for the App Store as Thin Days.
- Did You Hear About. An AI-animated YouTube show and the 91-tool Python pipeline behind it. Episode one is public.
- Etsy and KDP. 38 Python tools, Etsy API v3, 39 live listings, paying customers.
How I work
- Test the real artifact, not the preview. The bug is in the thing that shipped.
- Every standard is an executable check. Prose is a wish.
- Delivery is done when the client owns it.