the LeetCode 37 question I bombed in an interview, kept on the site as a reminder
Built this because I bombed the Sudoku Solver question (LeetCode 37) in an interview. It's a fully playable 9x9 sudoku game at three difficulties, but the real point is the second tool: an auto-solver that runs the same backtracking algorithm I should have written, animated cell-by-cell so you can watch it try, commit, and backtrack live. Also ships a hint tool that lists every legal digit for the cell you've selected (per row, column, and 3x3 box).
▸Random valid puzzle generation with rotational symmetry on cell removal — easy / medium / hard difficulties.
▸Hint tool: for the selected cell, lists every digit 1-9 that satisfies the row + column + 3x3 box rules right now.
15 built-in sorts · side-by-side compare · run your own algorithm in real CPython
Two-tab algorithm playground. Tab one ships 15 sorting algorithms (popularity-ordered) with bar-chart animation, live op-counters (compares / reads / writes / swaps), per-algorithm complexity badges, a 'how it works' write-up, and source code in Python / JavaScript / Java / C#. Tab two is a real-CPython sandbox where you write your own sort and the runtime tracks every operation.
▸15 sorting algorithms — Quick, Merge, Heap, Insertion, Selection, Bubble, Tim, Shell, Counting, Radix, Bucket, Comb, Cocktail, Gnome, Pancake — each with executable JS that emits a shared op-stream consumed by the visualizer.
▸Side-by-side compare mode: pick any two algorithms, run them on identical input, watch the difference in op counts.
▸User-code tab: real CPython via Pyodide (loaded in a Web Worker, lazy-init'd, ~10 MB first-load).
▸Modern editor (CodeMirror 6) with Python syntax highlighting, line numbers, autocomplete, and live `compile()`-based syntax checking.
▸Custom TrackedList Python class proxies the user's array — every read, write, and comparison drives the same animated bar chart.
▸15 test cases (incl. empty, single, sorted, reversed, all-equal, negatives, dupes, near-sorted, n=200 adversarial). Validates against sorted(input). All run output streams into a console panel.
▸Crude complexity bucketer: re-runs your algo at n = 50/100/200/400/800, fits ratios to log / linear / nlogn / quadratic / cubic models, displays the closest match.
TypeScriptReactCodeMirror 6Web WorkerPyodide (CPython in browser)
Scheduled price-watcher with email alerts and a plugin model
A self-hosted, extensible price monitor I built for myself. Tracks any number of products across multiple sites, runs on a schedule, and emails me the moment a price drops below a target I set. New sites are added by writing a tiny scraper plugin — no code changes elsewhere.
▸Add a watch in one CLI command or via a small web form: URL, target price, optional expiry.
▸Pluggable scraper interface — drop a `sites/<store>.py` file implementing `parse(html) -> price` and the scheduler picks it up.
▸Per-item cooldown so you don't get alert-spammed when a price hovers around the threshold.
▸Time-bound watches (e.g. 'remind me only until Black Friday') with a daily expiry sweeper.
▸Pluggable notifier: SMTP email by default, optional Telegram bot and webhook.
▸Runs anywhere: a single Docker container, or AWS Lambda + EventBridge for a free-tier serverless deploy.
▸DynamoDB / SQLite storage adapter — start local, graduate to cloud without code changes.
Serverless job portal with AI-powered recommendations
A serverless job portal supporting new immigrants in finding employment in Australia. Backend services on AWS Lambda + Python improved scalability, availability, and user experience.
▸Designed scalable backend architecture with AWS Lambda + API Gateway — low-cost and high availability.
▸Implemented an AI-based recommendation engine using vector search to improve job match accuracy.
▸Configured Route 53 + CloudFront to optimise routing and reduce latency.
Backend for the company's production legal AI system: a knowledge vector database with relevance-based document search, query routing, and result re-ranking. Powers the in-app legal Q&A assistant.
End-to-end form-fill, review, and e-lodgement pipeline
Owned and led the backend behind Visa Robot's flagship form-automation flow — collecting client data, automatically populating government PDF/HTML forms, routing through a review pipeline, and e-lodging once approved.
▸Domain-driven service split: intake, mapping, validation, review queue, e-lodgement.
▸Idempotent state machine for each application — survives Lambda timeouts and retries.
▸Audit log of every field mutation and reviewer decision.
▸Recognised internally with the CodeBlack Best Backend Engineer award after delivery.