Michael Smith
things I’ve been a part of
Full-stack developer in Johnson City, Tennessee. Web apps, kiosks, hardware that has to work with strangers standing in front of it, and the occasional thing that is one file on purpose. Every one of these started as a problem somebody actually had.
the pad
-
Semantic Job Matching
Matching people to jobs on meaning
Problem Keyword matching reads a gap in a work history as a lack of skill, and can’t see that experience from another industry transfers.
Solution Compatibility scored on meaning, with travel time treated as the real constraint it is. I built the front end and the LMS integration.
DjangopgvectorCeleryAWS
-
PCS Job Tracking
Field-service scheduling & job history
Problem A crew running real jobs out of a truck on paper, texts, and memory — recurring work slips and nothing is written down.
Solution Customers, locations, recurring job series, par levels and site photos in one place, deployed on every push to
main.Next.jsPrismaPostgresDocker
-
Touchless Gesture Control
Hands-free kiosk control
Problem A public kiosk is a screen hundreds of strangers press in a day, and handing out a controller just moves the problem.
Solution A webcam turns the visitor’s hand into the cursor — and works out whose hand counts when people wander through frame.
PythonMediaPipeOpenCVWin32
-
VTAP REST API
Tap your phone, take your itinerary
Problem Visitors built an itinerary at the kiosk and walked off without it, because almost nobody actually stops to scan a QR code.
Solution One tap hands over that visitor’s own itinerary — a Flask service owns the serial port so the kiosk just makes an HTTP call.
PythonFlaskpySerial
-
MTG Stash
Magic: The Gathering collection manager
Problem Thousands of cards across boxes and binders, and no honest answer to what any of it is worth or whether a trade is fair.
Solution Import the collection, price it against Scryfall every day, chart it over time, and catch trade conflicts before they bite.
Next.jsFirestoreCloud Functions
-
MTG Proxy Price Optimizer
Chrome extension — buy it or proxy it
Problem Proxy printing is priced in bulk tiers, so whether a card is worth proxying depends on how many others you’re proxying.
Solution Read the decklist off the page and settle the circular part by iterating until the split stops changing.
TypeScriptReactChrome MV3
-
Cooking Mode
WordPress plugin — 105 lines
Problem The tablet on the counter sleeps between step four and step five, and your hands are covered in flour.
Solution A button on recipe pages that holds a screen wake lock, loaded only on the paths that need it.
PHPWordPressWake Lock API
-
Scryfall Set Exporter
Python CLI — 119 lines, zero dependencies
Problem Getting a plain list of every card in a set means paging through JSON by hand or installing a library to do it for you.
Solution One stdlib-only file. Hand it a set code, get a text file. Nothing to install, nothing to rot.
Pythonstdlib onlyScryfall API
-
Daily Planner
A kanban board that is one file
Problem Every planner app wants an account, a subscription, and a sync service to manage three columns of cards.
Solution 261 lines of HTML that open straight off disk and remember everything locally. No server, no login, no build.
HTMLCSSVanilla JS
-
↑ click any card for
the whole story.