Projects

Working tools, not slide decks.

Five things I've built: email QA, a mortgage calculator widget, a soccer match simulator, legal document extraction, and my own automation tooling. Each one started as friction I kept noticing.

Application · Email
EasyEmailTest

Most teams find out an email lands in spam or renders broken after it has gone to the whole list. EasyEmailTest is a standalone QA platform: upload an email and get back a spam risk score, rendering previews, content recommendations, and compliance flags. It's live in beta (working through scenario tests). Billing, authentication, and email delivery are built in.

Status
Live in beta
Built with
FastAPI · Railway · Clerk · Mailgun · Stripe
Open the app →
How it works

Most organizations use email to communicate with customers, and mistakes are expensive. A marketing email that lands in spam, renders broken on mobile, or triggers compliance flags doesn't just fail to convert. It damages trust.

The problem is that most teams don't find out until after they've sent to their entire list. Testing tools exist, but they're typically buried inside enterprise platforms or require technical setup that marketing teams don't have time for.

EasyEmailTest is a standalone QA platform built for speed. Upload an email (raw file, HTML, or forwarded message) and get back an instant analysis: spam risk score, rendering previews across devices, content recommendations, and compliance flags. No accounts to configure, no integrations to maintain.

The platform handles the full stack: user authentication, email processing, AI-powered content analysis, and structured reporting. It's live in beta (working through scenario tests).

What it demonstrates: End-to-end product development: from identifying a real workflow gap to shipping a working system with billing, authentication, and email infrastructure.

Application · Mortgage · Lead capture
PitiWidget

Mortgage professionals need a calculator on their site that captures leads without funneling the home buyer somewhere else. PitiWidget is a drop-in widget any website can embed in minutes, with a dashboard to manage leads and customize the calculator. Each estimate draws on real data: the Freddie Mac survey rate, property tax by ZIP code, state-level homeowners insurance, PMI by down payment and credit band, and current FHA MIP. The core calculation engine has 100% test coverage, which is critical for financial accuracy.

Status
Deployed
Built with
Next.js · Vite · Turborepo · Supabase · Vercel
See the widget →
How it works

Mortgage professionals live and die by lead capture. Every website visitor who bounces without engaging is a lost opportunity. The standard solution, embedded calculators, should be simple, but most options require either expensive vendor contracts or engineering resources to integrate.

PitiWidget is a drop-in mortgage calculator that any website can embed in minutes. Copy a snippet, paste it into your site, and you have a fully functional calculator capturing leads. No developers required, no vendor negotiations, no integration projects.

The estimate runs on real inputs rather than national averages. A visitor enters home price, down payment, loan type and term, credit band, and ZIP code. The widget combines those with the Freddie Mac survey rate, the effective property-tax rate for that ZIP code, state-level homeowners insurance figures, a PMI rate table, and current FHA MIP.

Behind the simple embed is a complete system: a calculation engine built to financial-grade accuracy (100% test coverage on the core math), a dashboard for managing leads and customizing the widget's appearance, and infrastructure that scales without maintenance overhead.

The project started as a technical exploration of modern web architecture (monorepo tooling, type-safe APIs, edge deployment) and became a genuinely useful product for an underserved market.

What it demonstrates: Modern full-stack development with production-grade quality standards. The calculation engine's test coverage isn't a vanity metric. It's table stakes when you're handling financial math that affects real decisions.

Application · Futbol/Soccer · Data
Fútbol Time Machine

A soccer match simulation based on history. Face off international teams from any era, against each other or against themselves. Real match history and team statistics decide the outcome, not guesswork. Pick two teams and a year, and see the simulated result. No login, no paywall, no data science degree required.

Status
Live
Built with
Python · FastAPI · scikit-learn · Railway
Open the app →
How it works

Predictive models are usually locked away: buried in academic papers, hidden inside proprietary systems, or stuck in spreadsheets that only their creators can use. The gap between "interesting analysis" and "something people can actually interact with" is where most data projects die.

Fútbol Time Machine takes two models, a classic Elo rating system and an enhanced machine-learning model trained on 19 features (including FIFA rank, squad value, and recent form), and makes them explorable. Pick any two national teams, any year, and see the simulated outcome: win probability, expected goals, the historical context that shapes the result.

Neither model is novel. Elo systems are well-established in sports analytics. What's different is the delivery: a public-facing web application where anyone can play with scenarios, test their intuitions, and understand how the results are produced. No login, no paywall, no data science degree required.

Building it required the full ML deployment pipeline: data collection and cleaning, model training and validation, API design, frontend development, and infrastructure that stays up without babysitting.

What it demonstrates: Machine learning isn't useful until it's deployed. This project is proof of the complete journey: from raw historical data through trained model to interactive public application.

Internal tooling · AI agents
In-House Automation Tooling

Internal tools that take repetitive knowledge work off my plate, starting with a knowledge wiki that synthesizes documents and URLs into my existing notes. Claude does most of the development, and Goose, an open-source agent, handles the development operations. Guardrails keep each tool on its goal.

Status
In use · internal
How it works

My response was to minimize the overhead required to balance working, building, and staying up to date on technologies and their day-to-day applications. The "context switching" tax had me going in too many directions and keeping too much in my head.

I built internal tooling: systems that handle the repetitive knowledge work so I can focus on the decisions that actually require judgment.

One tool maintains a knowledge wiki: drop in a document or URL, and it synthesizes the content into my existing notes, handling the formatting, cross-referencing, and organization automatically.

These aren't chatbot wrappers. They're structured systems with guardrails that keep the goal in view and the work on course. Claude has done most of the development work. Goose, an open-source, general-purpose agent, handles all of the development operations. My worst grade ever was a D in computer science. Twenty years of project work taught me the part that matters here: set the goal, then hold the work to it.

What it demonstrates: I set the goal and the definition of done, and AI agents do the building while staying on course. That's project management applied to software.

The thread

What connects them.

These projects started the same way: I experienced or noticed friction. A workflow that took too long. A tool that should exist but didn't. A gap between "there has to be a better way," "what would it look like," and "someone actually built it."

Twenty years of enterprise consulting taught me to see those gaps. Building these products taught me to close them, not with slide decks or recommendations, but with working software that solves the problem today.

That's the offer: identify the friction, build the solution, ship it live.

Let's make something clear.

Working on a cross-functional mess, an ERP rollout, or an AI workflow that should be simpler than it is? Let's talk.

Get in touch →