I like taking an idea apart until I understand the important layers, then building a focused version with as few unnecessary dependencies as possible. My projects tend to combine practical tools with questions I find interesting: how light behaves, how to make a job search more manageable, and how to keep useful history close to the person using it.
| Project | What it is |
|---|---|
| carat | A physically based spectral ray tracer for gemstones, written against raw WebGPU. One HTML file, no dependencies. |
| career-ops | A local-first job-search CLI and application tracker in Python. It finds adverts on free job boards, filters them against your criteria, and keeps applications in SQLite. |
| Replay | A local-first prototype for saving job-ad snapshots and seeing how they change over time. Built with Python, SQLite, and a small browser UI. |
career-ops helps find and track opportunities. Replay keeps a history of what a listing said. Replay can import discovered postings from career-ops' SQLite database in read-only mode, then manages its own snapshots and timeline.
This is a one-time, user-initiated import—not live sync. Replay does not change the career-ops database or import application statuses and private notes. Both projects are local-first; Replay is explicitly a personal-use prototype, not a hosted service.
A few projects from earlier in my learning journey
- chess-ai — a chess rule engine and Pygame front end with a Minimax opponent.
- airport-project — a Java departure-management system for a simulated airport, built as a group project.
- elderly-users-app — a JavaFX app designed to make everyday tasks simpler for non-technical users.
- unsdg-website — a responsive site for the UN Sustainable Development Goals.
Junior and entry-level software engineering roles in the UK — remote, or London-based. I work mostly with Python and Java, and have a particular interest in graphics and building software from first principles.
