projects
featuredmore workbiasbusternext.js · fastapi · groq — compares how outlets frame the same event→urbanquietnext.js · tensorflow.js — crowdsourced city noise mapping, in-browser audio classification→nameslotnext.js · fastapi · tts — ai commentary that says any player's name→echospherereact native · expo — makes the environmental cost of ai visible→ai paper-to-codepytorch · langchain · chromadb — retrieves arxiv papers, generates code from them→
- launched ontario's first social platform for ova volleyball athletes and coaches, growing to 100+ users across 15+ ontario clubs, with backend data models supporting 1,000+ profile attributes and 300+ athlete-coach connections
- ran user research in person at 12+ ova tournaments over 4 months including the fall classic and provincials, and interviewed john barrett, volleyball canada hall of fame inductee and head coach of the u of t varsity blues, alongside coaching staff from waterloo and york and 20+ ova and ocaa players
- wrote granular firestore security rules that authorize at the field level, letting any signed-in user increment upvotes, likes, views, and comment counts while diffing changed keys so nobody can mutate another athlete's post body or profile
- drove the whole ui off firestore onsnapshot subscriptions rather than polling, so chats, feeds, role changes, and profile edits stream to every open client in real time, shipped as an installable pwa on next.js 16 and react 19
- built a computer vision pipeline in python using opencv for frame extraction and preprocessing, sam3 for player segmentation and tracking across rallies, and pose estimation to lift skeletal keypoints per frame, deriving vertical jump height, approach timing, and spike velocity straight from raw game video
stacknext.js 16react 19typescriptfirebase authfirestorecloud storagesecurity rulesrbacresendpwaframer motiontailwind cssvercelpythondjangofastapidockeropencvsam3pose estimationnumpycomputer vision
visit site →- trained the classifier myself on 2,234 labeled commits from real history across react, vscode, next.js, and fastapi, hand-correcting 332 labels through a purpose-built review queue plus 1,074 user-history examples
- engineered 47 features per commit covering source ratios, message patterns, change size, and test signals, classified by a random forest at 200 trees and depth 8 into noise, low, medium, or high value
- blended the score 55% deterministic impact, 35% predicted label, 10% model confidence, so the ml never overrides what the diff plainly shows, and shipped it as a github app with oauth install, webhooks, and a supabase report store
stacknext.jstypescriptfastapipythonscikit-learnrandom forestsupabasegithub appoauthwebhooks
visit site →- built an ml pipeline using librosa to classify neurological risk indicators from infant cry patterns
- trained cnn models on mfcc and spectrogram features, reaching 92% accuracy on labeled datasets
- deployed inference apis via fastapi on modal, optimizing latency through request batching and integrating suno for adaptive, ai-generated acoustic responses based on real-time classification
- integrated an llm (cerebras) pattern explanation layer to assist non-clinical interpretation of model outputs
- presented at hackmit 2025, recognized for innovation in ai-driven signal analysis and cloud deployment
stackpythontensorflowlibrosacnnfastapimodalcerebrassuno
visit site →- grand prize winner out of 4,000+ global teams in a nasa-sponsored challenge; designed a high-fidelity 3d orbital colony model and presented strategic research in los angeles, securing a $2,500 scholarship
- built python-based ecosystem simulations using astrobiological data, testing 100+ scenarios for sustainability
- designed a 3d colony model in blender with topology and adaptive systems for habitat visualization
stackpythonnumpypandasblender3d modeling
presscentral peel students win grand prize for live in a healthy spacepeel district school board→live in a healthy space competition resultsnational space society→
visit site →- choice-driven narrative rpg played from the terminal, structured as a service rather than a script: a fastapi backend exposes the game engine, a python cli is the client, and the two talk over http
- persisted world and player state in supabase with versioned sql migrations, a seeded content catalog, and pydantic schemas, deployed on aws ec2 and packaged with docker
- drove generative narration with the gemini llm layered over authored content, and published it as a package so playing it is pip install a-new-dawn then a-new-dawn new-campaign
stackpythonfastapigeminisupabasepostgresqlpydanticsql migrationsdockeraws ec2cli
visit site →- cross-platform app on react native 0.81, expo sdk 54, and typescript shipping to ios, android, and web from one codebase, treating a listening session as its own unit so stats capture skips, repeats, and drop-off rather than aggregate top-track counts
- moved oauth out of the client after it failed the way client-side oauth always does, standing up a php callback that owns the code-for-token exchange and centralizes token expiry and refresh, so the frontend only ever asks for a valid token
- unified both platforms behind one auth hook with a custom-scheme deep link on mobile against an https redirect on web, and a storage layer resolving to asyncstorage or localstorage so every call site stays platform-agnostic
- wrote a rule-based insights engine over the spotify web api computing listening time, genre diversity, and skip rate across short, medium, and long term windows, turning them into calls like cutting a track you skip 70% of the time
stackreact nativeexpoexpo routertypescriptoauth 2.0spotify web apiphpasyncstoragereanimated
visit site →- built two independent pipelines, a threat actor profiler and a counterfeit currency pattern tracker, sharing one postgresql database and celery/redis scheduler so each runs on its own cadence without touching the other's data
- extracts iocs (ips, domains, hashes, cves, mitre att&ck ttps) from rss feeds, cccs canadian government sources, and paste sites using spacy ner plus anchored regex, then clusters them into actor profiles with sentence-transformers embeddings and dbscan, pushing results to misp via pymisp
- scrapes rcmp's live counterfeit-currency statistics tables and canlii court case records, flagging year-over-year anomalies by z-score and correlating incident volume against court cases to surface enforcement gaps
- trained a pytorch cnn with dual heads (genuine/counterfeit plus 5-way security-feature detection) for banknote scanning, documenting up front that it's trained on synthetic data only since no public dataset of real counterfeit canadian notes exists
stackpythonspacymisppymispsentence-transformersdbscanpytorchceleryredispostgresqlstreamlitdockercanlii api
livelive dashboard→
visit site →03 / 05