Work Experience
- Led architectural direction for our 10+ person team, establishing enabling patterns over prescriptive ones — reducing onboarding friction while keeping the codebase adaptable
- Full stack development with Next.js, Node.js, and Express
- Designed shared TypeScript abstractions and Zod-based data contracts that standardise team practices without constraining architectural flexibility
- Research into AI solutions using OCR and AI to scan unstructured documents (packing lists, invoices, etc.) into structured data
- Planning a restructuring of the in-house LMS system, including UI design
- Optimising ORM-generated SQL and database indices, resulting in a 10x speedup in queries
- DevOps: CI/CD pipeline development, build/test automation (Groovy), and Jenkins IaC with Job DSL
- Integration of vulnerability scanning for Docker environments (Jenkins, Trivy)
- AWS Lambda service components (TypeScript, DynamoDB, SQS)
- Extending Python Flask backend on AWS Lambda with DynamoDB integration
- React and Angular UI design and programming
- Unit tests with Pytest, E2E tests with Cypress
- Software robotics (AutoHotkey) to eliminate manual data entry — automating repetitive workflows across the sales system
- C# .NET Core console application that automated sticker printing for order fulfilment, reducing tens of hours of monthly Excel work to a single daily script run
- Google Sheets inventory management system with Apps Script (JavaScript)
This CV
This project is exported as a fully static site. Deploying to Github Pages or Cloudflare Pages means no backend or database to manage and secure.
For a CV, it's the obvious choice: fast, simple. The complexity matches the problem.
The site generates a PDF on every deploy, so there's no separate file to maintain. When applying, I grab the latest from the site — no version drift, no stale attachments.
The exported PDF is ATS-friendly. Human readers are encouraged to view the full stylized version online.
I don't use a desktop email client, so a bare mailto: link would just mean hunting for the address to copy-paste it. I let the user choose how to handle the email — less friction, more results.
Small interactions like this reflect a broader interest in UX: the best interface is one you barely notice.
