P-01LIVE
SearchWork
Job tracker for UK graduate roles: 11 job-board APIs (Adzuna, Reed…), Claude-powered CV parsing and match scoring. JWT + Google OAuth, rate limiting, 12 security-audit findings fixed.
FASTAPI · POSTGRESQL · CLAUDE API · NEXT.JS
SHEET 01 / 04 — INDEX
AVAILABLE — IMMEDIATE START
CONTACTAVAILABLE — IMMEDIATE START
WELCOME BACKEND / AI ENGINEERING
Backend / AI Engineer
Python / FastAPI · Spring Boot · PostgreSQL
P-01LIVE
Job tracker for UK graduate roles: 11 job-board APIs (Adzuna, Reed…), Claude-powered CV parsing and match scoring. JWT + Google OAuth, rate limiting, 12 security-audit findings fixed.
FASTAPI · POSTGRESQL · CLAUDE API · NEXT.JS
P-02CI ✓ · 483 TESTS · SECURITY AUDIT
Local 3D office where AI agents run tasks in stages (plan → research → draft → self-check) on Ollama, with a review queue.
FASTAPI · POSTGRESQL · OLLAMA · NEXT.JS
P-03HONOURS · FIRST CLASS
AI tutor that explains code in real time, with guided tasks and progress tracking.
NEXT.JS · tRPC · PRISMA / POSTGRESQL · OPENAI
LIVE
Job tracker for UK graduate roles: 11 job-board APIs (Adzuna, Reed…), Claude-powered CV parsing and match scoring. JWT + Google OAuth, rate limiting, 12 security-audit findings fixed.
CI ✓ · 483 TESTS · SECURITY AUDIT
Local 3D office where AI agents run tasks in stages (plan → research → draft → self-check) on Ollama, with a review queue.
HONOURS · FIRST CLASS
AI tutor that explains code in real time, with guided tasks and progress tracking.
SHEET 02 / 04
P-04CI ✓ · 49 TESTS
Turns requirements into test cases, checklists, bug-report drafts and API test ideas, with human review before export.
NEXT.JS 15 · PRISMA / POSTGRESQL · NEXTAUTH · OPENAI · ZOD
HARD PART
Model output is validated against Zod schemas and normalised before it is saved; a response that fails validation is retried once. Items go PENDING → ACCEPTED / REJECTED, and exports include accepted items only.
P-05CI ✓ · 23 TESTS · TESTCONTAINERS
Group chat over STOMP/WebSocket with a SockJS fallback; message history in PostgreSQL.
JAVA 17 · SPRING BOOT 3.4 · SPRING DATA JPA · POSTGRESQL · REACT
HARD PART
Persist, then broadcast: a message is saved in its own transaction and only the saved row goes out. Each session’s frames are handled in arrival order, which the STOMP integration test on PostgreSQL in Testcontainers only passed reliably after that fix.
P-06CI ✓ · 14 TESTS
Online multiplayer checkers with matchmaking, ELO rating and in-game chat.
NEXT.JS 14 · PRISMA / POSTGRESQL · JWT · SSE · ZOD
HARD PART
Server-authoritative moves: the server rebuilds the board from FEN, checks turn and piece ownership and applies the rules engine before saving. Players get updates over SSE; a finished game updates both ELO ratings in one transaction.
P-07GEOSPATIAL · REAL-TIME
Flight analytics for drone and FPV owners: live telemetry over WebSocket, danger-zone warnings, post-flight analysis.
NODE.JS / EXPRESS (TS) · POSTGRESQL + POSTGIS · WEBSOCKET · NEXT.JS
HARD PART
Live ingest got slower as a flight grew: every telemetry point re-aggregated the whole flight, about 40.5M ST_Distance calls for a 9,000-point flight, and indexes could not help. I replaced it with an incremental accumulator and a per-flight write queue: 152.8 s → 50.1 s for the same flight.
SHEET 03 / 04
I’m a backend and AI engineer in Dumfries, Scotland. I build APIs and LLM-powered features in Python and Java, and I treat security as part of the job, a habit from my Cyber Security HNC.
I graduated from Glasgow Caledonian University with First Class Honours in 2026 and I’m looking for my first engineering role in Glasgow or Edinburgh, office or hybrid.
DEC 2024 — JUN 2025
The Devil’s Porridge Museum
Volunteer. Maintained the museum’s WordPress website and digital outreach. Event enquiries reached more than double the initial target, with 50+ extra participants.
OCT 2026
HACKERNOON · TOP STORY
SEP 2026
+ CISCO NETWORKING ACADEMY — NETWORKING ESSENTIALS (2023)
SHEET 04 / 04
Hiring for a backend or AI role in Scotland? Let’s talk.