4 projects · pick one below

Labs.

Projects I built outside of class, turned into things you can play with. Everything runs right here in your browser. Nothing to install, and you can't break anything.

01 KiCad · SPICE · JLCPCB assembly 2026

Ozone sensor board

During my hardware internship at AtmoSense, I redesigned the circuit board inside their ozone sensor, had it made, and tested it against real ozone.

41.9 × 48.3 mm
board size
262×
how much the sensor reacted to ozone
5 / 5
built boards that powered on
Summer 2026
internship

Built during my hardware internship at AtmoSense. Some details of the design are hidden for confidentiality.

Demo · 3D model

Spin the board around

  1. Drag to turn it.
  2. Scroll or pinch to zoom in.
  3. Tap Top view or Side view to jump to an angle.
Loading model…

The circuit board I designed, exported straight from the design files.

Demo · sensor sim

Make the sensor react

  1. Drag the O₃ box closer to the board.
  2. Watch the line climb. Closer means a bigger jump.
  3. Turn the generator off and watch it slowly calm down.

The generator turns on by itself in a moment.

0 min in

Time runs fast because real sensors take minutes to react. How fast it rises and recovers comes from real test logs from the board. How ozone spreads with distance is a rough guess, not a measurement.

02 KiCad · C++ · PlatformIO 2026

HyperBrush

Electrical lead on a student startup building a powered toothbrush. I handle the motor drive, power and firmware. The details are under NDA, so the demo is a generic motor driver.

Electrical lead
role
Fall 2026
started
Motor · power · firmware
what I own

HyperBrush work is under NDA, so this is a generic motor driver built from textbook values. No HyperBrush parts, circuits or measurements are shown.

Demo · circuit sim

Drive a DC motor

  1. Press Start.
  2. Change one thing at a time.
  3. Read the line under the scope. It tells you what just happened.

Motor is off. Press Start motor.

How much of each cycle the switch is on.

How hard the motor has to push.

Switch

Loses about a volt, so the motor gets less.

Flyback diode

Gives the motor's current somewhere safe to go.

03 ESP32 · C++ · FreeRTOS 2025

Wireless microscope

A Wi-Fi microscope camera. Open a web page on your phone and you get a live view, plus full-quality photos when you want them.

160×120
live view, 5 frames a second
1024×768
photo size
180 s
idle before it sleeps to save battery
0
apps to install
Demo · control page

Use the microscope

  1. Drag the circle on the photo to move the lens.
  2. Watch the live view follow it.
  3. Press Capture for a full-quality picture.

Under the lens

Top-down photo of the AtmoSense V5.0 board used as the specimen

Status

Address
m5microscope.local
Battery
87%
Sleeps in
180 s

Picture settings

Live view low-res so it streams fast

LIVE
Video stream active.

Your picture full quality

Press Capture
Ready
Behind the scenes: device log

The real microscope serves this same page over Wi-Fi. The video size, frame rate, sleep timer and the steps in the device log all match the real firmware. The thing under the lens is one of my circuit boards.

04 Java · JavaFX · Maven 2025

Pacman, with greedy ghosts

A maze game I wrote in Java. The ghosts follow one simple rule: always step toward you. Rebuilt here so it runs in your browser.

19 × 19
maze grid
200 ms
between ghost moves
4
moves each ghost considers
Demo · game

Play it

  1. Tap the board or press an arrow key.
  2. Eat the dots, dodge the ghosts. On a phone, swipe.
  3. Grab a cherry and the ghosts run from you for 5 seconds.
Tap to playor press an arrow key

I first wrote this as a desktop game in Java. This browser version keeps the same maze, ghost speed and ghost logic.