Production work and the tools around it.

Media production systems first, then small focused web tools, then the earlier media and brand work that shaped them.

Media Production

Media production systems

Podcast, caption, clip, analytics, and workflow tools built from real production problems.

Stylized podcast pipeline cover: an audio waveform feeding into four published clip cards labeled CLIP_01 through CLIP_04 — concept art for the transcript-to-clips render architecture

High Functioning Podcast

Help produce and engineer the show — booking, editing, captioning, packaging — and built the transcript-to-clips render pipeline that's let a two-person team support 80+ episodes and 304K+ lifetime views (and counting).

CUTROOM concept cover: a multicam editing timeline with HOST, GUEST, and WIDE camera lanes, cut markers, and an audio waveform — a local podcast editing cockpit

CUTROOM

A local, AI-assisted multicam podcast editor I'm building. A Python audio engine reads the separate host/guest tracks and builds an editable cut-decision timeline; an AI recipe and multicam review refine it; then it renders rough-cuts and captioned vertical reels with FFmpeg — all on your machine, no cloud upload.

Read the build → Prototype · in development · local app
A dark video frame with a clean closed-caption overlay reading 'The journey isn't about the destination. It's about who you become along the way.' with the word 'journey' highlighted in cyan to suggest active word timing

StrictSub

Upload a reel and get back accurate, broadcast-style subtitles as SRT or EDL — ready to drop into any timeline or social platform. The accessibility step most teams skip, automated.

What it does Show less
  • Upload & transcribe — drop in a reel and the audio is transcribed in the browser.
  • Subtitle export — clean SRT for any social platform, or EDL for non-linear editors.
  • Word-level timing — captions track the spoken word so they land cleanly on cuts.
  • Made for accessibility — the closing step in a real publish-ready short, built so a one-person team can actually do it.

Closes the accessibility gap that kills short-form workflows: every reel gets accurate, formatted captions without a manual transcript pass. Live tool, ready to use.

Three platform aspect-ratio frames — 9:16, 1:1, and 16:9 — each with a dashed safe-area inset and a green PASS badge, showing how Crop Check validates layouts across Reels, Instagram, and YouTube

Crop Check QA Utility

Platform-safe area preview system with deterministic screenshot checks to catch layout breakage before publishing.

Source private
Genera-Reels desktop interface showing a campaign builder, validated project payload, selected reel templates, and an active render queue

Genera-Reels Engine

Template-based short-form video rendering tool that consumes payload inputs and emits batch reels with repeatable output quality. Now packaged as a standalone Tauri desktop app — a Rust shell and Python backend that drive Remotion — so anyone can run it without a terminal or browser tab.

Private Repo
HF Reels Wizard interface — a four-step wizard (Trend, Match, Reels, Export) with the Match step active, a copy-ready prompt, a pasted matches JSON, and matched episodes ranked by fit score

HF Reels Wizard

A no-API, copy-paste wizard that turns filmed High Functioning episodes into short-form reels. A four-step flow — trend, match, reels, export — hands a chatbot the right context at each step: it matches on a small episode index first, then loads the full transcript only for the picks, so a prompt never blows past the limit.

Private Repo
YouTube Reel Prompt Foundry interface — a pipeline sidebar (Ingest, Transcript, Reel candidates, Prompts and export) and a list of auto-detected reel candidates with timecodes, transcript snippets, and approve buttons, plus an export bar for schedule.csv, .ics, YouTube sidecars, and an FFmpeg render script

YouTube Reel Prompt Foundry

A Tauri + Python desktop app that turns long-form video — town meetings, lectures, sermons, podcasts — into a batch of captioned vertical reels, with no paid AI keys.

What it does Show less
  • Local transcript chunking — auto-detects topic shifts and silence gaps to propose 25–180s reel candidates, or hands a ranking prompt to any chatbot.
  • Prompt foundry — emits perfectly formatted content-brief and thumbnail prompts; you paste the response back and it stores against the right reel.
  • Real exports — a posting schedule (CSV for Metricool/Buffer, ICS for calendars), YouTube title/description/tag sidecars, and an FFmpeg script that cuts every reel to 9:16 with burnt-in captions.
  • No API keys — the mechanical work runs on your machine; you bring whatever chatbot you already have.

