Self-taught full-stack software engineer. I architect and ship production systems.
My journey started with Wordpress in 2019. I was working on Elementor websites for my office. I would choose the themes and build the projects out. I got into programming in 2022. I ran a Shopify store and wanted a button on the 404 page that would show a logged-in user their profile, and everyone else the home page. I tried everything me and GPT 3.5 could throw at it, until I decided to actually learn this with an HTML and CSS course. While reading around I saw someone mention edX and CS50, so I joined.
12 weeks, 12 lectures. I thought I'd be done in 2 weeks tops. I was wrong. Writing C was so hard to understand that I gave up. The next year, 2023, I came back and committed to finishing it, and it took me months. Then I did the Python version, and with Python being so close to English it was easy to pick up. They introduced us to Flask and Bootstrap, and while building with it I discovered Django. That supercharged me.
I just kept cycling through projects, building more and more complex things. Managing authentication between a Django backend and a React SPA was one of the hardest things back then. I discovered React with no idea how to use it. I once spent a full day on a single component that looked like the Shopify payment cards we accept. Trivial to me now, but I couldn't get it to work then.
I got frustrated with how long create-react-app took, so I found Vite. Then React Router, then TanStack Router. The whole thing has been self-taught the entire way: hit a problem, find the tool that solves it.
I discovered AI-assisted coding around the start of 2024, back when it was mostly tab-complete but it gave me a good boost. I was mostly in Python and Django then; I mostly work in TypeScript now.
In March 2025, my wife asked why I didn't build an AI app and it had never occurred to me that I could. Streaming responses over plain request/response felt way too slow, which led me to Server-Sent Events. Tool calling was brand new, so I built what I think was one of the first chat-to-shop experiences: the model would call tools to pull live FedEx and Canada Post shipping rates from a postal code and order, render selectable cards right in the chat, then return a Stripe hosted checkout URL in a Pay Now button. After payment it redirected back into the same chat, auto-confirmed the order, and notified the user.
I really learned to build software by making one thing over and over again: my e-commerce platform, BDMCentral, a Google Ads service for local businesses, 2To6X, and a civic engagement platform, Codkaaga. Along the way I've built websites, managed servers, and shipped on serverless platforms.
Some of that comes from working on open-source projects I use daily, and the rest from tooling I've built for my own workflows (see below).
git_ui: show total diff stats in the git panel.fix(create-vite): pass the React framework through to the TanStack CLI.fix(create): strip demo/example files when users opt out.Languages: TypeScript, JavaScript, Python
Frameworks: Effect, React 19, TanStack (Start / Router / Query), Astro, Node / Bun, Django / Flask
Data & infra: PostgreSQL, Drizzle ORM, SQLite / D1, Redis, Cloudflare Workers, Docker
Email Me
Open to full-time, contract, and freelance work.