Build
TypeScript, Python, WebGL. Research code that survives contact with real users.
Five projects
How I work
Research code has a reputation for being disposable and most of it earns that. It runs once, on one machine, to produce one figure in one paper, and then nobody can make it run again.
I write it expecting someone else to run it, including me in six months. That means the dull things: real dependency management, tests around the parts that quietly produce wrong numbers rather than crashing, and interfaces that do not assume the caller has read the paper first.
Most of my time goes on the seam between a model and everything around it. Ingestion, retrieval, serving, and the moment a spreadsheet arrives in a format nobody anticipated. That seam is where these systems actually fail, and it is rarely the part anyone budgets for.
NeuroClima
Chunking, summarisation and vision extraction across more than 10,000 documents, with entity and relationship extraction on top so the system follows how sources relate instead of treating every passage as an island.
View project ↗ARGENTIC
The engine that decides how an arriving task gets handled, built so that the decision itself can learn rather than being a routing table someone maintains by hand.
View project ↗Voice to Value
A mobile web app on Node.js and Express, Whisper for speech to text, and the rewriting layer that turns a spoken transcript into publishable text without inventing anything the speaker did not say.
View project ↗AIKAA
Building for the specific repetition found inside a company, rather than a general assistant that gets opened twice and then forgotten about. So far: scan-to-identify for a jewellery maker, orders and rosters for a bakery, and reports drafted from rough notes.
View project ↗Human robot interaction
Helped develop a Pepper robot for a campus trust study during a summer internship: text-to-speech, and movements that made it feel friendlier and more human.
View project ↗