homeexperienceprojectsphotographypast readings

Projects

GooseDoor

ReactTailwind CSSSupabaseTypeScriptPostgreSQLViteshadcn/ui
  • Wanted to solve the painful process of co-op hunting: constantly switching between fragmented Excel sheets, Reddit threads, and word-of-mouth just to piece together company info, salary ranges, and red flags.
  • Built and scaled a salary-transparency platform to 15,000+ visitors, 150+ active logins, and 220,000+ social impressions, supporting users across 30+ universities.
  • Expanded from a Waterloo-only tool to 350+ supported colleges with automatic institution detection and domain-restricted sign-ups (.edu, .uwaterloo.ca, .ca), driving multi-school adoption and improving sign-up conversion by 2-3x.
  • Engineered a scalable, real-time backend using PostgreSQL and Supabase Edge Functions with row-level security (RLS), enabling anonymous submissions, verified postings, and low-latency aggregated analytics at scale.
GooseDoor screenshot

Sentinel

Node.jsWebSocketsWebRTCTwilioReactPWAMultimodal AI (Vision & TTS)
  • Built an AI-powered personal safety system that autonomously initiates emergency calls and streams live evidence, achieving sub-500 ms voice response latency and real-time video analysis during active incidents.
  • Architected a low-latency, offline-resilient communication stack (Node.js, Socket.IO, WebRTC principles, Twilio) supporting bi-directional audio/video streaming and reliable alert delivery across unstable network conditions.
  • Designed an offline-first PWA architecture using Service Workers and IndexedDB, ensuring 100% local capture of emergency data and automatic cloud sync upon reconnection, even during complete connectivity loss.
Sentinel screenshot 1
Sentinel screenshot 2

Decay

ReactTypeScriptTailwind CSSChrome Extension API
  • Built Decay, a Chrome extension that tracks open tabs over time and visualizes inactivity using a heatmap-based UI to help users identify and close stale or forgotten tabs.
  • Implemented a coldness scoring algorithm (0–100) to rank stale tabs using a weighted decay model: Coldness Score = IdleScore + AgeScore + VisitScore, where IdleScore = min(100, (idleMinutes / 120) * 60) and additional components factor in how long the tab has existed and how frequently it has been revisited.
  • Implemented a feature set including soft-closing through a "Cold Tray," custom decay thresholds, protected domains/URLs, pinned tab immunity, and timeline-based tab aging insights, all configurable in a React + TypeScript settings dashboard with persistent local storage.
Decay screenshot 1
Decay screenshot 2
Decay screenshot 3

NetSpense

ReactTailwind CSSFastAPITesseract OCRSupabase
  • Built an end-to-end OCR and NLP expense extraction pipeline evaluated on 200+ diverse test receipts, converting unstructured images into structured financial records with 90% field-level extraction accuracy.
  • Implemented a transaction categorization system using supervised classification with rule-based backoffs, achieving 89–91% accuracy across 4 major spending categories and reducing manual correction by 70%.
  • Designed a full-stack analytics platform with a PostgreSQL-backed schema and interactive dashboards, enabling real-time monthly summaries, trend analysis, and budget tracking for 100+ simulated user accounts.
NetSpense screenshot
Steam
←CS Webring→
👈 this website is part of the uwaterloo CS webring!
© 2025 MIT Licensed