A voice-controlled toy car: a phone rides on it and drives an FT232H over WebUSB in FTDI async bitbang mode.
JavaScript
0
187 commits
updated Oct 7, 2026
Turn a $4 toy robot into an AI robot, with an old phone as its brain.
Real dog: busy eating. Robot dog: on duty. — watch the Short, with sound
Kid: has questions. Robot: has attitude. — watch the Short, with sound
![]() | ![]() |
| Before: a line-following toy | After: the head is gone, the phone is the face |

The toy's own line-following chip is cut out of the loop. Four wires from the FT232H go straight to the inputs of the toy's motor driver and steering coil, and the phone switches those four pins over USB. Everything else — listening, understanding, deciding, talking — happens in a web page on the phone.
docs/hardware.md. Read its D6/D7 soldering warning
before you start.Your keys stay on the phone, in plain text in the browser's storage, and are
sent only to the providers you chose. There is no server in between. Using
the hosted copy still means trusting whoever serves the page, so if you would
rather not, serve your own: it is a folder of static files with no build step
(npx wrangler pages deploy web, or any HTTPS static host — the phone only
allows USB access from a secure page). See
Security.
It works end to end on one robot and one phone. Some hardware numbers are still unmeasured, and the barking routine's timings are first guesses that still need tuning on the car.
docs/hardware.md — wiring, pin map, every measurementdocs/development.md — reading the code, running it
locally, tests, security, deploymentdocs/instruments.md — the calibration page behind
the geardocs/ui.md — the robot's face and what each state meansdocs/promo-video.md — what making the video taught usA voice-controlled toy car: a phone rides on it and drives an FT232H over WebUSB in FTDI async bitbang mode.
JavaScript
0
187 commits
updated Oct 7, 2026
Turn a $4 toy robot into an AI robot, with an old phone as its brain.
Real dog: busy eating. Robot dog: on duty. — watch the Short, with sound
Kid: has questions. Robot: has attitude. — watch the Short, with sound
![]() | ![]() |
| Before: a line-following toy | After: the head is gone, the phone is the face |

The toy's own line-following chip is cut out of the loop. Four wires from the FT232H go straight to the inputs of the toy's motor driver and steering coil, and the phone switches those four pins over USB. Everything else — listening, understanding, deciding, talking — happens in a web page on the phone.
docs/hardware.md. Read its D6/D7 soldering warning
before you start.Your keys stay on the phone, in plain text in the browser's storage, and are
sent only to the providers you chose. There is no server in between. Using
the hosted copy still means trusting whoever serves the page, so if you would
rather not, serve your own: it is a folder of static files with no build step
(npx wrangler pages deploy web, or any HTTPS static host — the phone only
allows USB access from a secure page). See
Security.
It works end to end on one robot and one phone. Some hardware numbers are still unmeasured, and the barking routine's timings are first guesses that still need tuning on the car.
docs/hardware.md — wiring, pin map, every measurementdocs/development.md — reading the code, running it
locally, tests, security, deploymentdocs/instruments.md — the calibration page behind
the geardocs/ui.md — the robot's face and what each state meansdocs/promo-video.md — what making the video taught us