Hi, and thanks for visiting with a screen reader. Everything on this site should work for you: the games, the live features and Ask Leah. If anything doesn't, please tell me at weldonl@tcd.ie and I'll fix it.

Leah Weldon, software engineer

hover to disturb · click to scatterbog an luch thairis · cliceáil chun é a scaipeadh… particles

~ $

currently building: this siteá thógáil faoi láthair: an suíomh seo

x-ray · the name is ~2,600 points sampled from text rendered on an offscreen canvas, each on a spring back to its home position, pushed by your cursor or your phone's tilt. It pauses off-screen and stays still for reduced motion. The "last push" pill is a Vercel function reading GitHub's public events API, cached for 15 minutes.

software developer · ibm · dublinforbróir bogearraí · ibm · baile átha cliath

I build software that holds up under scrutiny, and systems where interesting behaviour emerges on its own.Tógaim bogearraí a sheasann suas faoi ghrinnscrúdú, agus córais ina dtagann iompar suimiúil chun cinn as a stuaim féin.

~/about

I'm a software developer at IBM in Dublin. Before that I spent eight months as an intern on IBM Process Mining, building agentic RAG features with Granite models. I studied Computer Science at Trinity College Dublin: a first-class BSc, then an MSc whose dissertation measured how toxicity classifiers fail, and for whom.Is forbróir bogearraí mé ag IBM i mBaile Átha Cliath. Roimhe sin chaith mé ocht mí i m’intéirneach ar IBM Process Mining, ag tógáil gnéithe RAG gníomhaireachta le samhlacha Granite. Rinne mé staidéar ar an Ríomheolaíocht i gColáiste na Tríonóide: BSc den chéad ghrád, agus ansin MSc ar thomhais a thráchtas conas a theipeann ar aicmitheoirí tocsaineachta, agus cé air a dteipeann siad.

I like building with other people under pressure: my SwEng team won first place and the Industry Award with CodeCraft, and I have taken joint first at the OpenAI × Ormeau Labs hackathon and the Privacy by Design track at OpenAI’s AI Privacy Hackathon. On my own I build things to see what happens, like an evolution sandbox where predators appear without being programmed, and a music game whose every note is synthesised in the browser.Is maith liom tógáil le daoine eile faoi bhrú: bhuaigh m’fhoireann SwEng an chéad áit agus Gradam an Tionscail le CodeCraft, agus bhí mé comhionann sa chéad áit ag hackathon OpenAI × Ormeau Labs agus bhuamar rian Privacy by Design ag Hackathon Príobháideachta AI OpenAI. Asam féin, tógaim rudaí chun a fheiceáil cad a tharlóidh: bosca gainimh éabhlóide ina dtagann creachadóirí chun cinn gan iad a ríomhchlárú, agus cluiche ceoil ina gcruthaítear gach nóta sa bhrabhsálaí.

91.7%
semantic-attack bypass rate against Muslims for HAP-38M and Toxic-BERTof disguised attacks on Muslims got past two of the AI moderators I tested
66
automated tests behind Primordial, plus a real-browser checkautomatic checks that make sure Primordial keeps working
98×
peak speedup for a CNN-style convolution with OpenMP + SSE (2024 coursework)times faster: how much quicker our team made a core AI calculation run
12
original music cues synthesised live in the browserpieces of music written by code instead of recorded

x-ray · each figure comes from a project README or a results file. They count up once, when an IntersectionObserver sees the strip, with a cubic ease-out.

~/selected-work

(tá sonraí na dtionscadal i mBéarla)

also in the archive: minesweeper-o-matic · haskell-image-server · gamblers-ruin-monte-carlo · morse-code-game · trials-of-the-mind · zebra-puzzle-solver · vhdl-processorsoon · udp-pubsub-protocolsoon · flex-bison-parserssoon · astar-and-q-learningsoon · c-data-structuressoon · spring-boot-servicessoon · pthreads-and-spinsoon

x-ray · names decode from random glyphs when this section scrolls in. Hover previews sit in the gutter and develop like a photo: a 1-bit ordered (Bayer) dither of the screenshot dissolves pixel by pixel into the real image, drawn on a 144×134 canvas. Rows link to case-study pages generated from Markdown at build time, and the page change uses cross-document View Transitions where supported.

~/explore-the-research

real results from my MSc dissertation

→

x-ray · bars come from per-group CSVs exported from my dissertation pipeline, bundled at build time. The takeaway sentence is computed from the data, and groups that were never flagged before an attack are excluded rather than shown as 0%.

~/swap-test

Same sentence. Different group.

One of my dissertation tests, live. Write an ordinary, kind sentence with a {group} slot. IBM's HAP-38M scores it once for each group. A fair moderator would give every version the same score. Watch what actually happens.

x-ray · a Vercel function fills the slot with twelve groups and scores each one with HAP-38M, which runs inside the function itself (about 20 ms a sentence once warm). In my dissertation this is the counterfactual "swap" test, run across four models and six datasets with bootstrap confidence intervals; inconsistency ranged from 7.8% to 26.3% between models. Identity terms alone can push a harmless sentence over the line.

