Fun builds
Built for the joy of it. Engineered like it matters.
Side projects from things I care about — rallying, cars, Dubai and the world around us. No AI in these; just data, algorithms and careful engineering.
WRC Analyzer
A World Rally Championship site with live timing, team news, a weekly newsletter and race predictions — rebuilt and published automatically every hour, and posted to X and Reddit when something new happens.
- Driver ratings learned from dataEach crew's pace is its average deficit to the fastest car in seconds per kilometre, per surface — learned from every stage of past rallies, with recent form weighted most.
- Monte Carlo predictionsEach simulated run draws every crew's pace, adds stage-to-stage noise that grows with the distance left, and sprinkles in punctures and retirements — then ranks the finishers.
- Static, but aliveAn hourly GitHub Action rebuilds the whole site; only the prediction game runs server-side, on Cloudflare Functions with a D1 database.
- Frugal by designIf nothing visible changed, the deploy is skipped — staying well inside the free hosting plan's build limits.
ModLab
A car-modification planner for enthusiasts: pick from 101 cars, set a goal and a budget, and get the best combination of parts — with 3D views, landed prices, delivery dates and install guides.
- An exact optimiser, not a guessA depth-first search with budget pruning picks at most one part per slot, respecting which parts require or conflict with others — small enough per car (~25 parts) to search exhaustively.
- Honest numbersCosts include shipping and import duties; mods that add no performance say so plainly, and estimated prices are labelled as estimates.
- Keys stay privateLive prices come through a small Node server that holds the API keys and caches each search for an hour to keep costs down.
- 3D partsRotatable Three.js renders of each part, using properly licensed models where available.
What's On Dubai
A guide to everything happening in Dubai — concerts, festivals, family days out, sport and food — showing where to book, how prices compare across sellers, and what people say.
- A polite scraperRespects robots.txt, rate-limits per site and retries carefully, reading the structured event data most ticketing pages already publish.
- One event, many sellersTitle similarity matches the same event across sites, merges their offers and keeps a daily price history.
- Deals you can trust"You save" is measured against the median market price, and prices older than 48 hours are never shown as current.
- Refreshed every morningA scheduled GitHub Action re-scrapes daily at 06:00 Dubai time and commits the fresh data.
God's Eye
Situational awareness from public data: a single live world map of aircraft, satellites, earthquakes, disasters, natural events, weather and space weather — using only free, open feeds with no API keys.
- Satellites computed in the browserOrbits are propagated from public orbital data every two seconds; click one to see its ground track.
- Two ways to runA tiny Python server fetches every feed with caching; or it runs as a static site where the browser fetches directly, with a small Cloudflare Worker for sources that block browsers.
- Can't be abused as a proxyOnly a fixed allowlist of sources is ever fetched, and the Worker only answers the site's own origins.
- Works offline tooA demo mode generates realistic sample data, so it runs anywhere without a network.