My major project is first, then the applications I consider my best
shipped work. Everything with a link is public on
GitHub with source, build
instructions and commit history.
Wireless Web Controller for RS232 CD Players
University major project, 2025 to 2026
An embedded controller built on the Raspberry Pi Pico for Denon
DN‑C620 and DN‑C680 professional CD players. The Pico
serves a responsive web control interface over the network and
translates interactions into real time serial commands over RS232,
turning legacy broadcast AV equipment into a device you can drive
from any browser on the network.
This was the largest single piece of engineering I have done. I
ran it as a full build rather than a coursework exercise:
requirements gathering against the hardware's serial
specification, interface design, implementation across the
firmware and front end, a test strategy against real hardware, and
written documentation for assessment. It brought together hardware
interfacing, networking and front end work in one system.
Source available on request. This repository is
private because the work is assessed, and publishing it would risk
an academic unfair practice issue for me and for future students.
I am glad to walk recruiters and hiring managers through the code,
the design decisions and the test results directly. Please
get in touch.
Raspberry Pi Pico
RS232
Embedded web
C
Python
One of my two best shipped applications
A macOS menu bar app that holds the system input device on the
microphone you actually chose. Connecting Bluetooth headphones
normally hijacks the input and drags the whole connection into low
quality HFP mode. MicGuard watches Core Audio for device changes
and puts the input back. Choosing a different microphone from the
menu sets a new preference that survives reconnects.
It builds entirely with the Xcode command line tools, so no full
Xcode install is required, and it ships with a Make driven
workflow and unit tests covering the device selection rules.
Swift 6
Core Audio
AppKit
Make
One of my two best shipped applications
A C++ component for foobar2000 that publishes the currently
playing track to Discord: title, artist, a live progress bar,
audio quality and album art. Written against the foobar2000 SDK
and the Discord rich presence API, which meant working inside
somebody else's plugin architecture and lifecycle rather than my
own.
C++
foobar2000 SDK
Discord RPC
Windows
A terminal application in Go that serves up a set of daily items:
a word, a fact, a maths question, a trivia question, a tarot card,
an artwork, news, music, music trivia and a recipe. Each one comes
from a different public API, so the project is really an exercise
in consuming ten third party services cleanly and handling the
ways each of them fails.
It is built with Bubble Tea as a terminal first interface. The
architecture is the part I am happiest with: every feature lives
in exactly two files, an API client and a feature page, and the
app shell picks them up from a registry, so adding a feature never
means editing the app package. Thirteen test files cover the
clients and the parsing.
Go
Bubble Tea
REST APIs
TUI
Unit tested
An interpreted programming language written from scratch in C: a
hand written lexer, a recursive descent parser producing an AST,
and a tree walking evaluator. It supports variables, arithmetic,
conditionals, while loops, first class functions with parameters
and return values, and executing .rat source files.
Symbol table handling and local scope simulation were the
interesting parts, and the reason I built it: I wanted a concrete
understanding of runtime environments rather than a described one.
C
Lexing and parsing
AST
Interpreters
A desktop dictation and transcription app in Python, built with
PyQt6 and OpenAI Whisper. Live dictation records from the
microphone in short chunks and appends text as you speak; audio
transcription takes an existing file and saves a transcript.
Transcription runs locally through Whisper rather than in the
cloud.
Processing is asynchronous so long transcriptions never block the
interface. It is aimed at people who find writing harder than it
should be, which shaped the defaults and the wording throughout.
Python
PyQt6
OpenAI Whisper
Accessibility
A native macOS app that converts video and audio by driving
ffmpeg. Drop files in, pick a target format, press Convert. The
point is putting a real interface over a tool whose power is
otherwise locked behind a wall of command line flags.
Swift
ffmpeg
macOS
A command line calculator in Go that works out your percentage
average across a module. Small, but it replaced a spreadsheet I
kept getting wrong.
Go
CLI
A Team Fortress 2 server plugin in SourcePawn that tracks idle
players and manages AFK timeouts, written for a live game server
with real players connected to it.
SourcePawn
Game servers