Personal Projects
These are projects I built in my own time — for family, for a Buddhist monastery, for a small repair shop, for my own analytical work, and to solve an immediate personal logistics problem. All five are real and running. None of them started as a business.
A full-stack genealogy web app built for my extended family. It renders an interactive family tree from a relational database, with support for multiple connected family groups, generation-aware layout, and deep profile pages for each person.
Features include multi-user authentication with role-based access (members vs. admins), a full admin dashboard for managing people, relationships, and pending submissions, photo uploads with storage, and a relationship pathfinder that computes and displays the exact connection between any two people in plain English.
The app exports to GEDCOM format (importable into Ancestry.com and FamilySearch), JSON database backup, and a ZIP of all profile photos. It also prints each family section to its own landscape page. Hosted privately for family access only.
A desktop analysis tool I built to score and rank federal government contractors as potential M&A targets. It ingests exports from GovWin IQ or SAM.gov, cross-references each company against the USASpending.gov API to pull historical federal obligation data, and runs a proprietary scoring model across five dimensions: contract scale, growth trajectory, distress signal, agency diversification, and pipeline health.
The tool also computes a Strategic Score based on facility clearances, staff security clearances, contract vehicles held, and set-aside certifications (8(a), SDVOSB, HUBZone). Output is a scored Excel workbook and a formatted HTML report with FY-by-FY obligation charts per company.
The v4 release added AI-generated outreach emails for each target using the OpenAI API, applying a specific tone algorithm, forbidden language rules, and revenue decline framing logic. Packaged as a standalone Mac and Windows app using PyInstaller, no Python install required for end users.
A digital display board built for the Mahamevnawa Buddhist Center of Washington DC. Runs on a Raspberry Pi 3 in portrait orientation, showing announcements, rotating Buddhist quotes, upcoming events, and QR codes on a 1080x1920 monitor in the center's main hall.
The backend is a Google Apps Script that serves content from Google Sheets as JSON. Volunteers manage everything, including adding announcements, updating quotes, and scheduling events, entirely through Google Sheets and Google Calendar. No one ever needs to touch the Pi or know what a terminal is.
The Pi runs MagicMirror² in server-only mode with Chromium in kiosk mode on top, managed by a systemd service for automatic restart on failure and reboot. Two custom modules were written: one for the Sheets-backed announcements and quotes, one for rotating QR codes.
The same center organized the logistics for the Walk for Peace finale at the Lincoln Memorial in February 2026 — 19 Buddhist monks, 2,300 miles, 108 days from Fort Worth, Texas to Washington DC. I handled the digital coordination for the final week.
A full inventory management system built for a sewing machine repair shop. Tracks spare parts stock (in and out), machine inventory, technician activity, and pricing, with a live dashboard for the owner. Built at zero cost, with no server, no database subscription, and no monthly bill.
The stack is deliberately minimal: plain HTML, CSS, and JavaScript on the frontend, Google Apps Script as the backend API, and Google Sheets as the database. Two roles, owner and technician, with different access levels. Session auth stored in localStorage with 12-hour expiry and tokens managed via Apps Script Properties Service.
The Parts Master table tracks current stock by computing Total In minus Total Out across the log sheets, with pre-calculated columns written on every transaction to keep reads fast. A 5-minute cache layer in Apps Script reduces Sheet API calls on repeat loads.
An automated flight price monitoring system that runs daily on a Digital Ocean server, searches multiple route and date combinations via the SerpApi Google Flights API, and delivers results every morning via email and a live HTML page.
Built to track a multi-booking itinerary across three origin airports (DTW, IAD, JFK) with different passenger counts per booking. The search runs 12 API calls per day, applies a custom routing filter that excludes specific airlines and layover airports by name and IATA code, then sorts remaining results by price and duration.
Output is two-channel: a plain-text email to all recipients delivered at 10am EST, and a regenerated HTML page served via Apache that anyone on the list can check at any time. The cron job, email sender, API client, and HTML generator are all in a single Python script with no external dependencies beyond requests and python-dotenv.