

Keychain project
An ultra-compact ESP32-C3 keychain device that displays UCLA dining menus and weather on an OLED screen with single-button control and nightly auto-updates.
- Size
- 38 × 17.8 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 7
- Nets
- 15
- Pads
- 38
- Tracks, vias
- 22, 0
- Pours
- 1
- Routed
- Yes
- KiCad
- KiCad 9.0 (file 20241229)
- Created
- 22 Jul 2025
- Updated
- 23 Jan 2026
Overview
Keychain project is an open-source printed circuit board by jackshisd, from the jackshisd/Dining-Buddy repository on GitHub. It is a 2-layer board of 38 × 17.8 mm with 7 parts on 15 nets, routed with 22 tracks and 0 vias.
It is built around the ESP32-C3. Its parts include 2 resistors, 2 ICs, 2 diodes and 1 switch. It belongs with the lEDs and displays boards and the ESP32 and RISC-V boards of this library.
Main components
1README
README.mdDining Buddy v6.3
ESP32-C3 OLED Keychain for UCLA Dining Menus + Weather Display
🆕 Newest Features 6.0 -> 6.3
- Safe Wi-Fi Shutdown: Device now safely enters deep sleep when unable to connect to Wi-Fi.
- Manual Wi-Fi Retry: Long press the button to retry Wi-Fi connection without rebooting.
- Smarter Menu Downloads: Optimized algorithm avoids redundant downloads, saving time and bandwidth.
- Bug Fixes & Stability: Various minor improvements for a more reliable experience.
- Custom Enclosure: 3D-printed and designed a protective case for portability.
- PCB Revision 2: Updated layout for smoother button presses and improved assembly.
Overview
Dining Buddy is an ultra-compact ESP32-C3-based keychain device that displays UCLA dining hall menus and real-time weather, with full offline functionality, minimal power use, and intuitive controls—all on a tiny OLED screen.
Menus are downloaded once daily and displayed with smooth auto-scrolling. The device also includes a date selection mode, hall switching, and a live weather page. It deep sleeps after 30 seconds of inactivity and wakes automatically every night at 2:30 AM to rotate cached menu files and download new ones.
All interaction is handled with a single button, and menu data is stored in SPIFFS. The PCB was custom-designed in KiCad for a minimal, keychain-friendly form factor.
Photos
Prototype
Finished Keychain
Finished Solder Assembly
Schematic
PCB
Features
- 📅 View current and future dining menus (up to 6 days)
- 🏛️ Supports Bruin Plate, Epicuria, De Neve, and Rendezvous
- 🌦️ Weather fetch from wttr.in
- 🕒 Deep sleep with scheduled nightly wake (2:30 AM)
- 📡 Wi-Fi download over UCLA Wi-Fi or eduroam
- 🪛 Single-button interaction (short, long, double press)
- 🔋 OLED shuts off in deep sleep to preserve battery
- 🧾 All menus saved as clean, compact
.menufiles
🔧 Bill of Materials
| Component | Description |
|---|---|
| ESP32-C3 | Seeed Studio ESP32-C3 dev board |
| OLED Display | 0.91" I2C SSD1306 (128×32) |
| Push Button | 6mm tactile push button |
| Custom PCB | Designed in KiCad for compact layout |
| 0603 Resistor (optional) | 220Ω for LED indicator |
| 0603 LED (optional) | Miscellaneous LED feedback |
🕹 User Guide
Navigation is controlled by one button:
| Press Type | Action |
|---|---|
| Short Press | Next menu section |
| Long Press | Switch to next dining hall |
| Double Press | Enter/exit date select mode |
| Long in Date Mode | Show weather |
| Short in Date Mode | Scroll day forward |
| Double in Date Mode | Confirm date + return to menu |
| Inactivity (30s) | Enter deep sleep |
Modes:
- Normal Mode: Default menu viewing mode with auto-scroll
- Date Select Mode: Choose a day (up to 5 days ahead)
- Weather Mode: Shows date, time, and latest weather
How Menus Are Managed
- On first boot, menus for the next 5 days are downloaded.
- Every night at 2:30 AM, yesterday’s menus are deleted, future menus are shifted forward, and the new sixth day is fetched.
- Menu data is extracted from HTML pages and saved as readable text.
Setup Instructions
- Flash the ESP32-C3 with the
DiningBuddysketch using Arduino IDE. - Add your local Wi-Fi or eduroam credentials to
LOCAL_SSID,LOCAL_PASS, andEAP_*fields. - On boot, the device downloads menus and displays the current one.
- Power off is automatic after inactivity; just press the button to wake.
Hardware
- MCU: ESP32-C3 (Wi-Fi, deep sleep capable)
- Display: 128×32 OLED (SSD1306 via I2C)
- Button: Wired to GPIO 2 (input with pull-up)
- LED: Optional, wired to GPIO 21 via 220Ω resistor
- Power: LiPo or USB 5V
- PCB: Designed in KiCad for ultra-compact fit on a keychain
Future Improvements
- Battery charging circuit on PCB
- Auto time zone detection via Wi-Fi
- Menu item filtering (vegetarian, vegan, etc.)
- BLE companion app?
👤 Author
Jack Shi
📧 jackmshi@ucla.edu
🔬 UCLA Electrical Engineering
Parts
7| Qty | Value | Footprint | References |
|---|---|---|---|
| 2 | 220 | Resistor_SMD:R_0201_0603Metric_Pad0.64x0.40mm_HandSolder | R1, R3 |
| 2 | LED | LED_SMD:LED_0201_0603Metric_Pad0.64x0.40mm_HandSolder | D1, D2 |
| 1 | ESP32-C3 | personalmodules:MODULE_113991054 | U1 |
| 1 | SW_Push | Button_Switch_THT:SW_PUSH_6mm | SW1 |
| 1 | ~ | personalmodules:SSD1306-0.91-OLED-4pin-128x32 (REVERSED) | U2 |
Similar boards
- 4 layers85 × 56 mm

- 4 layers90 × 50 mm

Greenmobi bms
G-Pereira/greenmobi-bms
A VESC compatible battery management system
141 parts31CERN-OHL-S-2.0 - 8 layers35 × 35 mm

OpenAIO
OpenDrone-hw/OpenAIO
Open-source AIO for 2-6S toothpick quads: flight controller, 4-in-1 AM32 ESC and ExpressLRS receiver, 25.5x25.5 mm.
343 parts19CERN-OHL-S-2.0 - 4 layers40 × 30 mm

- 2 layers30 × 18 mm

- 2 layers45.7 × 21.3 mm

- 2 layers70 × 54 mm

- 4 layers12.7 × 22.3 mm

Questions
How big is the Keychain project PCB?
It measures 38 × 17.8 mm and has 2 copper layers, 1.6 mm thick.
What parts does the Keychain project use?
7 parts, built around the ESP32-C3. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
Where can I download the Keychain project KiCad files?
From the jackshisd/Dining-Buddy repository on GitHub, at the commit this page was made from: the board is Keychain_project/Keychain_project.kicad_pcb and its schematic Keychain_project/Keychain_project.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Keychain project design in my own project?
Its repository states no licence, so its author keeps all rights: ask jackshisd before reusing the design.