Projects

Systems I run at work, things I build on my own time, and where I started. Each card says what it does, what came out of it, and the stack. Nothing here is a mockup.

Built at work Day & Night Solar

The internal systems a commercial solar and energy-storage contractor runs its back office on. I'm the sole developer. The code is private, so these describe what each system does and how it's designed, with no company data. The lessons go deeper.

Operations platform data flow Accounting, banking, and project sources feed a pipeline into one warehouse. The accounting system stays authoritative; the warehouse and dashboards are derived, dated views that can never outrank it. Accounting system Bank activity Project & procurement docs Pipeline validate · fail closed Warehouse one store, one owner per fact Warehouse health Agent coordination Ownership board

The accounting system stays authoritative. Everything to its right is a derived, dated view — it can explain the truth, but it never gets to outrank the source.

QuickBooks import automation

Work

Generates QuickBooks Enterprise import files instead of hand-keying transactions. Looks up what already exists, checks for duplicates, enforces field limits, validates sources, and fails closed. A person always performs the final import.

Result Repetitive entry replaced by validated, reviewable files
PythonQuickBooks EnterpriseIIFpandas

Reconciliation engine

Work

Matches bank activity against accounting and project records using normalized identifiers and confidence scoring. Every record lands in an explicit state (confirmed, proposed, unmatched, or needs review) instead of being forced into a match.

Result Surfaced an unlinked payment on its first run
Pythonpandasrule-based matching

Operator dashboards

Work

A warehouse health view, an agent-coordination dashboard, and an ownership board that shows every open item's owner and how long it's been waiting. All generated from the same pipeline, so they can't drift from each other the way one-off dashboards do.

Result One generated family of operator pages, not scattered one-offs
PythonHTMLscheduled pipeline

Document intelligence

Work

Reads incoming PDFs, including scanned ones. Uses OCR only when native text isn't enough, extracts structured fields into a review step, preserves existing data, and fails loudly instead of treating an unreadable file as empty.

Result Document data flows into review instead of retyping
PythonPDF text extractionOCR

AI agent workflow layer

Work · evolving

Specialized Claude Code agents with task handoffs, recorded decisions, and verification rules. A release gate and a growing automated test suite check every change before it ships, not just the parts that touch money. Started bigger; I cut it down to what actually earned its coordination cost.

Result Fewer agents, explicit handoffs, evidence before claims
Claude CodeMCPPythonpytest

Cinemetrics, in detail

The part worth seeing, not just reading about. Three features built without a framework: a live countdown and cast carousel, a multi-source news feed, and a release tracker grouped by date confidence.

Cinemetrics Marvel page with a live countdown to Avengers: Doomsday and a scrolling cast carousel
Live countdown timer and a horizontally scrolling cast carousel, plus a second news feed scoped just to Marvel.
Cinemetrics News page aggregating live headlines from multiple outlets
Aggregates live RSS from multiple outlets with per-source attribution and real timestamps — refreshed on its own schedule.
Cinemetrics Games page tracking upcoming releases grouped by date confidence
Groups upcoming titles by how firm the release date actually is: Dated, Window, or Rumored — not just a flat list.

Personal projects

Things I build to learn, and keep using.

Reconciliation demo

Public proof-of-concept

The matching pattern from my work reconciliation engine, rebuilt from scratch on fake data so it's safe to publish: confidence-scored matching, duplicate detection, and four explicit states (confirmed, proposed, needs review, unmatched) instead of forcing a match. Synthetic transactions only — nothing here is the real code.

Result 39 tests passing, runnable by a stranger
Pythonpyteststdlib only

No-Whey

Live app

A dairy-ingredient checker that returns SAFE, UNSAFE, or REVIEW REQUIRED with a plain-language explanation. It catches what labels hide: casein in "non-dairy" products, milk-derived additives, and vague terms. Rules live in YAML so the logic stays auditable; product lookups enrich the result.

Result Live, with a real beta tester
FastAPIJavaScriptPWAYAMLOpenFoodFacts

Cinemetrics

SavvyCoders capstone · still maintained

A movie, TV, and gaming discovery app built from scratch with no framework: native ES modules, a hand-rolled component layer, client-side routing, and an Express + MongoDB API over TMDB data. I've kept shipping to it since graduation, including security hardening for untrusted API text.

Result 100+ commits, still shipping after graduation
JavaScriptNode.jsExpressMongoDBNavigoTMDB API

Bait & Switch

Personal project

A Midwest angler's map and field guide: 200+ curated lakes and rivers, a species catalog, a live overlay of Illinois lake-depth data from the state's ArcGIS service, and boat ramps and piers from OpenStreetMap with fallback across mirrors. No backend; state lives in the browser.

