I build production TypeScript applications: React on the frontend, Node.js and PHP services behind it. I work AI-first with Claude Code and ChatGPT, and I've spent 7+ years owning features from design through production. I'm the de facto technical lead for a team of six.
01
An AI-powered job search tool built on Claude, using tool use and structured output. I built the full stack: a Next.js frontend, a FastAPI backend, a PostgreSQL data layer, and a direct Anthropic API integration with agentic loops and prompt caching. Deployed on Vercel and Railway.
- Next.js
- TypeScript
- Python
- FastAPI
- PostgreSQL
- Anthropic API
- Clerk
- Vercel
- Railway
A draft-day companion for fantasy baseball leagues featuring player rankings, AI-powered recommendations, and real-time draft board tracking.
- React
- Vite
- Google Sheets API
- Supabase
- Anthropic API
02
The original request was a single line: see if we can use Canva. I scoped it by studying what Canva's API could provide and how it could tie into our product, then built the integration end to end: a PHP API layer with OAuth and data mapping, a MySQL schema, and a React and TypeScript interface. Real estate agents can now create and export custom ad creatives without leaving the platform's checkout flow, and it's already generating revenue, including new revenue.
- PHP
- TypeScript
- React
- MySQL
- OAuth
Our Stripe integration was built on a 2014 API version, and customers could only store a single card. I owned the upgrade end to end, doing all of the development myself with help only on testing, so customers can now store and manage multiple payment methods while every existing saved card keeps working. That meant webhook endpoints for subscription and dispute lifecycle events, a schema redesign for payment method management, and new React billing modals and subscription flows. It gives clients direct control over their billing and reduces manual overhead.
- PHP
- React
- TypeScript
- Stripe API
- MySQL
03
I treat AI tooling as part of the engineering environment, configured and versioned like the rest of the codebase. I led the build of a shared Claude Code setup for my team, with teammates contributing to the hooks and skills, so every engineer starts from the same standards and the same guardrails.
- Custom hooks enforce guardrails automatically. They restrict which paths the agent can modify and require that work runs in Docker, so mistakes stay contained.
- Reviews every pull request against our conventions, and can pull in the ticket for context when one is provided, so human reviewers start from a first pass.
- Generates a test plan from each code change, and can pull in the ticket for context when one is provided, giving QA a starting point.
- Written, versioned project rules that load automatically on every task, so generated code matches what the team would write.