All projects

Phone Box

A 3D-printed phone lockbox with a servo latch, a touchscreen countdown and a tunable emergency override, paired over Bluetooth to an iOS app. Working prototype.

The Phone Box prototype with its touchscreen showing a running focus timer
$44Prototype parts cost
2Enclosure revisions
5Printed fit-test coupons
~1 AServo stall current, moved to the battery rail

The problem

App blockers are two taps from being turned off. A phone you physically can't reach works. The design problem is the emergency exit: too rigid and you miss a call that matters, too loose and the lock is pointless. So the override takes a number of presses the user sets, every early release is logged, and an incoming call flashes the screen while the latch stays shut.

What I did

  • Designed the two-part enclosure in SolidWorks around the ESP32-S3 touchscreen board, servo latch, LiPo and switches, through two full revisions
  • Printed fit-test coupons for the hinge, charging port, screen bezel, power switch and locking tab, and checked each against the real parts before printing the full box
  • Found an intermittent servo failure on the bench, traced it to two causes (PWM timer drift and an undersized 3.3 V rail), and moved the servo to the battery rail with bulk capacitance
  • Hand-modified a MAX17043 fuel-gauge board (cut traces, soldered and crimped it onto the existing I2C bus) for a battery percentage from a fuel-gauge chip instead of a raw voltage
  • Wrote the behavior specs for the lock, override and call alert, and tested every firmware and app build on the device

What broke and what I changed

The servo died, only sometimes. Bench-cycling the lock showed two faults at once. The CPU clock scaled down under the servo's PWM timer, and a servo that pulls about 1 A at stall sat on a 3.3 V rail that couldn't supply it. The fix was a 50 Hz re-assert before every move, the servo moved to the battery rail with bulk capacitance, and a brownout counter that recovers the box on its own.

The battery reading was wrong. The board's ADC read consistently off against a multimeter. The fuel gauge estimates state of charge from the cell's voltage curve rather than reading raw voltage, and it shares the existing I2C bus, so it costs no extra pins.

Fit before full prints. Small printed coupons caught clearance problems at a few grams of PLA each, instead of a full enclosure each time.

Results

The lock cycles reliably after the power fixes. The firmware, app, cloud rules and Bluetooth protocol are covered by 2,500+ automated tests (written by the AI agents to my specs), and the iOS app passed TestFlight beta review on 6 September 2026.

Next: CAD renders and teardown photos, and a cheaper display board (about $15) to cut the parts cost.

Override screen counting presses up to 25
Emergency override: 25 presses by default, tunable from 5 to 500
Battery screen showing state of charge
Battery screen read from the hand-modified fuel gauge (frame from video)
Wiring: ESP32-S3, servo on the battery rail, fuel gauge on I2C, lock and override switches
Wiring. The fuel gauge shares the touchscreen's I2C bus, so it costs no extra pins (click to enlarge)
Every screen on the box (13)ShowRendered from the box's real firmware UI code on a laptop, with sample data. The font is a stand-in for the panel's built-in one; the layout and pixel geometry match the 172×320 screen.
  • Phone Box screen: Timer, gauge faceTimer, gauge face
  • Phone Box screen: Timer, digitalTimer, digital
  • Phone Box screen: Timer, analogTimer, analog
  • Phone Box screen: Timer, elapsedTimer, elapsed
  • Phone Box screen: Set and lockSet and lock
  • Phone Box screen: Emergency overrideEmergency override
  • Phone Box screen: Incoming callIncoming call
  • Phone Box screen: BatteryBattery
  • Phone Box screen: Settings 1 of 2Settings 1 of 2
  • Phone Box screen: Settings 2 of 2Settings 2 of 2
  • Phone Box screen: Setting detailSetting detail
  • Phone Box screen: Tag the sessionTag the session
  • Phone Box screen: Confirm topicConfirm topic
The iPhone app (7)ShowScreenshots of the real iOS build on an iOS 26 simulator, mostly in demo mode, a simulated box built for App Review. Demo sessions stay on the device and run at about five times speed, so the stats show a single 5-minute session.
  • Phone Box app: Home, box idleHome, box idle
  • Phone Box app: Set duration and tagSet duration and tag
  • Phone Box app: Home, lock runningHome, lock running
  • Phone Box app: Stats after a sessionStats after a session
  • Phone Box app: Calendar and recent sessionsCalendar and recent sessions
  • Phone Box app: New goalNew goal
  • Phone Box app: SettingsSettings
Next projectPasta Truss Bridge