Proof

The receipts, running live

Small apps against publicly available problems, built on personal time to prove the patterns I write about hold up in production. The same discipline goes into the client work: find the decision, surface the constraint, ship the system.

By the numbers

Shipped

Screenshot of the High School Pathways planner showing credits earned, gen-ed coverage, and a savings calculator

Make the complex obvious

High School Pathways

Ogden School District’s degree-requirement PDF rebuilt as a living visual roadmap. Parents see credits earned, gaps to close, and the next decision they need to make.

What shipped

  • Static dashboard that translates a dense policy PDF into a status bar + course timeline
  • No login, no tracking — designed for a parent on a phone at the kitchen table
  • Same lens used in the consulting work: find the moment of decision, surface the constraint, make the next step obvious
Screenshot of the Economic Dashboard showing cycle-signal charts with recession bands and a yield-curve read

Live data, plain-language reads

Economic Dashboard

Live macro indicators from FRED — Buffett indicator, yield curve, employment, housing — with a running notebook of what each move means. Refreshed weekdays by a GitHub Action.

What shipped

  • FRED data pipeline: every indicator pulled, validated, and committed every weekday — runs in this repo
  • Dashboard with reference zones, date presets, and a raw/relative toggle
Screenshot of What the roles pay showing data-role base-salary panels and methodology callout

Compensation evidence

What the roles pay

Data-role salary panels from ai-jobs.net postings: base salary only, USD, global, with role classification, per-role outlier trim, sample-size gates, and explicit methodology notes.

What shipped

  • ai-jobs.net pipeline adapted into this repo: fetch, classify, trim, aggregate, and publish static data
  • Recharts dashboard for postings, median base trends, recent distributions, experience levels, remote share, country comparison, and summary table
  • Methodology guardrail: base salary from ai-jobs.net is kept separate from levels.fyi total compensation
Live · ai-jobs.net base salary source
Screenshot of the Browser GIF and Meme Maker tool for captioning images and converting screen recordings into platform-sized GIFs

No-upload media workflow

Browser GIF & Meme Maker

A browser-native meme and GIF maker: place any number of Impact captions on a photo, add a caption bar above it, or convert a short screen recording (or several, stitched into one) with trim, boomerang playback, filters, and target-size compression — without sending source files to a server.

What shipped

  • React island mounted inside Astro so the heavy ffmpeg workflow only loads on the tool page
  • Client-side conversion with file picker, drag-and-drop, clipboard paste, preview, and download
  • Platform-aware target-size mode that retries with lower width, FPS, and palette size when needed
  • A still-image path that skips ffmpeg entirely — canvas straight to PNG, so photo memes export instantly
  • Caption geometry as a tested pure module, sized in fractions of the frame so text holds its weight at any export size
  • Free-placement caption layers with drag-to-position, and keyboard nudging so every layer stays reachable without a pointer
  • Panel templates (two-panel reaction, before/after, 2x2, escalating list) shipped as zone layouts over the user’s own pictures — no third-party meme images hosted
  • Clip stitching: drop several screen recordings, GIFs and stills, trim or hold each one, and ffmpeg joins them into one movie (identical segment encodes, joined without a second encode) that the GIF path renders like any other video
Screenshot of the Ogden Home Finder with housing stats and a map of listings

Unattended AI scrape → gated catalogue

Ogden Home Finder

A living catalogue of Ogden-metro housing. Every morning an AI agent scrapes 2BR rentals and for-sale homes; code merges them into a price-tracked catalogue; a gate refuses any run that looks like corruption before it ships. The pipeline’s anatomy is in The Scrape Gate.

What shipped

  • Daily scrape on GitHub Actions from a fresh clone: the agent runs two deterministic scrapers (rent.com, Redfin) over a 10-mile circle, and every map pin is the one the listing site sends
  • A merge script that owns the keys, the append-only price history, and each listing’s active → missing → removed lifecycle
  • A pre-push validation gate (deleted listings, rewritten history, a >15% active-count drop, new duplicate keys), also run in CI and replayed over every scrape since June
  • Static page with stats, a map, a sortable table and per-listing price sparklines; Rent / Buy toggle over two catalogues

The receipts, in depth

Two standing records back this up: the validation evidence —29 series checked against source every weekday — and the build log, the full shipping cadence newest-first. If you’d rather not wait for the next entry,the writing is where the work-in-progress shows up first.