Tauri · Rust · Python · React · TypeScript · FFmpeg

Personal Project
MediaDeck Local desktop app interface — a dark-themed media library showing project Atlas with categories in the sidebar (Dashboard, Projects, Audio, Graphics, Sequences, Templates), a 4x3 grid of media thumbnails with filenames and dates, and cyan accents on the active state

MediaDeck Local

An internal media tool for companies to make their own reels and short-form content automatically — runs in any browser, no install, drag-in assets and get publish-ready output without opening a timeline.

What it does Show less
  • Internal library — clips, audio, graphics, sequences, and templates organized by project so a team doesn't dig through Drive.
  • Browser-based — anyone in the company can spin it up; no Premiere license, no plugin install, no IT ticket.
  • Automated reels — pick a template, drop in the brand assets, render to social-ready output.
  • Local-first — your media stays on your machine, not in a third-party cloud.

Built as a Tauri desktop app so it feels native but ships small, runs offline, and respects whatever security posture your company already has. Personal project.

Tauri · React · TypeScript

Personal Project
A frame from a Britten Woodworking social reel — a hand-crafted wood piece with the brand's title-card styling

Britten Woodworking Reels

The Remotion engine behind Britten Woodworking's short-form social videos — branded title cards, lower-thirds, photo carousels, captions, and end cards defined as code, so a full set of on-brand reels re-renders from one command when the product or copy changes.

Private Repo
High Functioning Analytics OS dashboard showing podcast KPIs, an audience-retention curve, production brief notes, and episode-level actions

High Functioning Analytics OS

Private, meeting-ready analytics dashboard for the High Functioning / Good Feels team — a decision-ready brief for the host and a deep, verifiable view for production: KPIs, platform breakdowns, trend watch, and keyword search across all 80 episode transcripts. React + Recharts, fully local (no backend, no live APIs).

Private · internal dashboard
Web Tools

Useful web tools

Small, focused tools built around clear user problems, search intent, and practical decisions.

TypeScript: analyzeQuotes pure function computing bid spread percentage, scope-gap detection, and deterministic risk flags across contractor quotes

QuoteCheck Home

Helps homeowners compare contractor bids side by side, spot scope items one quote quietly left out, and generate the exact follow-up questions to ask each contractor before signing.

What it does Show less
  • Side-by-side comparison — line up 2 to 5 contractors' totals, deposits, timelines, and scope in one view.
  • Scope-gap detection — flags line items present in one bid but missing or unclear in another (labor, materials, permits, cleanup, warranty).
  • Risk flags — surfaces high deposits, very short timelines, wide-spread outliers, and unspecified material quality.
  • Question generator — produces a per-contractor list of clarifying questions from the gaps it finds.
  • Printable report — a clean print layout to take into a meeting.

Deliberately no AI — every flag is a pure function of the structured input, so a homeowner can trust the arithmetic. Runs entirely client-side; nothing leaves the browser. Ships with security headers, an origin-locked API, and a privacy page.

Vite · React 19 · TypeScript · Zustand · Zod · Vercel

JavaScript: buildLetter function summing deposit deductions, computing the refund due, and exporting through the browser print engine

DepositLetter

Helps self-managing landlords generate a professional, itemized security- deposit deduction letter with the math done correctly — the #1 way landlords lose small-claims disputes is getting this wrong.

What it does Show less
  • Itemized deductions — a dynamic repeater for each damage line item.
  • Live balance math — total deducted and refund due update as you type.
  • Print to PDF — uses the browser's native print engine via @media print, so there's zero PDF-library weight.
  • Privacy by design — letter contents never leave the browser; no accounts, no database.

A deliberately zero-backend build with edge security headers, a strict CSP, and a published privacy policy. Live at depositletter.com.

React 19 · Vite · @media print · Vercel

TypeScript: calculateBreakEven pure function computing profit per item, break-even units, and required sales per day and hour for an artist alley table

Artist Alley Break-Even Calculator

Tells anime convention vendors how many prints, charms, stickers, or commissions they need to sell to cover their table before they profit — with live sales-per-day and sales-per-hour targets.

