Senior Frontend Engineer at Horsefly Analytics, Manchester. I build production TypeScript and React for a labour-market analytics platform, and I work on the AWS and AI-agent infrastructure behind it.
Most of what I enjoy is the unglamorous half: parser edge cases, streaming protocols, the failure modes that only show up under real input.
I contribute fixes upstream to packages the JavaScript ecosystem depends on.
Merged
postcss/postcss-selector-parser#330— fixed aTypeErrorthrown on unclosed[,(and trailing|instead of the parser's own error. Shipped in7.1.5.corsairdev/corsair#111— improved the Telegram integration plugin.
Open
postcss/postcss-selector-parser#335— attribute selectors with no valid attribute name threw a rawTypeError, or emitted the literal stringundefinedinto CSS. Verified against 43,200 generated selectors: zero regressions.- Fixes pending review in
hast-util-from-parse5,eslint-plugin-import,stacktrace-parserandxml-js.
- llm-guard — validating and securing LLM prompts, in TypeScript.
- bedrock-ui-stream — bridges AWS Bedrock Agent Runtime event streams to the Vercel AI SDK UI message stream protocol. Handles the parts that bite: chunk boundaries splitting multi-byte characters, partial tool-call state, and redaction on the error path.
- MSc Computer Science, Manchester Metropolitan University
- AWS Certified Solutions Architect
- Cyber Runway Launch 2024 — the DSIT-funded national cyber accelerator delivered by Plexal
- Volunteer mentor, Manchester Metropolitan University
TypeScript · JavaScript · React · Next.js · Node.js · AWS · PostgreSQL · Docker · Terraform




