Full-stack software developer in British Columbia. I build TypeScript products on Postgres: schema, API, UI, tests, and deploy. When a model is in the product, code decides what is allowed to stick.
React, Vite, Express, Drizzle, Postgres, and Stripe. Deployed on Fly in Toronto, with Supabase in Montreal. Municipal and climate datasets are resolved in code, and each claim stores its source. OpenAI drafts proposal sections for a person to review.
React, Express, Drizzle, and Postgres. A verification job keeps a claim only when the quoted sentence is on the page. Rejected claims go to a change log.
Python, FastAPI, and Docker. Fills AcroForm PDFs from JSON using field aliases. The model stays off unless an API key is set. Playground
Kiosk and staff dashboard in seven languages. The API is not in this repository. Demo
- Memori #231 — merged fix for multi-turn conversation ingestion on Azure OpenAI
- openapi-typescript #2537 and Trigger.dev #2680
TypeScript · React · Node.js · PostgreSQL · Drizzle · Zod · Supabase · Stripe · Docker · GitHub Actions · Vitest · Playwright
Python and FastAPI on PDF Autofiller. One React Native app, built with Expo.