Result Live public geodata in a working map
ReactViteLeafletTailwindOpenStreetMap

Garden OS

Personal project

My garden as a data system: registries for areas, zones, and plants, observation and harvest logs, weather inputs, a generated daily hub, and a phone-friendly form backed by a small local server that writes observations back into the dataset.

Result Observe, decide, act, and check the outcome
PythonCSVHTMLOpen-Meteo

Local AI lab

Personal project

Image and language models running entirely on a 12 GB laptop GPU: LoRA training with checkpoint-by-checkpoint evaluation, a ComfyUI pipeline with face correction and 4x upscaling, and 30B-class language models on llama.cpp. Most of the work was measuring and fitting into memory, not picking models.

Result Measured model quality instead of guessing
ComfyUISDXLkohyaPyTorchllama.cppOllama

Building now

In progress

Watt in Tarnation

A hands-on solar lab in my garage for learning DC power, MPPT, sensing, and telemetry from first principles. Every component decision is logged with its datasheet math, and nothing gets bought until the measurements exist.

ESP32 · MicroPython · INA228 · solar PV

In progress

Solar compute demonstrator

The next step: putting a real computer workload behind a small solar + battery system to explore telemetry, load shedding, and energy-aware computing at miniature data-center scale.

Salvaged PC hardware · ESP32 · Python · SQLite

Data science foundations

16 end-to-end projects from the TripleTen program: churn, pricing, forecasting, NLP, and computer vision. Highlights: telecom churn with CatBoost (AUC-ROC 0.844) and a CNN that estimates age from photos. Code and notebooks are in the TripleTenProgram repo.

Show all 16 projects

Customer Retention Prediction (Telecom)

Predicted contract cancellations so marketing could reach at-risk customers before they churned.

AUC-ROC ≥ 0.75

Random Forest · Logistic Regression · CNN · TensorFlow

Car Price Prediction

Gradient-boosted model estimating used-car market value with a focus on prediction speed as well as accuracy.

Fast tuned GBM beat baseline linear

CatBoost · LightGBM · XGBoost · scikit-learn

Movie Review Sentiment

NLP pipeline flagging negative movie reviews for sentiment tracking.

Multi-model NLP with transformer features

NLTK · spaCy · transformers · LightGBM

Taxi Orders Forecasting

Hourly forecast of taxi demand to help optimize fleet scheduling.

RMSE ≤ 48 on hourly forecast

statsmodels · scikit-learn · LightGBM

Cell Phone Plan Recommender

Classification model that picks the best cell plan for a customer from usage patterns.

Accuracy ≥ 0.75

scikit-learn · Decision Tree · Random Forest · Logistic Regression

Bank Client Retention

Predicted which bank customers were likely to leave so retention could be targeted.

F1 ≥ 0.59

scikit-learn · Random Forest · Logistic Regression

Credit Scoring Analysis

Evaluated borrower metrics to predict the likelihood of loan default.

Identified drivers of default risk

Python · pandas

Oil Well Location Selection

Validated reserve volume models and calculated profit/risk trade-offs across candidate drilling regions.

Best risk-adjusted region selected

scikit-learn · Linear Regression · Bootstrap

Gold Recovery Modeling

Modeled the gold-mining recovery process to surface efficiency improvements.

Prototype model for industrial use

scikit-learn · Linear Regression · Decision Tree · Random Forest

Insurance Benefit Modeling

Identified similar customers and predicted insurance benefit amounts while preserving data privacy.

Privacy-aware similarity + benefit model

scikit-learn · KNN · seaborn

Vehicle Price Analysis

Investigated which features drive used-vehicle prices in classified ads.

Feature-importance report for pricing

pandas · NumPy · Matplotlib

Video Game Sales Hypothesis Testing

Tested hypotheses on user vs. critic scores to pick promising platforms and ad directions.

Statistically validated recommendations

pandas · SciPy · Matplotlib

Taxi Trips vs. Weather

Tested whether weather conditions meaningfully shift taxi trip duration.

Hypothesis test on real trip data

pandas · SciPy

Cell Plan Revenue Analysis

Analyzed client behavior across telecom packages to identify which plans generate the most revenue.

Revenue-driver segmentation

pandas · SciPy · Matplotlib

Music Preferences Across Cities

Compared listening habits between two cities to surface patterns in music preference.

First end-to-end EDA project

Python · pandas

Learning Coach Effectiveness Analysis

End-to-end DS workflow — cleaning, modeling, evaluation — focused on performance metrics and outcome prediction.

Full workflow, performance metrics reported

Python · scikit-learn · pandas