Case study · 0→1 product · AI-assisted engineering · Milestone management
Project Eyesight
Some pumps announce failure on an analog gauge that nobody is standing in front of. So thirty $40 cameras learned to stand in front of them.
- Work
- Predictive-maintenance camera network
- Role
- Originator & project lead — requirements, firmware, enclosures, dashboard
- Stack
- ESP32-CAM ×30 → gateway ESP → serial relay → cloud CV → Streamlit
- Firmware
- AI-assisted C++ (I don’t hand-write C++; I specify, review, and test it)
- Hardware
- ~$40/pump · LiPo, 46-day battery budget
- Scale
- Proof of concept → 30 pumps in production
A pump trending toward failure often shows it first as a slow drift on a mechanical gauge. Walking the alley to read thirty gauges is a job nobody does often enough; hard-wiring transducers into a running fab is expensive and slow. The wedge: a camera the size of a matchbox that photographs the gauge, and computer vision that reads the photo.
I ran it like a product: written requirements, four milestones, a retrospective at each gate. The firmware was AI-written to my spec — deep-sleep cycles, wake-photograph-transmit, brownout handling — and bench-tested against a power budget before any of it touched production. That workflow — me using AI as a force multiplier with the judgment staying human — is half of what this project shows.
03.1The system
03.2The board
The project ran on four epics that doubled as milestones: prove it, enclose it, read it, scale it. The board below is a faithful recreation — real ticket shapes, invented keys.
Backlog 4
In progress 2
Done 27
03.3The power budget
Battery projects die by milliamps. The budget below was measured on the bench, not estimated — the deep-sleep line is why the whole thing works.
| State | Draw | Duty cycle | Share of budget | Note |
|---|---|---|---|---|
| Deep sleep | ~0.8 mA | >99% | 38% | the design center; everything else is negotiated against it |
| Wake + camera init | ~120 mA | <0.3% | 21% | capped by warm-boot config restore |
| Capture + Wi-Fi transmit | ~240 mA peak | <0.2% | 33% | batched by gateway to cut radio-on time |
| Brownout margin | — | — | 8% | reserve; LiPo derated for ambient temperature |
RESULT: 46-day measured battery life per node · swap cadence folded into existing PM walks
03.4Four enclosures, one lesson per revision
03.5What the retrospective said
Scaling was the real project; the prototype was the fun part. Between pump 1 and pump 30 came auto-recovery for silent nodes, a camera-health panel, batched uploads to protect the power budget, and an install checklist so any technician — not just me — could mount a node. The AI wrote firmware in an afternoon that would have taken me a month; the requirements, the power budget, and the four enclosure revisions are why it worked. Specification is the durable skill.