~/sentence-map

Where the model puts your sentence.

Every dot is a sentence, placed by how HAP-38M itself sees it. Left to right is the model's own verdict: past the dashed line, it gets flagged. Up and down is how much it reads the sentence as being about identity. Type something and see where it lands, or run the swap test above and its twelve versions appear here.

friendly, everyday, criticalsentences that mention a groupabusive (text hidden)yours

x-ray · the model now returns two things: its verdict and the 576 numbers its last layer reads. x is the classifier's own decision axis (the logit gap, so the dashed line is exactly the 0.5 threshold). y is an "about identity" direction: the average difference between sentences that mention a group and the same kind of sentence that doesn't, with the decision axis removed (scripts/build_map.mjs, 82 reference sentences). Harmless sentences that name a group sit higher, and the higher they sit the further right the model pushes them: the bias, as geometry.

~/fit-check

for recruiters · runs entirely in your browser

Hiring? Paste the job description.

I'll pick out the skills the role asks for, show which ones appear in my work (with the project that proves each one), and list anything I haven't shown here yet. It's a keyword match, not a verdict.

x-ray · about 30 hand-written regular expressions map skills to evidence, plus a list of common skills I haven't shown here. Nothing you paste leaves the page. The rules are unit-tested.

~/arcade

bug-bashbest 0

Bug bash

Bugs are crawling into production. Squash as many as you can in 20 seconds.

name-that-genrestreak 0 · best 0

Name that genre

Every clip is composed live by code in your browser, the same way Melody Masters works. Listen, then guess.

x-ray · bug bash is a requestAnimationFrame loop with delta-time movement, wall bouncing and difficulty that rises with your score. Name that genre schedules oscillators, filtered noise and pitch-dropping kicks with the Web Audio API: there are no audio files on this site.

~/now · updated Nov 2026

working
Software developer at IBM
building
This site, and Receipts: a win diary, for SheBuilds
writing
My first Substack essay

~/git log --graph

  1. a3f9c1eHEAD → ibm
    Software developer, IBM · Sep 2026
  2. 7d02b4amsc
    MSc Computer Science, Trinity College Dublin · 2025–26 · dissertation on fairness and robustness in risk detection models
  3. 2e7b9d4
    Laboratory demonstrator, CSU34011 Symbolic Programming (Prolog) · 2025–26
  4. 9a41f03winner
    Privacy by Design track, OpenAI’s first AI Privacy Hackathon, Dublin · 2026
  5. 51ce8f0winner
    Joint 1st, OpenAI × Ormeau Labs hackathon, Belfast, with Sync · Oct 2025
  6. c88e21d
    Software engineering intern, IBM Process Mining · agentic RAG for Automation Planner · Jan–Sep 2025
  7. f5d2a90bsc
    BSc Computer Science, Trinity College Dublin, First Class Honours · 2021–25
  8. d17c3bewinner
    1st place + Industry Award, SwEng Projects Showcase, with CodeCraft (frontend lead) · 2024
  9. 0b6e7aa
    Exec committee, Central Societies Committee · treasurer, Netsoc · PRO, DUCSS · Computer Science Ball organiser · 2022–25
  10. 6c09e12
    J.P. Morgan Code for Good hackathon, Glasgow · 2023

~/honours

2024
1st place and Industry Award, SwEng Projects Showcase, Trinity (CodeCraft)
2025
First Class Honours, BSc Computer Science, Trinity
TCD
Book Prize, awarded for first-class results in the annual examinations
2025
Joint 1st, OpenAI × Ormeau Labs hackathon, Belfast (Sync)
2026
Privacy by Design track winner, OpenAI AI Privacy Hackathon, Dublin
school
2nd place and RSA Special Award, BT Young Scientist & Technology Exhibition
school
1st place, SciFest@College · Specsavers Making a Difference Award

~/stack

hover or focus a skill to see where I've used it, or a project to see what it uses

x-ray · the graph is a plain lookup table in src/data/site.ts. Hover and focus both work, so it's usable with a keyboard.

~/writing

Personal essays on Substack. The first is in progress.

~/four-years

What I built in each module of my BSc at Trinity, year by year. Pick a language to see where it shows up.

year 1 2021–22

CSU11010Introduction to Programming

Java from first principles to object-oriented design: classes, inheritance, collections, file-backed apps and small games.

Javacode soon
CSU11013Programming Project

Space Invaders, built up week by week, then a team app that visualises a spacecraft dataset by country and year.

Processingcode soon
CSU11021Introduction to Computing I

ARM assembly on a Cortex-M4: arithmetic, ASCII-to-integer conversion, strings and bit manipulation.

ARM assemblycode soon
CSU11022Introduction to Computing II

Subroutines, recursion, IEEE-754 floating point, memory-mapped I/O and interrupts in ARM assembly.

ARM assemblycode soon
CSU11026Digital Logic Design

From gate-level circuits and comparators to clocked logic and a finite-state machine in Verilog.

