04

Projects

Work I've shipped and the side projects I keep alive on the weekends.
$ls -lah ./projects
>6 entries · sorted by impact
tech demos for these projects
personal2026

Sudoku · with animated backtracking solver

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.
  • Animated backtracking solver — generator-based, slider-controlled step interval (2-50 ms), color-coded try / commit / backtrack states, live counters for tries / commits / backtracks.
  • Smart auto-solve: tries to honour your entries first; only clears them if your placements rule out every solution. Given cells are never mutated.
  • Show-solution shortcut, move counter, indicator toggle for a clean board view.
TypeScriptReactBacktrackingGenerators
open widget
personal2026

Algorithm Visualizer · sorts + your own Python

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)
open widget
personal2024 — present

Price Sentinel

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.
architecture · ascii
+--------------+    cron     +----------------+    fetch    +--------------+
|  Scheduler   |------------>|  Watcher core  |------------>|   Scrapers   |
|  EventBridge |             |    (Python)    |             |   plugins/   |
|   / cron     |             |                |<---price----|  amazon.py   |
+--------------+             +--------+-------+             +--------------+
                                      |
                                      v compare
                             +----------------+    alert    +--------------+
                             |    Watch DB    |------------>|   Notifier   |
                             |  (DDB / SQL)   |             | email/tg/wh  |
                             +----------------+             +--------------+
PythonBeautifulSouphttpxAPSchedulerDynamoDB / SQLiteDockerAWS LambdaEventBridgeSMTPTelegram Bot
shipped2023.07 — 2023.12

Job Portal for New Immigrants

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.
PythonAWS LambdaAPI GatewayRoute 53CloudFrontVector SearchServerless Framework
live2024 — present

Legal AI Knowledge Vector DB

Production legal-document RAG system

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.

  • Knowledge ingestion pipeline: chunk → embed → upsert (Dockerized embedder + writer microservices).
  • Hybrid retrieval — vector + keyword — with score fusion for high recall on niche legal terms.
  • Per-tenant isolation in the vector index, plus access-controlled retrieval at query time.
  • Latency budget under 1.2s P95 for end-to-end RAG response.
PythonOpenSearchAWS LambdaDockerEmbedding ModelsRAG
live2024 — present

Visa Form Automation

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.
PythonAWS LambdaDynamoDBS3Step FunctionsAPI Gateway
ls -lah ./projects