patmchale.dev

Pat McHale

Web applications I designed, built and ran in production. Each one below is a working demo you can click through, with the features that took the most engineering called out.

Laravel · PHP · Livewire · Filament
Homepage of the Exchange classifieds site, showing the Browse Ads and Place an Ad buttons and a grid of Sales, Events and Auctions listings

The Exchange

Live demo

Website and back office for a weekly print classifieds paper covering Eastern Washington and North Idaho: online ads, the digital edition, editorial columns and an events calendar.

What I built

  • Online ad placement with card payments. A multi-step ad builder that authorizes the card at checkout and captures it only when staff approve the ad. Prices are recalculated on the server so they can't be tampered with.
  • Mobile reader for the print edition. A PDF.js reader with pinch and double-tap zoom, so the weekly paper is readable on a phone. Uploads are processed and archived in a background queue.
  • Print-to-web import pipeline. Staff upload the week's print classifieds as a spreadsheet plus a ZIP of photos, and queued jobs turn them into live listings.
  • Admin panel. Filament screens for articles, columns, display advertisers, the ad approval queue and the e-edition archive.
  • Search that understands categories. Meilisearch full-text search that also routes common terms straight to the right category, with search logging to find gaps.
  • Image handling for print sources. Uploads are resized on the server, and CMYK print files are converted to web color automatically.
922classified ads
576articles
243e-editions
460automated tests

Stack

  • Laravel 12
  • PHP 8.4
  • Filament 5
  • Livewire 4
  • Tailwind 4
  • MySQL 8
  • Meilisearch
  • PDF.js
Open the Exchange Payments run in demo mode. No card is charged.
Distribution map of Eastern Washington and North Idaho with 830 delivery locations plotted as colored markers, one color per route, beside a list of routes to toggle

Distribution

Live demo

Operations software for the last mile of print distribution: planning delivery routes, printing the paperwork that rides on each pallet, tracking copies dropped and returned at every stop, and paying the drivers who run the routes.

What I built

  • Weekly route sheets. Copy counts for each publication at every stop on every route, with returns recorded against each issue.
  • Pallet paperwork with QR pickup. Cover sheets calculate the press run and print pallet toppers with QR codes. Drivers scan to confirm they took the right bundles, through signed, rate-limited links with an undo.
  • Route pay calculator. Suggests a baseline rate for each route from its stop count, real road distance and drive time, and a fuel-price adjustment. Weekly and monthly pay reports reconcile against payroll.
  • Drag-and-drop route planning. A sandbox board for moving stops between routes. Publishing the plan to the live routes takes a database backup first.
  • Circulation audit figures. Quarterly audit numbers built from the same drop counts as the cover sheets, so the two always reconcile.
  • Driver API. Token-authenticated endpoints give each driver only their assigned routes and stops, and accept batched return counts and field reports.
1,059locations
33delivery routes
96,505return records
759automated tests

Stack

  • Laravel 13
  • PHP 8.4
  • Filament 5
  • Livewire 4
  • Tailwind 4
  • MySQL 8
  • Sanctum
  • Google Maps
  • OSRM routing
Open Distribution Staff sign-in required.