Patrick McLemore

Patrick McLemore

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

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

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

Store dashboard

Where it stands

My store uses it every day. Built to roll out to all six stores in the group. 322 commits.

What it does

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.

Built with

Next.js 14, TypeScript, Supabase, Netlify

Demo vehicle list next to a text message thread asking for mileage

Demo mileage check-ins

The problem

Demo vehicles were piling up miles and nobody was watching.

What it does

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.

Built with

Twilio, approved for business texting on the third try. Supabase, Resend.

Upfit tracker table with sold status synced from the CRM

Upfit tracker

The problem

Sold status came from a spreadsheet somebody uploaded every morning, when they remembered.

What it does

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.

Built with

React, Supabase, Netlify scheduled functions

Sales versus inventory report broken down by model and trim

Sales versus inventory

The problem

The two DMS exports don't line up. The sales one has no trim at all.

What it does

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.

Built with

Next.js, TypeScript, Supabase, NHTSA vPIC API

Employee parking map with open spots and a seniority queue

Employee parking map

The problem

A hand-kept spreadsheet. When a spot opened, whoever was next in line usually got skipped.

What it does

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.

Built with

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.

Five storefront demo sites: Christmas lights, food truck, lawn care, CBD shop, barbershop

Turnkey Storefront

What it is

A storefront engine for small trades, turned into a product after I built it for a paying client.

What it does

Five demo businesses are live. Each one takes bookings that the server double-checks, and the owner runs it all from one admin page.

Built with

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

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.