Ryan Xu

Software engineer, backend and applied AI.

Role
Software engineer
Focus
Backend / platform
Also
Applied AI, fintech

Cloud infrastructure, production AI systems, and identity tooling for regulated environments.

Work

12 projects. The live ones open in a new tab; the rest show a preview, depending on what each one touches.

Quirky

Live · opens in a new tab
Quirky

A hub of browser games and tools — eleven daily puzzles plus quizzes and calculators. No build step, no backend, no account, no downloads: open it and it runs.

  • Vanilla JS
  • PWA
  • Cloudflare Pages

Vancouver Bus Map

Live · opens in a new tab
Vancouver Bus Map

A live map of every bus in Metro Vancouver, shaped by one constraint: TransLink allows 1,000 API requests per day per key. No browser ever calls TransLink — a single Durable Object owns every request, and a test fails the build if a change would overspend the cap. Between polls each bus is projected forward along its real route at its own measured speed, and its marker fades as that prediction ages, so the map never presents a guess as a fact.

  • TypeScript
  • Cloudflare Workers
  • Durable Objects
  • MapLibre

Courtly

Live · opens in a new tab
Courtly

A free rotation generator for racquet sports — badminton, pickleball, tennis, padel, table tennis. Paste a player list and it builds fair rounds: everyone plays, partners change, and the pairings you want kept apart stay apart. Every player opens the schedule on their own phone from one link, rather than crowding round the organiser's. It began as a tool for my own group.

  • TypeScript
  • Cloudflare Workers

MapleBenefits

Live · opens in a new tab
MapleBenefits

A free, private tool for finding Canadian government benefits you might be missing. Answer a short questionnaire once, then see every federal and provincial benefit you may qualify for — ranked by estimated dollar value, each with plain-language reasons and how to apply. Trilingual in English, Traditional Chinese, and Simplified Chinese, with no signup and no tracking: your answers stay in the browser.

  • Next.js
  • TypeScript
  • Cloudflare Pages

Neon Keep

Live · opens in a new tab
Neon Keep

A neon-themed browser arcade with two minigames. A snarky gargoyle guards a vault in a riddle game where you may only ask oblique yes/no questions, never for the password itself. A one-hit-point survival game has you dodge or parry attacks that telegraph their direction, with the timing window shrinking every wave. No build step, no backend, no account.

  • Vanilla JS
  • GitHub Pages

Personality

Live · opens in a new tab
Personality

A four-letter test that tells you which second type is living in your result. Thirty-six questions, a seven-point scale, and no running tally on screen while you answer. No account, nothing saved, nothing sent anywhere.

  • Vanilla JS
  • Cloudflare Pages

finance-monorepo

Live · opens in a new tab
finance-monorepo

Market analysis console: an analyst and screener service behind a Cloudflare Worker API, with a deployed React frontend for research and service health.

  • Python
  • React
  • Cloudflare Workers

ai-learning-inbox

Internal · preview only

Captures AI-related posts as they appear and turns each one into a short summary plus a why-it-matters note, so a feed becomes a reviewable reading queue.

  • TypeScript
  • Cloudflare Workers

career-intel

Private · preview only

Job search that checks eligibility before relevance — hard gates run before any similarity scoring. Every result carries its evidence, gaps, and provenance, plus an honest note on what the run did not cover.

  • TypeScript
  • Next.js
  • Prisma

personal-finance-hub

Private · preview only

Balance-sheet-first personal finance, built around one question: what should I do now? It leads with what is owned and owed rather than a scrolling transaction feed.

  • TypeScript
  • Cloudflare Workers

position-lens

Private · preview only

Read-only portfolio review. It turns a point-in-time snapshot into a deterministic after-close report, requesting outside research only when a position warrants it. There is no order endpoint, by design.

  • TypeScript
  • Cloudflare Workers

threads-autoposter

Private · preview only

Drafting, scheduling, and publishing for Threads. Built to be exercisable before real credentials exist: publishing runs dry by default, and copy generation falls back to deterministic placeholders when no API key is set.

  • TypeScript
  • Gemini API
  • Meta OAuth

Experience

Three years at an identity-verification company, from co-op to Software Engineer II, plus a term teaching the systems course that explains why any of it works.

Trulioo

Vancouver, Canada

Software Engineer II

Feb 2025 – Present

Backend for AI-assisted business-entity and beneficial-ownership discovery: provider-backed APIs, grounded search, and the deterministic regression coverage that now gates every merge.

  • C#
  • .NET
  • AWS
  • Generative AI APIs
  • xUnit
  • GitLab CI

Junior Software Engineer

Apr 2023 – Jan 2025

A customer-facing verification microfrontend, and the event-driven persistence behind it — retries, sequencing, duplicate events, and eventual consistency.

  • React
  • TypeScript
  • C#
  • .NET
  • AWS Lambda
  • SQS
  • EventBridge
  • DynamoDB
  • MySQL

Junior Software Engineer, Co-op

May – Dec 2022

Full-stack business-verification work across 88 tickets. Owned one feature end to end — web UI, microfrontend, SDK, and configuration — then filed the follow-on refactor unprompted. Closed the term prototyping a graph database that mapped company-ownership relationships from public registry data.

  • C#
  • .NET
  • React
  • SQL migrations
  • Managed graph database

The University of British Columbia

Vancouver, Canada

Teaching Assistant, CPSC 213

Jan – Apr 2023

Introduction to Computer Systems: the course that takes students from high-level code down to assembly, memory layout, I/O devices, virtual processors, and concurrency. Supported roughly 470 students across three lecture sections — ran labs, held office hours, answered the course forum, graded, and invigilated.

  • C
  • Assembly (SM213)
  • Concurrency
  • Memory layout

Public Services and Procurement Canada

Vancouver, Canada

Web Application Developer, Co-op

Sep 2021 – Apr 2022

Internal web applications for regional government clients, backend and frontend. Reviewed teammates' pull requests, supported client requests directly, and shipped a full-stack feature spanning a jQuery form and a code-first migration that moved a foreign key between tables.

  • C#
  • ASP.NET MVC
  • Entity Framework
  • SQL Server
  • JavaScript
  • jQuery
  • Git

Beyond the resume

The parts of the job a bullet list tends to flatten: what got measured before it got built, what got reported when it didn't work, and what got left quieter for everyone after.

Engineering judgment

  • Predicted a per-test timing effect before implementing it, then confirmed the measured result matched the prediction.
  • Ran a related performance experiment that produced no timing benefit, and reported that honestly rather than quietly dropping it.
  • Retracted an AI-sourced bug report after verifying the agent had analyzed a stale branch.
  • Diagnosed an intermittent cancellation-test failure by measuring both code paths directly, then fixed the underlying race instead of adding retries.

Signal and noise

  • Changed error-log severity defaults so future error codes stay quiet unless deliberately classified as alert-worthy.
  • Corrected timeout test scenarios to exercise the real client-timeout path rather than only mocked delay behavior.

Systems and influence

  • Built a reusable scenario-alignment audit workflow spanning canonical docs, mock routing, end-to-end calls, and assertions.
  • Built reproducible regression scenarios for non-deterministic AI behaviour: retries, malformed and empty responses, missing grounding, and provider-specific protocol differences.
  • Influenced technical decisions through dependency mapping, explicit tradeoffs, reproducible investigation, and code review — including correcting course when the evidence changed.