Claude x Softr 2026 - RouteResilience
Winner of the Claude × Softr Build Day! A live disruption map on TfL data that finds safe diversions around closures for emergency crews and shows the time each detour adds.
Learn MorePart-time game designer, full-time builder. Computer Science with AI student at Birkbeck, University of London, and hackathon winner.
Lead developer on Craft Your Island!, a Roblox island-building game with 300K monthly players. I ship its weekly updates, from worker AI and onboarding to pets, live events and console support.
Led compliance research on where financial information ends and regulated advice begins, covering Article 53 RAO, the FCA's targeted support regime and section 21 FSMA financial promotions. Built an automated content pipeline with NewsAPI, the Claude API and GitHub Actions that drafts SEO personal-finance articles into WordPress.
Built and deployed a RAG study assistant on Next.js 14 and Gemini, and a multi-agent research assistant with Google's Agent Development Kit on Vertex AI.
Run study-skills workshops and one-to-one consultations for A-level students applying to university, with tailored study plans.
Completed advanced IBM watsonx Orchestrate training and built AI agents and workflow automations with IBM specialists in enterprise environments.
Winner of the Claude × Softr Build Day! A live disruption map on TfL data that finds safe diversions around closures for emergency crews and shows the time each detour adds.
Learn MoreBuilt during the Google Developer Groups Build with AI programme. Upload your documents and chat with them for tailored explanations, flashcards and quizzes. Five AI features shipped end to end, validated with 30 test users.
Learn MoreA cross-platform app for groups to track and fairly split shared trip costs.
SoonWon the London build day with my team, shipping RouteResilience on live TfL data in a single day.
Launched with five AI features and tested with 30 students during the Google Developer Groups Build with AI programme.
Completed advanced training in AI automation and enterprise orchestration during my Techinous internship.
Open to internships, hackathon teams and interesting side projects.
A Roblox game where you chop, mine and craft to grow your own island, hire workers to automate it, and hatch pets that farm for you. I co-founded it and lead its development at TBlox Studios.
Play on Roblox299,937 MAU on 18 Oct 2026. Biggest audiences: US 18.7%, UK 6.4%, Russia 5.8%, Brazil 5.5%. Retention is the weekly average of daily D1, 21-27 Sep vs 11-17 Oct.
A 466-script Luau codebase: a shared framework (RIVET) for data, commerce and analytics, with the game's own services and controllers on top.
ServerScriptService/Server RIVET/ -- data, commerce, analytics, progression GAME/ -- 65 modules: Workers, Pets, Shop, World ... StarterPlayerScripts/Client RIVET/ -- UX, input, audio GAME/ -- 127 controllers: Tutorial, Placeables ... ReplicatedStorage/Shared/CONFIG -- one config per system
function MeteorEventConfig.SecondsIntoCycle(Now) return (tonumber(Now) or os.time()) % MeteorEventConfig.CycleSeconds end function MeteorEventConfig.IsWindowOpen(Now) local Into = MeteorEventConfig.SecondsIntoCycle(Now) return Into >= MeteorEventConfig.OpenAtSecond and Into < MeteorEventConfig.OpenAtSecond + MeteorEventConfig.OpenSeconds end
function EggConfig.RollPity(EggId, Generator)
local Egg = EggConfig.Eggs[EggId]
if not Egg then
return nil
end
local Pool, Total = {}, 0
for _, Entry in ipairs(Egg.Pets or {}) do
local Info = EggConfig.Pets[Entry.Pet]
if Info and Info.Rarity == EggConfig.Pity.Rarity then
table.insert(Pool, Entry)
Total += math.max(0, tonumber(Entry.Weight) or 0)
end
end
local Pick = (Generator and Generator:NextNumber() or math.random()) * Total
for _, Entry in ipairs(Pool) do
Pick -= math.max(0, tonumber(Entry.Weight) or 0)
if Pick <= 0 then
return Entry.Pet
end
end
return Pool[#Pool] and Pool[#Pool].Pet
end