What it figures out Show less
  • Break-even units — fixed costs divided by profit per item, rounded up.
  • Pace targets — the sales per day and per hour that target requires.
  • Product presets — Sticker, Charm, Print, and Commission, each editable after selection.
  • Reality checks — warns on zero/negative margin and on an unrealistic sales pace.
  • Share & reuse — Copy Summary button, large screenshot-friendly result card, and localStorage persistence.

Mobile-first one-page dashboard with a sticky desktop result panel. All math is client-side with divide-by-zero guards — no backend, no account, no tracking.

Vite · React · TypeScript · Tailwind CSS · Vercel

TypeScript: calculateHelix pure function computing effective grade, curve drag, and a plain-English build-risk verdict across model railroad scales

Will My Helix Work?

A model railroad helix risk checker. It walks five risk dimensions for any helix design in O, S, HO, N, or Z scale and returns a plain-English verdict — from Looks Good to High Risk — before you cut wood.

What it checks Show less
  • Grade — rise per turn ÷ track length per turn, as a percentage.
  • Curve drag — added resistance from constant turning, using John Allen's scale-specific rule of thumb (32/R for HO, scaled per gauge).
  • Clearance — the vertical stack of track, roadbed, deck, open air, and safety margin between levels.
  • Footprint — outer diameter of the helix and the aisle space needed to reach inside for derailments.
  • Train type — heavy steam, long passenger, and small switchers behave differently from generic freight on the same grade.

All math runs in the browser — no server, no database, no account. Inputs serialize into the URL, so a design shares with a single link. Verdict thresholds are calibrated against published model railroad guidance, and the site ships with a glossary, FAQ, gear checklist, and three worked example builds.

Next.js 14 App Router · React · TypeScript · Tailwind CSS · Vercel

Live Site ↗ Private Repo
TypeScript: calcVoltageDrop pure function computing percentage voltage drop over the full copper path and returning a Safe / Acceptable / Borderline / Risky verdict

DCC Bus & Feeder Calculator

A voltage-drop calculator for model railroaders. Type your scale, bus wire, and feeder plan and get a Safe / Acceptable / Borderline / Risky verdict before you solder a single rail. Built after a weekend of chasing stalls that turned out to be an undersized 16 AWG bus.

What it does Show less
  • Real voltage-drop math — standard copper AWG resistance over the full out-and-back electrical path, across eleven inputs.
  • Risk verdict — a Safe / Acceptable / Borderline / Risky stamp with a 0–12% drop meter showing where you land.
  • Live schematic — thickens whichever leg, bus or feeder, is dominating the drop, so the fix advice maps onto a picture.
  • Shareable — every input encodes into the URL, so a whole configuration drops into a forum reply as one link.
  • Sourced FAQ — every answer cites NMRA TN-9, DCC Wiki, or Wiring for DCC, with FAQ schema markup for rich results.

Per-scale SEO pages (N, HO, O, G) share one JS bundle for instant navigation, and it prints to a clean black-and-white workbench worksheet. Client-side only — no backend, no accounts, no analytics.

Vite · React · TypeScript · SEO · Vercel

TypeScript: planSupplies function computing per-color paint volume, cost, and a total from a project's mini count

Paint Supply Planner

Detects the main colors in a reference image, then builds a miniature- painting supply list — how much of each paint you need and what it costs — before you buy.

What it does Show less
  • Color detection — upload a photo, screenshot, or reference and it pulls out the main colors.
  • Editable palette — adjust, add, or remove colors before the list is built; you stay in control.
  • Supply math — paint volume and cost per color scaled to how many minis you're painting.
  • Export — a clean total and CSV you can take to the store.

A calm, warm-paper tool feel. Runs entirely client-side with your inputs saved in the browser — no account, no backend.

Vite · React · TypeScript · localStorage · Vercel

Node Express code: a route that streams a comic page from a CBZ archive, with notes on CBR conversion, PDF rendering, and thumbnailing

Self-Hosted Comic & Book Reader

A self-hosted reading library for comics, manga, PDFs, and EPUBs that runs on your own machine and streams to any browser on your home network — your files never leave your device.

