Skip to the content
2 layers38 × 17.8 mmKeychain project, the printed circuit board in 3D

Keychain project

jackshisd/Dining-Buddy2

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

1

README

README.md

Dining 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

Prototype

Finished Keychain

Prototype Prototype

Finished Solder Assembly

Front Back Side

Schematic

Schematic

PCB

PCB Top PCB Bottom

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 .menu files

🔧 Bill of Materials

ComponentDescription
ESP32-C3Seeed Studio ESP32-C3 dev board
OLED Display0.91" I2C SSD1306 (128×32)
Push Button6mm tactile push button
Custom PCBDesigned 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 TypeAction
Short PressNext menu section
Long PressSwitch to next dining hall
Double PressEnter/exit date select mode
Long in Date ModeShow weather
Short in Date ModeScroll day forward
Double in Date ModeConfirm 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

  1. Flash the ESP32-C3 with the DiningBuddy sketch using Arduino IDE.
  2. Add your local Wi-Fi or eduroam credentials to LOCAL_SSID, LOCAL_PASS, and EAP_* fields.
  3. On boot, the device downloads menus and displays the current one.
  4. 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
QtyValueFootprintReferences
2220Resistor_SMD:R_0201_0603Metric_Pad0.64x0.40mm_HandSolderR1, R3
2LEDLED_SMD:LED_0201_0603Metric_Pad0.64x0.40mm_HandSolderD1, D2
1ESP32-C3personalmodules:MODULE_113991054U1
1SW_PushButton_Switch_THT:SW_PUSH_6mmSW1
1~personalmodules:SSD1306-0.91-OLED-4pin-128x32 (REVERSED)U2

Similar boards

  • 4 layers85 × 56 mmPslab mini, the printed circuit board in 3D

    Pslab mini

    fossasia/pslab-mini-hardware

    PSLab Mini Hardware https://pslab.io

    182 parts1.2kApache-2.0
  • 4 layers90 × 50 mmGreenmobi bms, the printed circuit board in 3D

    Greenmobi bms

    G-Pereira/greenmobi-bms

    A VESC compatible battery management system

    141 parts31CERN-OHL-S-2.0
  • 8 layers35 × 35 mmOpenAIO, the printed circuit board in 3D

    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 mmPixie device, the printed circuit board in 3D

    Pixie device

    firefly/pixie-device

    Firefly Pixie hardware wallet design, schematics and PCB

    64 parts18
  • 2 layers30 × 18 mmEsp usb, the printed circuit board in 3D

    Esp usb

    cheyao/esp-usb

    ESP32 Dev Board in a USB Port

    28 parts17
  • 2 layers45.7 × 21.3 mmESP32-C3 breakout, the printed circuit board in 3D

    ESP32-C3 breakout

    TadeasFrycak/esp32-c3

    Minimalistic PCB design for ESP32-C3 chip

    32 parts17GPL-3.0
  • 2 layers70 × 54 mmBalance 1.0, the printed circuit board in 3D

    Balance 1.0

    MagdiLaoun/MLSinglePendulum

    Files regarding the single pendulum

    9 parts15

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.