projects

Things I've built recently, from personal projects to client work.

Port Observatory MTL

Real-time maritime data platform for the Port of Montreal

Built a real-time vessel tracking platform that ingests live AIS data via WebSocket, runs DETR object detection and LLaVA vision-language inference on 480+ daily webcam snapshots, and correlates vessel schedules with truck activity.

  • Sharded cron system on Cloudflare Workers to spread model inference across time windows
  • 175K+ activity snapshots accumulated in D1 with R2 for image and video storage
  • 5+ external data sources (AIS stream, port webcams, Quebec 511 traffic, terminal schedules, weather) in one dashboard
  • Staleness tracking and graceful fallbacks when data sources go stale

Stack: TypeScript, Next.js, Python, Cloudflare Workers, D1, R2, Workers AI, MapLibre, WebSocket

Montreal Archives Search

Search engine for 14,822 historical photos from the Montreal city archives

Started as an Instagram account sharing old Montreal photos from the city's Open Data portal. Grew to ~3k followers and evolved into a full search platform for ~15,000 historical images (1870s-1990s).

  • Three search modes: keyword, semantic (BGE embeddings), visual (CLIP)
  • 8-stage streaming ETL pipeline (Python + TypeScript) that cleans French-language archival metadata, generates VLM captions, runs OCR, and scores trust per field
  • Production vector search on Cloudflare Vectorize (1024-dim BGE + 512-dim CLIP indices)
  • Sub-50ms response times globally on Cloudflare's edge

Stack: TypeScript, Python, Cloudflare Workers, D1, Vectorize, R2, Workers AI, CLIP, Next.js

Diane Party Rentals

Custom ERP for event rental business

Replaced paper-based workflows with a custom ERP: automated quoting, real-time inventory locking (optimistic concurrency), and Stripe payment processing. Handles the full rental lifecycle from quote to return.

Cut quote turnaround from 24h to under 2h

Stack: Next.js, TypeScript, PostgreSQL, Stripe

visit site

Ballerz Football Academy

Scheduling and payout platform for youth sports

Admin and player portals for managing sessions, bookings, availability, and payments. Players check trainer availability and track progress. Staff handle scheduling and payouts.

Handling 100+ monthly sessions

Stack: Next.js, TypeScript, Tailwind CSS, Cal.com, Supabase

visit site