Patrick McLemore

I build internal software and AI automation for a business that runs on it.

Fort Worth, TX. Remote.
Resume GitHub LinkedIn pmclem02@yahoo.com

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 home with tool tiles

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

Vendor SFTP dropnightlyLightsail VMwatcher, every 5 minPostgresread by3 apps

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 table with sold status from CRM sync

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 vehicle mileage list with a text message check-in thread

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 by model and trim

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 with seniority cascade

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

Five Turnkey Storefront demo sites

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

How I work