Projects

11 things I have built, featured first. Every card links to the code. In the terminal, projects <slug> prints the same.

LiDAR Grade Explorer

donesince Apr 2026

Plan the earthwork for a flat pad from an iPhone LiDAR scan.

Upload a .ply or .e57 point cloud, draw the rectangle where the carport, patio or foundation goes, and get cut/fill volumes, a fill-level slider, retaining-wall length and height along each edge with block counts and cost, and a before/after 3D view of the finished grade. Built to plan a carport on my own sloped lot.

  • Pure-NumPy voxel downsampling to an elevation heatmap; Three.js before/after terrain
  • Flags wall heights that need geogrid or an engineered design under typical MA code
  • Deliberately no framework: one Flask handler and a single-file frontend
  • Python
  • Flask
  • NumPy
  • pandas
  • Three.js
  • Vanilla JS

energy-monitor / panel-tool

activesince May 2026

Which CT clamp is the dryer? A web app that maps, calibrates and labels a whole-home energy meter.

Built around the CircuitSetup 6-channel ESP32 energy meter and Home Assistant. panel-tool covers what the upstream firmware doesn't: mapping each current transformer to a breaker, driving calibration, and printing a two-page wall reference for the panel. Ships an example ESPHome config for a 12-CT split-phase install.

  • Runs as a container on the homelab (energy.ops)
  • CLI calibration scripts for people who'd rather script it
  • Python
  • ESPHome
  • Home Assistant
  • Docker

daily-report

activesince Apr 2026

A morning brief printed on a thermal receipt printer at 5 AM.

A Python module of chart and layout primitives for an Epson TM-m30III receipt printer, plus a scheduled report: tasks for the day, calendar, finances from Tallied, weather, stocks, home energy from Home Assistant, server health, GitHub activity and a short AI summary.

  • KPI cards, bar charts and sparklines rendered in ESC/POS
  • Runs as a container on the homelab (report.ops)
  • Python
  • ESC/POS
  • Docker

Cookbook

activesince May 2025

Recipes as markdown, with a site, a grocery-list builder and printable PDFs.

Thirty-odd recipes organized by cooking method. A build script turns the markdown into a static site and a combined PDF; the site builds a grocery list with Whole Foods links from whichever recipes you pick. It's also what my weekly grocery-ordering agent reads.

  • Markdown
  • JavaScript
  • Python
  • Make

This site

activesince 2016

A terminal you can type into, that search engines and AI assistants can still read.

Nuxt 3 SSR with a Flask API, shipped as two containers from GitHub Actions. The 2016 original was static HTML; it became a Spring Boot app on Heroku in 2017, a Firebase site in 2019, and this in 2025. Everything you see is rendered from three JSON files (resume, projects, service catalog) that the API also serves.

  • Full content is server-rendered for crawlers; the terminal is progressive enhancement
  • Maintained mostly by AI agents working from docs/PRODUCT.md and a requirements ledger
  • Nuxt 3
  • Vue 3
  • TypeScript
  • Flask
  • Docker
  • GitHub Actions

Presentation Mode for Looker

donesince Jan 2026

A Chrome extension that makes Looker dashboards presentable on a big screen.

One click (or Ctrl+Shift+P) hides Looker's navigation, headers, filter bars and edit controls and expands the dashboard to fill the screen — for meetings, demos and wall displays. Settings sync across Chrome profiles.

  • JavaScript
  • Chrome extension

dotfiles

activesince Jan 2026

One-line shell setup for macOS, Linux and remote servers.

bash and zsh with shared config, Powerlevel10k or Starship prompts, sensible fallbacks over SSH.

  • Shell