Work

Client work and my own products. Every one of these is running, and most of them you can open in a new tab and poke at. Each entry says plainly what it does, and then what is actually under it.

LocumHQ

Client work

Locum placement platform for Ontario physicians

Doctors looking for short-term work and clinics looking to fill shifts, matched automatically instead of by phone tag. Clinics post, the site scores who fits, and the right doctors get emailed overnight.

Under the hood

CodeIgniter 4 app. Percentage-based matching engine over specialty, region and availability, a nightly sweep that emails new matches, Twilio phone verification, five role types with separate permissions, paid ad promotions, and a migration runner with a checksum ledger so staging and production cannot drift.

Built to a written client spec, with a 136-item security review completed before launch.

  • CodeIgniter 4
  • MySQL
  • Twilio
  • cPanel deploy
locumhq.ca

Neighbourhood Now

My own product

Civic reporting map for Ottawa residents

Residents report what they see in their neighbourhood, from a blocked sidewalk to a broken light, and it lands on a map alongside live police incident data for the city.

Under the hood

Next.js and Supabase with row level security. Daily ingestion of Ottawa Police open data on a scheduled job, photo uploads that run face blurring and moderation and fail closed when either is unavailable, bilingual EN and FR throughout, and an email notification program.

Running in production with live city open data pulled daily.

  • Next.js
  • Supabase
  • Vercel
  • next-intl
neighbourhoodnow.ca

Always-on assistant

My own product

An agent that runs whether my laptop is open or not

An assistant living on a server instead of a laptop. It answers over Telegram, runs jobs on a schedule overnight, and keeps working when every machine in the house is off. This is the thing most people mean when they say AI agent and have never actually seen.

Under the hood

A small Linux VPS running the agent gateway under systemd with a single-writer guarantee, eight scheduled agents, a Telegram relay, encrypted off-site backups, a private-network-only admin surface, and a persistent memory store that survives model and vendor changes.

Eight scheduled jobs running unattended since August 2026.

  • Ubuntu
  • systemd
  • Tailscale
  • restic

What's Ottawa On

Skunkworks

Event listings nobody else aggregates

Ottawa events pulled from venue sites and social posts that never make it to the big listing sites, cleaned up and de-duplicated into one place.

Under the hood

A language model extraction pipeline over a few dozen sources with fuzzy de-duplication tuned on an empty similarity band rather than a guessed threshold, because a wrong merge silently deletes a real event.

1,600+ events processed. Runs on a weekly scrape.

  • Python
  • LLM extraction
  • SQLite

Painted Perches

Community art project

Community birdhouse map

People put up painted birdhouses around the city and pin them to a shared map. Small, and people actually use it.

Under the hood

Next.js and Supabase with a Leaflet map and user submissions.

Live, with a public submission map.

  • Next.js
  • Supabase
  • Leaflet
paintedperches.ca

Want something like this for your business?

Tell me what eats your week. If I can build something that helps, I will tell you what it costs.

Book a call