Projects

Filter by what kind of thing it is. Every project page starts with a short version, then goes into how it works.

Main projects

Two Linglow phone screens. On the left, a sentence from Alice in Wonderland shown in English and then in French, every word inside a coloured pill for its grammatical role, with the audio player at the bottom reading 2 / 249. On the right, the card that opens when you tap a word: FRENCH, verb, commençait, then ENGLISH, began, then the definition 'The starting point or the early part.'
Build

Linglow

A language app for reading real books (Dracula, Alice in Wonderland) in nine languages including Irish. Every word is tappable, grammar shows as colour, the audio stays in sync.

Forest plot of four ratio-scale effects on a log axis, each a point estimate with its 95% interval. Within-fight KO hazard at 1.38 [1.32, 1.44], damage carried into the UFC at 1.22 [1.15, 1.29] and the recurrent-KO clock at 1.11 [1.04, 1.19] all clear the null of 1, in blue; head KO versus ground TKO sits on it at 0.98 [0.82, 1.18], in grey.
Data

Cumulative Head Trauma in MMA

Does absorbing head strikes wear a fighter down, separately from ageing, selection, and the sport itself changing? A ten-study programme on 17,434 fighter-fights and 2,708 fighters, 1994–2026. It grew out of my 2023 masters project, which proposed the question as future work.

The Octagon IQ landing page: the brain logo and OCTAGON-IQ wordmark over a dark arena, a cage radar drawn on the left and yellow and blue ridgelines on the right, four stat panels comparing Joshua Van and Alexandre Pantoja ahead of UFC 331, and links to upcoming fights, fighters, records and rankings along the bottom.
Build

Octagon IQ

The thesis data kept growing. Octagon IQ is where it ended up: a fight prediction model, a live site, and an audit that found five critical defects in my own features.

A line chart of the Fuel dial across 23 weeks of 2026. The line falls from 100 to 12 by W16 in mid-April, which is marked, bottoms out at 0 in the shaded crash weeks W18–W19, and recovers to 60 over the two shaded weeks away.
Data

Burnout Tracker

A burnout model built only from git commit timestamps: speed, revs, coolant, fuel. It's calibrated against one real burnout, in-sample, and the write-up is honest about that.

A dot plot of the mean rating by MCU phase, across 37 films. Each pale dot is one film and the bar is the phase mean, on a 0-100 scale: Phase 1 scores 74.3, Phase 2 76.1, Phase 3 79.0, Phase 4 72.9, Phase 5 67.7, and Phase 6 73.4 from a single film. Phase 3 is the highest, and the per-film dots keep the small sample sizes visible.
Data

Marvel by Phase

The MCU split into its phases and measured: budgets, box office, critic and audience scores, release cadence. Which phase was the golden age, which actors and writers made the studio the most money, and where the critics and the audience stopped agreeing.

A centre crop of one JamCam frame at the camera's real 352 by 288 pixels, scaled up so the pixels stay visible. Trafalgar Square at night under the station's debug overlay: hand-drawn rectangles name the typed road, footpath and crossing zones, and direction arrows sit on several of them.
Experiment

City Lifeline

A generative radio station played by a London traffic camera. Computer vision watches a TfL JamCam and drives a C++ synth. It played for 245 hours, and 243 of its 3,323 chord changes came from the traffic. The other 3,080 came from a timer that stops it repeating itself.

Two ADHD Kit phone screens side by side. On the left, the Plan-Kit blocks step, headed 'Roughly when?', with a task placed under Morning and three unplaced tasks in a tray at the bottom. On the right, the Home screen with the Bad day switch turned on, the note 'Only what's already on today. Ends at midnight.', and a yellow button reading 'Run my floor'.
Build

ADHD Kit

A planning app for neurodivergent brains: just a more helpful way to keep your day on track. Its Bad Day mode shrinks the day down to what's possible rather than nagging about what isn't.

The Pariki synth page, dark themed: two oscillator rows with tune knobs and octave switches, a drone section, a mixer column, a ladder filter and a drone filter in teal and violet, and a row of six large yellow envelope knobs across the middle.
Build

Pariki

A drum synth in the Moog DFAM tradition, in C++ with JUCE. It addresses the hardware's best-known complaints, and FFT tests measure its aliasing suppressed by about 23 dB against a naive oscillator.

Smaller and older

A rendering of the Stream Deck page as configured, drawn from the profile rather than photographed: a dark deck body with a back-arrow key, then three keys titled iPad, Wallet and Keys in blue, orange and yellow, a second row of empty keys, a touch strip and four dials.
Build

Find My on a Stream Deck

Press a key on my desk and my keys, wallet or iPad start ringing. Find My has no API for this. A small launcher drives the app through macOS accessibility and, for AirTags, finds the Play Sound button by its colour.