I build automation that verifies things at a scale people can't check by hand.
Most recently that meant helping audit 13,000+ article URLs across five publications
after a Drupal-to-Arc XP migration β as part of that effort I built tooling that
found the pages that returned 200 with an empty body, the images whose
src didn't survive, and the URL slugs that quietly 500'd on an
unencoded ampersand.
I work in Node.js, React, Python, and Playwright, with a B.S. in Information Technology and an AWS Certified Developer β Associate credential. Before software I was a lead technician at a $5 million pharmacy, which is where I learned that a checklist only counts if something actually runs it.
Post-migration URL verification: reads a CSV of expected URLs, runs a fixed set of checks against every page, and writes a severity-ranked defect report a content team can filter in Excel. Zero-dependency CLI, a Playwright regression suite, CI that proves the checks fire against a deliberately broken fixture site, scheduled AWS Lambda packaging, and a live React report viewer.
A single-file Windows desktop launcher styled like a 90s skinned media player β the same aesthetic you are looking at right now. Scans a folder, reads the READMEs it finds, and makes a button for every program it can run. 2,300 lines of Python, standard library only, on purpose.
Standalone Python scrapers and data-cleaning scripts, each written for a real job: college athletics data, PDF and OCR extraction, publisher logo discovery, spreadsheet enrichment.
Wordle in the terminal, Conway's Game of Life on a canvas, and a Diceware passphrase generator. No packages, no build step β each one still runs in five years with whatever Node is current then.
Web Developer & QA Automation Engineer
Versatile Content LLC Β· July 2024βpresent
Full history and education are on LinkedIn, or download my resume as a PDF.
This page looks like 1995 and is built like 2026: one hand-written HTML file with
CSS custom properties and grid, the native Popover API for the Start menu,
Pointer Events for window dragging, and prefers-reduced-motion
respected throughout. No framework, no build step, no JavaScript libraries, no
trackers, no cookies.
It deploys from a public GitHub repo on every push, and every Monday it audits itself with my own site-migration-auditor β dead links, thin bodies, and broken images get reported automatically.
The games β Bricks, Minesweeper, and Solitaire β are original implementations written from scratch for this site: canvas physics, flood-fill reveals, and a full Klondike engine with drag-and-drop, in plain JavaScript with no libraries.
This machine has loaded this page 1 time.