Verilogcode soon
CSU11031Electronics & Information Technology

Circuit analysis and simulation, plus signals and Fourier series in MATLAB.

MATLABcode soon
STU11002Statistical Analysis I

Exploratory statistics in R, including an investigation into the weight of a cup of uncooked rice.

Rcode soon
CSU11081Computers & Society

A reflective essay, a video presentation and a group report on transhumanism.

writingcode soon
CSU11001Mathematics I & II

Calculus, linear algebra and proof, as handwritten problem sets.

mathscode soon

year 2 2022–23

CSU2013Software Engineering Project I

A VR training-analytics platform for Mersus Technologies, built in an Agile team for a real client.

Javacode soon
CSU22011Algorithms & Data Structures I

A generic doubly linked list, a binary search tree and collinearity search, each with JUnit tests.

Javacode soon
CSU22012 ●Algorithms & Data Structures II

Sorting experiments, then a constraint solver for the Zebra Puzzle.

Javaproject →code soon
CSU22014 ●Systems Programming I

Linked lists, Bloom filters, hash tables and an infix/postfix expression evaluator in C.

Ccode soon
CSU22022 ●Computer Architecture I

A microprogrammed processor in VHDL: adders, multipliers, register file, ALU, datapath and control memory.

VHDLcode soon
CSU23016 ●Concurrent Systems & Operating Systems

Producer–consumer and readers–writers with pthreads, verified with the SPIN model checker.

C · Promelacode soon
CSU23021 ●Microprocessor Systems

Raspberry Pi Pico labs on GPIO, caches and multicore, ending in a team Morse code game.

C · ARM assemblyproject →code soon
CSU22041Information Management I

A UML design for a sports club’s membership, payments and training system, plus XML and XQuery.

UML · XMLcode soon
STU22004Applied Probability I & II

Distributions, Monte Carlo simulation, the central limit theorem and confidence intervals in R.

Rcode soon

year 3 2023–24

CSU33013 ●Software Engineering Project II

CodeCraft, an AI coding platform for IBM. First place and the Industry Award.

React · Pythoncase study →code soon
CSU33014 ●Concurrent Systems I

SIMD and OpenMP, ending in a multi-kernel convolution up to 98× faster than the reference.

Ccase study →code soon
CSU33012 ●Software Engineering

REST services in Spring Boot, and the team prototype that became Melody Masters.

Java · JavaScriptcase study →code soon
CSU33031 ●Computer Networks

A UDP publish–subscribe protocol for text, audio and video frames, and packet forwarding across Dockerised networks.

Python · Dockercode soon
CSU33061 ●Artificial Intelligence I

A* search in Prolog and a Q-learning agent in a grid world.

Prolog · Pythoncode soon
CSU33071 ●Compiler Design I

Lexers and parsers with Flex and Bison, from Roman numerals to an expression calculator.

C · Flex/Bisoncode soon
CSU34011Symbolic Programming

Logic programming in Prolog. Two years later I went back to demonstrate it.

Prologcode soon
CSU34016Introduction to Functional Programming

Haskell: algebraic data types, expression evaluation and monads.

Haskellcode soon
CSU34021Computer Architecture II

Recursive procedures in assembly, RISC register windows, pipelining and virtual memory.

assembly · Ccode soon
CSU34041Information Management II

Relational design, functional dependencies, normalisation and constraints in SQL.

SQLcode soon
TEU00062 ●Engaging in the Digital World

Engagement studies of Uber and Spotify, a Tesla Autopilot risk analysis, and a playable mystery game.

Twine · writingproject →code soon
TEU00371Becoming Human: The Science of Us

An elective outside computer science, on human evolution and the origins of societies.

writingcode soon

year 4 2024–25

CSU44061 ●Machine Learning

From logistic regression and ROC curves to Transformers, ending with a model that writes melodies.

Python · PyTorchcase study →code soon
CSU44012 ●Topics in Functional Programming

Parallel Haskell, custom monads, a drawing language with a web gallery, and Minesweeper with a solver.

Haskellproject →code soon
CSU44097Project Methods

A research essay on algorithmic bias and inequality, a theme my dissertation picked up.

writingcode soon

x-ray · one data file (src/data/modules.ts) drives this grid. Filtering only dims cards, so the shape of each year stays visible. Repo links switch on with a single flag (currently off) once the College repo is public.

~/guestbook

moderated by a classifier from my dissertation

Leave a note.

Every message is scored by IBM's Granite Guardian HAP-38M, one of the four models I evaluated, before it appears. You'll see its score. It isn't perfect, which is rather the point of my research.

0/280

x-ray · a Vercel function validates the note, scores it with IBM's HAP-38M running inside that same function (ONNX Runtime in WebAssembly, no third-party API), and only inserts it into Supabase Postgres if the hate/abuse/profanity score is below 0.5. Row-level security means the browser can only read approved notes. A honeypot field and per-IP rate limit keep bots out.

Ask Leah

an assistant that only answers from what's on this site · it can be wrong