What it does Show less
  • One library, many formats — CBR/CBZ comics, image folders, PDFs, and EPUB books in one place.
  • Comic converter — turns .cbr and image-folder series into standard CBZ automatically.
  • Real reader UX — 3D page-flip, pinch-zoom, right-to-left manga mode, bookmarks, and resume-where-you-left-off.
  • Read anywhere on your LAN — open it on your phone over WiFi or a private Tailscale tailnet; installable as an offline PWA.
  • Hardened — security headers, optional shared-secret token, rate-limited metadata proxy, generic error messages.

Express server that indexes your files, streams comic pages from CBZ, renders PDF pages, and generates thumbnails. No cloud, no accounts, no database. A personal project — runs locally, so there's no public site.

Node.js · Express · PWA · sharp · pdf-to-img

A Twitch scene mockup: large STARTING SOON wordmark with the crashdontfall channel name, plus a follower-alert preview in the corner — the kind of broadcast-ready output the Remotion asset pack renders

Twitch Stream Asset Pack

A Remotion render pipeline that programmatically generates a full broadcast kit for a Twitch channel — starting-soon and intermission scenes, animated follower / sub / raid alerts, a stinger transition, and info panels.

What it renders Show less
  • Scenes — Starting Soon, Intermission, and Offline screens at 1080p.
  • Alerts — follower, donation, sub, and raid animations exported with an alpha channel (VP9 / WebM) so they layer cleanly in OBS.
  • Stinger transition — a branded wipe between scenes.
  • Panels — About, Schedule, Socials, Donate, and Rules stills rendered to PNG.

Every asset is defined as code, so the whole pack re-renders on a single command when the brand changes. Built for the "crashdontfall" stream as a personal project — no public site, it outputs video and image files.

Remotion · React · TypeScript

Personal Project
Gut Check concept cover: a stack of swipe cards with a true/false claim and green-check / red-x swipe affordances and a countdown ring

Gut Check

A fast, mobile-first swipe-trivia game — read a claim, spot the scam, and swipe before the timer runs out. Local profiles, streaks, and achievements, all in the browser with no backend. React, built for fun.

Local build
Goblin Draw Poker concept cover: five playing cards — Ace, King, Queen, Jack, Ten — fanned across a dark background

Goblin Draw Poker

A retro tavern-themed video-poker mini-game — hold and draw for the best hand, with confetti payouts and a hand-evaluation test suite. React, built for fun.

Local build
TypeScript code: normalizeCards function parsing MTG deck list text into typed Card objects

Keep7 Probability Simulator

Browser-based combinatorial analysis tool for opening-hand consistency and mulligan decision support.

TypeScript reducer code: gameReducer with PLAYER_HIT case, state guards, and bust detection

Blackjack State Engine

Reducer-driven game state machine built to enforce explicit transition rules and avoid hidden state drift bugs.

Source private
Earlier Work

Older media and brand work

Drone, real estate, brand, and client work that shaped the production skills behind the current media systems.

Aerial real-estate photograph of a contemporary New England home with white trim, gray shingle roof, and a double garage on a wooded lot — captured for Britten Aerial Services

Britten Aerial Services

FAA-licensed drone photography and real-estate media for clients in Massachusetts — aerial stills, listing videos, and the full Next.js site that delivers them. Fast turnaround, repeatable workflow.

Aerial drone photo of a New England home with a gray shingle roof and double garage on a wooded autumn lot Aerial drone photo of a Massachusetts property captured for a real-estate listing Aerial drone photo of a commercial solar installation captured for marketing and site documentation
What I deliver Show less
  • Aerial real-estate photography — listing stills shot with an FAA-licensed drone, color-corrected and listing-ready the same day.
  • Development & progress media — repeat-visit aerials for new construction, solar installs, and large-lot land surveys.
  • Listing video — short-form aerial tours edited for MLS and social distribution.
  • The full client site — a Next.js 14 site (showreel, portfolio, contact) built around the production work so leads land directly on the deliverables.

Real production credit, real clients, real turnaround. Based in Peabody, MA — built for the brokers and developers who need media yesterday, not next week.

FAA Part 107 · Next.js 14 · Vercel

Need someone to run, fix, or scale your media production?