Projects
Clean Your Feed
ACTIVECoordinated inauthentic behaviour detection on X
Local-first investigative journalism tool. Paste a tweet URL, reply thread, or list of handles — the pipeline searches X, scores accounts across five bot signals, runs three-tier text matching (exact / fuzzy / semantic), detects coordination cells with burst-window timing analysis, and renders a structured evidence report. Real cases: a Vancouver mayoral harassment cell (8 accounts, 64.7% confidence), a 10-account narrative amplification burst within a 58-minute window, and cross-profile timeline comparisons. Zero queries served to anyone but you — all analysis runs locally against SQLite.
TransLink Bayes
ACTIVEModelling bus-delay propagation across Vancouver
Hierarchical Bayesian pipeline that models how bus delays propagate across Vancouver's TransLink network. Live GTFS-RT feeds are collected every 5 minutes via launchd, processed into SQLite, and fit with brms (R) multilevel regression models, with automated quality reports on each run. Originated as a UBC STAT 447C project; the public repo is the original course-submission archive.
Strava × Spotify Analyser
ACTIVEWhat were you listening to on that run?
Cloudflare Worker that fires on every Strava activity webhook, correlates the activity window with Spotify listening history, and writes results to Cloudflare D1 and a JSON file committed back to GitHub. Handles OAuth token refresh for both APIs, deduplicates overlapping activity windows, and powers the fitness log on this site.
// also referenced in FITNESS.LOG
Padawan Coder
ACTIVEThis website
Astro 6 static site with TypeScript strict mode, Tailwind utility classes only, and zero component libraries. Blueprint / Star Wars technical schematic aesthetic built entirely from CSS — repeating-linear-gradient grid background, card corner brackets via pseudo-elements, CSS-only animations. MDX blog, bookshelf, and a fitness log fed by the Strava × Spotify Worker. Deployed to Cloudflare Pages.