Token
- 3 Devlogs
- 10 Total hours
A hardware TOTP authenticator built on the LilyGo T-Embed CC1101. Stores your 2FA secrets encrypted on device, generates codes offline, and types them out via USB HID at the press of a button.
A hardware TOTP authenticator built on the LilyGo T-Embed CC1101. Stores your 2FA secrets encrypted on device, generates codes offline, and types them out via USB HID at the press of a button.
Devlog #3
The UI is now functional The encoder scrolls between accounts and I added a full settings menu with brightness control, time sync options, and UTC offset.
Time sync is working over both WiFi and Bluetooth. WiFi NTP connects to pool.ntp.org and syncs in UTC automatically. The Bluetooth side uses GATT Current Time Service which is the same protocol smartwatches use to get time from a phone with no app needed. You just pair and the phone OS pushes the time automatically. The catch with BLE CTS is that it sends local time rather than UTC, so there’s a UTC offset setting in the menu to correct for this.
Codes are still placeholder 000000 until TOTP generation gets wired which will be in next devlog
Devlog #2
The main account list UI is looking good and it’s starting to look like a real product. It has the account name, email, and TOTP code laid out per row with the selected account highlighted. Placeholder 000000 codes for now since TOTP generation isn’t done yet, but the layout is exactly what I had in mind. The “hold side button 5s to power off” hint at the bottom is also working.
Also got carried away with designing UI and made the boot animation. characters rain across the screen like cmatrix with a key icon and TOKEN text fading in over the top before dropping into the account list. Small detail but it makes the device feel polished from the moment you turn it on.
Next up is figuring out how to get the time accuratly and actually generate TOTP codes on the esp
demo video: https://i.tomttfb.com/vid/39fpqg.mp4
Devlog #1
Never done any Arduino or ESP32 development before so this has been a learning curve. Spent the first chunk of time just getting PlatformIO set up in VS Code and figuring out how the T-Embed CC1101 board works. lot of reading tutorials and LilyGo’s example code.
Got there in the end though with Hello World on the display in green with the RGB ring doing a rainbow pattern on the encoder. Small win but it means the toolchain works, the board is flashing correctly, and I can actually start building Token properly now.