← joshdavidoff.com

Experiment

Bedside dashboard

A vibecoded bedside display that turns the information I check every day into one small physical interface.

Why I built it

I wanted to be able to leave my phone outside of my bedroom without missing out on the things I check anyway, like weather, subway arrivals, calendar, time, smart-light controls, and… obviously, the Mets score.

What it does

The display pulls live scores for the Mets, Nets, Jets, and Liberty (plus the baseball playoffs), weather, subway arrivals, and my calendar, and it can switch the LIFX lights between scenes. It dims at night, protects the screen from burn-in, and falls back to the last good data when a source goes down. Bluetooth buttons and a page on my phone control it.

The bedside display on its lamp base, showing the weather: 72 degrees, sunny, with the day's high and low, air quality, and wind. The bedside display showing tonight's game: Brooklyn against Miami at 7:30 PM Eastern, with both teams' records.
The display on my nightstand: the weather, and tonight's game.

How I built it with AI

This is a vibecoded prototyping project, not a claim of expertise in any of these technologies. I used language models to break the idea into pieces, reason through unfamiliar libraries, debug hardware and server issues, and keep adding to it as I figured out what I wanted.

An ESP32 microcontroller drives a tiny 128×64 OLED screen, and a Python server does the rest by gathering the data, choosing what to show, and handling the buttons and phone controls.

Architecture

External data sources → Python control plane → canonical display payload → ESP32 OLED display

BLE buttons and the phone UI send inputs back to the control plane, which updates state and refreshes the display.

What I learned

I use AI most on work outside my experience, and this project is the clearest example. I had never worked with ESP32 firmware or Bluetooth before it. I described what I wanted and tested each version on the real hardware until it worked.

All projects