Software engineer in Manchester, UK. I build production web and mobile systems, and retrieval systems over messy real-world data.
Most recently I worked on safety-of-the-line software used by UK rail infrastructure contractors: a Next.js/TypeScript platform and its React Native companion app, where a rendering bug in a signature flow is a compliance incident rather than a cosmetic one. Before that, a loyalty and gift-card platform serving over a million users.
The habit that runs through most of what I build: don't ship the first approach that works; build the competing one and measure which wins. Two expert-discovery pipelines evaluated head to head. A dependency-path SVM held to the same scoring function as a transformer. A guard test that fails the build if a secret is ever hardcoded again.
Currently looking for my next role: full-stack, backend or AI engineering. Available immediately, no notice period. Remote UK, or hybrid and on-site anywhere I can reach from Manchester. saifhshafi@gmail.com
elixir-expert-discovery: MSc dissertation. Two ways of finding the UK researchers who belong in ELIXIR Europe communities: one content-based, one network-based. Both work. Both return ~27,000 high-confidence experts. Only 5.6% overlap. BioBERT + FAISS over 370,282 publications; a PubMed harvester parallelised from ~100 hours to under 20.
relation-extraction-webnlg: A dependency-path SVM and a marker-based BERT, built to be compared honestly: same records, same split, same scoring function. Reports macro and weighted F1, because on an imbalanced label set only one of those tells you the truth.
Efhamni: Saudi Sign Language recognition. CNN + BiLSTM, 94.46% accuracy across 80 signs, ~6s end-to-end. Second author on the paper: Sensors 2024, 24(10), 3112 (10.3390/s24103112).
prism-portfolio-optimiser: Parses free-text investor briefs and builds a constraint-satisfying portfolio, live against a scoring server. StudentHack25, top 5.
elevenlabs/packages#994:
Async LiveKit room handlers in the ElevenLabs Agents SDK discarded their rejections, so a
failure to attach the agent's audio surfaced as silence rather than as an error. Routed
those rejections to onError. Three of the four tests I added fail against the previous
behaviour, one of them asserting no unhandled rejection is emitted.
elevenlabs/skills#121: Their agent-skill eval harness was coupled to a single assistant CLI, so skills documented as assistant-neutral could only be verified on one assistant. Proposed and built a runner interface, with the behaviour-preservation checked by capturing the harness's argv, staging layout and trigger truth table before and after.
TypeScript · React · Next.js · React Native · Python · PyTorch · transformers · FAISS · FastAPI · MongoDB · Playwright · GitHub Actions · Docker



