Skip to content

Projects

A mix of professional and personal builds. Some shipped, some in progress, all fair game to ask me about.

SOC 2 Compliance Center

In progress

An internal SOC 2 compliance platform — a lightweight Vanta/Drata alternative with a controls explorer, versioned evidence, and scheduled reviews.

  • #security
  • #compliance
  • #nextjs
  • #supabase

A full compliance management webapp built as a lightweight alternative to Vanta or Drata: a SOC 2 controls explorer organized by Trust Services Category, versioned evidence collection, an application inventory, a policy register, and scheduled compliance reviews with Slack reminders.

The interesting part is the evidence model. Evidence is append-only by design — corrections are new versions, withdrawals require a recorded reason, and nothing is ever rewritten or hard-deleted. That guarantee is enforced in the database itself (Row Level Security on every table, plus guard triggers that hold even for privileged roles), not just in the UI, so the audit trail can’t be sidestepped.

Built with Next.js, Supabase Postgres, and Google Workspace SSO (no password path exists, on purpose), deployed on Vercel. The framework layer — all 38 Trust Services Criteria, 18 control categories, and a 43-control library — is written to be re-deployable at any company, with the tenant-specific pieces documented and isolated. Deployed and in use for a real fintech SOC 2 program; the reminder cron and dashboard are the last pieces in flight.

Home Assistant w/ Visual AI

In progress

Home automation augmented with computer vision for smarter, context-aware routines.

  • #home-automation
  • #ai
  • #computer-vision

Details to come. Extending a Home Assistant setup with visual AI so the house can respond to what it actually sees, not just switches and schedules.

Family HQ

Live

A family dashboard for the wall TV and everyone's phones — calendar, dinner plans, school info, groceries, and carpool in one glance.

  • #nextjs
  • #supabase
  • #family
  • #home-automation

A household dashboard that runs on the kitchen wall TV and installs as a PWA on everyone’s phones: the shared Google family calendar, dinner plans with a suggestion box, the girls’ school lunch menu and events, a parent announcement banner, a 5-day weather strip, countdown chips for big events, and a carpool tracker.

My favorite hack: Apple removed server access to modern Reminders lists back in 2019, so grocery requests queue in the app and an iOS Shortcut on one family iPhone syncs them down into the shared Reminders list — triggered on a schedule and “when I arrive” at the grocery store.

The TV route ships zero client JavaScript and reloads itself every five minutes. External feeds (calendar ICS, the school website) cache with a last-known-good snapshot in the database, so the display never shows a blank card just because someone else’s site is down. Next.js + Supabase on the free tier, kept warm with a pg_cron ping.

MTG Collection Manager

Shipped

My Magic collection in one place — ManaBox imports, a filterable card browser, sealed-product tracking, and a Claude deck builder that only uses cards I actually own.

  • #nextjs
  • #ai
  • #mtg
  • #postgres

A personal app for a Magic: The Gathering collection that has outgrown shoeboxes. I scan cards with ManaBox, export a CSV to Google Drive, and pick it from the app with Google’s file picker. The import shows a diff against the current collection, and nothing is written until I’ve reviewed it. Scryfall supplies the card data, images, prices, and format legality.

The fun part is the deck builder. Pick Commander or Standard, a power level, and some strategy notes (or let Claude pick the commander), and the app narrows the collection to legal, on-identity cards ranked by EDHREC popularity. Claude then builds the deck with structured outputs and streams it back so the list fills in as you watch. Every card is checked against what I own before the deck is saved. Unowned cards are dropped, quantities are clamped, banned cards are removed, and each change is reported instead of made silently. Claude can also review a saved deck and suggest upgrades, split into swaps I can make from my own cards and a $25 shopping list.

There’s also tracking for sealed product (bundles, booster boxes, precons, Secret Lairs) with value over time, and a wish list that watches prices on cards I want to buy. Next.js on Vercel, Neon Postgres, and Google sign-in, with access limited to one email address.

dnd-scribe

Shipped

Records D&D sessions from Discord, transcribes them locally with whisper.cpp, and turns four hours of chaos into session notes with Claude.

  • #ai
  • #python
  • #dnd
  • #audio

A small Python pipeline for tabletop nights: record the Discord session on a Mac (BlackHole routes game audio to both my headphones and the recorder, with my mic mixed in), transcribe it locally with whisper.cpp — Metal-accelerated, so a 4-hour session transcribes in about 10–20 minutes — and then have Claude turn the transcript into a narrative recap plus structured DM notes.

Everything lands as plain markdown in a per-session folder: the raw audio, a timestamped transcript, and the notes. A campaign.md file with character names, NPCs, and a running plot summary gets fed in with each transcript, which is the difference between “Strahd” and “strod” in the output.

Recording and transcription are free and fully local; the notes step costs a dollar or two of API usage per session. Cheaper than a bard, and it never forgets what happened three sessions ago.

JobTracker

Shipped

A personal career-pipeline CRM where Claude Code doubles as the sourcing agent — finding roles, logging them, and tracking every stage.

  • #nextjs
  • #supabase
  • #ai
  • #productivity

A purpose-built CRM for managing a career pipeline: companies, applications, contacts, interactions, interviews, and follow-up tasks, with a stage flow (interested → applied → screening → interviewing → offer) whose history is written automatically by a database trigger — so the timeline is always accurate without anyone remembering to update it.

The twist is that Claude Code is a first-class user of the system. A CLI layer lets it act as a sourcing agent: ask it to “find senior roles at fintech companies” and it searches, evaluates fit, and logs promising postings directly into the pipeline — deduplicated, summarized, and tagged with why each one might be a match. Job descriptions pasted into the app get parsed into structured fields by the Claude API.

Next.js App Router + Supabase with row-level security, deployed on Vercel. Less a job board and more an experiment in what happens when your tools can do the legwork, not just store the results.

Set Construction for MTC

Ongoing

Building stage sets for the Milledgeville Theatre Collective — where the shop meets the stage.

  • #woodworking
  • #theatre
  • #community

Details to come. Hands-on set design and construction for the Milledgeville Theatre Collective, the local community theatre group I also serve as CFO / Treasurer.

Ideal Workbench

In progress

The pursuit of the perfect maker workbench — designed, built, and endlessly refined.

  • #woodworking
  • #making
  • #design

Details to come. An ongoing build to design and construct the ideal workbench for woodworking, 3D printing, and general tinkering.