Physical chemistry simulator controlled from a browser.
Chemistry education in school is almost entirely symbolic: equations on a board, molecular diagrams in a textbook. The reactions happen in a flask during a lab session, and then they're over. There's no way to interact with the process, slow it down, reverse it, or ask "what happens if I change this variable."
I wanted to build something you could actually touch and control.
ChemX is a physical simulator where chemical reactions happen in hardware. LEDs represent atomic bonds forming and breaking. An electromagnet simulates molecular attraction and repulsion. A web interface lets you select a reaction, adjust variables, and watch it play out on the physical rig in real time. Actual hardware responding, not a simulation on a screen.
It was my first hardware project. I didn't have a framework for thinking about constraint-based building at the time, but this is where I learned it: components don't work the way documentation says they do, and the interesting problems are always at the boundary between the physical and the digital.
Arduino Uno driving a custom PCB with LED arrays and an electromagnet module. Each reaction is encoded as a timed sequence of hardware events.
Browser-based control panel served from the Arduino. Select reaction type, trigger it, watch the rig respond in real time.
Acid-base neutralisation, oxidation-reduction, and precipitation reactions, each with distinct LED patterns and electromagnet states.
The Arduino's 2KB of RAM meant every byte mattered. Taught me to optimise before I knew what optimisation was.