Music genre classifier on an FPGA
Verilog, Spartan-7, Vivado
Audio goes in a line-in, the genre comes out on an OLED. A 1024-point
FFT, a 26-band mel filterbank and a quantised neural net, all in
hand-written Verilog with no processor, no OS and no vendor IP. Fixed
point throughout, so every stage needed its own number format. 86.3% on
held-out samples, 67% on real music played into the board.
The hardest bug wasn't in the design. The board has 12 MHz and 100 MHz
oscillators, and I'd mapped the wrong one in the constraints file, so
the real sample rate was 8x off and every frequency landed in the wrong
band. Simulation never caught it, because a testbench invents its own
clock, and timing never caught it either.
GitHub
Web server on a disposable vape
C, Cortex-M0+, OpenOCD, 32 KB flash
A PY32F030 from a disposable vape, serving HTTP with no network
hardware. A uIP stack speaking SLIP over ARM semihosting, tunnelled
through SWD bit-banged on a Raspberry Pi's GPIO with no debug probe.
The pads on the vape's own board wouldn't take solder reliably, so I
designed a breakout PCB around the same chip and had it fabbed at
JLCPCB. That board is what's running the server.
It didn't work for two days. OpenOCD was silently discarding every
incoming packet unless the chip happened to already be blocked in a
read, so traffic went out and nothing ever came back. Patching OpenOCD
to buffer that data instead of dropping it fixed it.
Live
GitHub
Attenda Health (Grand Prize - Second Place Overall)
WildHacks 2026, Next.js, React, Supabase
I pitched this one to my team after volunteering at a hospital, where
every patient request funnelled through a single central desk. Nurses
had to walk back for assignments, urgent medical needs sat in the same
queue as complaints about the food, and patients who didn't speak
English waited on a translator before anyone could help them.
We built a mobile app that puts the call bell in the nurse's pocket
instead. Voice requests are transcribed and translated automatically, a
bed map highlights in sync with the queue so you can see who's asking
from where, and an "On the Way" button signals back to the patient's
room. Repeated calls about the same thing collapse into one card with a
counter rather than spamming the list.
Devpost