I build software and hardware for medicine and science.
Radiology interfaces, molecular viewers, and ESP32 dashboards. I design them, write the code, and build the boards they run on.
See the workI study human biology at UC San Diego and build the tools I wanted while studying it — a molecule viewer that renders real geometry, a radiology site people can actually navigate, a car dashboard running on a board I soldered. Most of it starts as something I needed and couldn't find.
Each of these started as a module on a board — a screen, a sensor, and just enough firmware to prove one idea. The screens below are live, running the same readout the real project does. Pick a board to open it.
Grouped by what they're for. Every one of these is live — click through to the real thing.
General and organic chemistry
Atoms are drawn as characters, and the expression is computed from the valence shell rather than picked from a set of animations: unpaired electrons read as anxious, a filled octet reads as calm. Bonding two atoms changes both faces because it changes both shells. One model owns elements, bonds, lone pairs and mood; every screen reads from it.
Expression is a function of one integer: how many electrons are still unpaired. Fill the octet and the face resolves. Nothing about it is decorative.
Molecules are assembled a step at a time. Double and triple bonds form by tapping the rail, so O₂, N₂ and CO₂ each take an extra step, and everything lands at textbook VSEPR projections.
Anything built reads back as molecular formula, Lewis dots, structural lines and skeletal shorthand — the four ways a chemistry course asks for the same structure.
51 lessons across 16 units, from a first covalent bond to aromaticity, enolates, curved arrows and radical chains, written in the vocabulary the course actually uses.
Parenthesis-aware molar mass, dilution and percent-yield calculators alongside persistent notes, plus 18 organic cards scheduled by Leitner box.
Progress lives on device and in the user's own private CloudKit database, which I can't read, with an automatic local-only fallback. The App Store privacy answer is "we don't collect data."
Study notes, vector ink
An iPad notebook with no PencilKit anywhere — strokes come from raw touches, live as versioned JSON paths, and redraw as vectors at every zoom. Scanning does not keep a filtered photo: the page becomes editable ink, with printed ruling stripped and text recognized for search.
Committed strokes re-rasterize through a tiled layer, so writing stays sharp at 6× instead of blowing up as a bitmap. Nothing about how ink looks or stores comes from PencilKit.
The scroll view only accepts finger pans, so a Pencil physically cannot scroll and a finger cannot draw unless finger drawing is switched on. Two-finger tap undoes.
Strokes score against line, arrow, rectangle, ellipse, triangle, diamond. Hold about a second and the best fit wins; lift normally and the ink stays exactly as drawn.
Orientation, threshold, and ruling removal are derived from the page — not preference knobs. Thin marks get centrelines; filled marks get outlines, then both erase like ink.
Templates plus draggable shapes, stickers, text boxes, and graph cards — with a persistent sticker library for the diagrams you reuse.
Ink and overlays live as versioned JSON in SwiftData, with a tolerant decoder so adding a field never silently wipes old notes. Bundle ready for private CloudKit sync.
A dedicated space for turning measurements into useful things. Configure printable parts, route a breadboard and export OpenSCAD, inspect models in 3D, run bench calculations, then download a file ready to make.