2FA Brush #
a security brush.
what it is #
an electric toothbrush that doubles as a hardware security key — a yubikey you brush your teeth with. charges over usb-c on the bottom, and that same port plugs into your laptop to authenticate and store credentials.
why #
the security key problem is a habit problem. keys get lost, left in drawers, forgotten on other keychains. but a toothbrush has the strongest habit loop of any object you own — you hold it twice a day, every day, and it lives in exactly one place. the 2FA brush piggybacks identity on hygiene: the one device you never forget to touch.
also funny — possession-factor auth meets the most intimate possession there is. nobody borrows your toothbrush.
how it might work #
- secure element in the handle (same class as yubikey / fido2 keys) — webauthn, totp, ssh keys, pgp
- usb-c on the bottom: drops into a charging dock at night, plugs straight into the laptop when you need to auth
- brushing itself as a liveness check — the accelerometer knows your brushing signature; two minutes of brushing could even unlock the day's credentials, so a stolen brush is just a brush
- tap-to-auth via nfc for phones, so it never needs to leave the bathroom for mobile 2fa
- heads are replaceable; the identity lives in the handle
form factor #
a normal good electric brush — matte body, single button, weighty in a reassuring way. the only tell is a tiny led near the base that breathes when it's holding an active session. bottom face is a flush usb-c port ringed in steel.
open questions #
- water + usb-c — fully sealed port, or charging contacts on the dock with usb-c only for data?
- do credentials travel with the brush or pair to it? (lost-brush recovery story)
- family bathroom problem — four identical brushes, four identities; color rings? brushing-signature disambiguation?
- name: 2FA Brush vs. security brush vs. something brushier
story video #
a ~29s instagram-story cut (1080×1920) with a jeffrey voiceover lives
in ../story/:
vo.txt— the narration (jeffrey-pvc viapop/bin/say.mjs --timestamps; cuts and captions are timed from the elevenlabs word alignment, nothing hand-tuned). captions carry no commas — YWFT Processing's comma reads as a stray period.gen-motion.mjs— Seedance 2.0 motion pass (one shot per slide: brushing → usb-c plug-in → coding → brush close-up → POV reading the sheet at the sink) via thepop/lib/motion-pipeline.mjsharness.--dry-runto price,--only NAME --forcere-rolls.build.mjs— cuts the motion takes against the VO timeline, burns in the YWFT Processing captions, thenchrome.mjsadds the Twofa side stamps. slides with no take zoompan-fall back.
rebuild: node gen-motion.mjs (if takes are missing), then
node build.mjs from story/.