Skip to main content

Command Palette

Search for a command to run...

Building a GitHub Dashboard on ESP32 E-Paper

Updated
Building a GitHub Dashboard on ESP32 E-Paper
N

HI there 👋

I'm Nir Adler, and I'm a Developer, Hacker and a Maker, you can start with me a conversation on any technical subject out there, you will find me interesting.

I built this mostly because playing with hardware is fun. There's something satisfying about making a physical thing that sits on your desk and actually does something. Plus, let's be honest - having a little e-paper display showing live GitHub stats makes your desk look way more interesting.

Does it solve a problem? Kind of. I can glance at my notifications and contribution stats without opening a browser. But that's the excuse I gave myself. The real reason was wanting to build something cool with an e-paper display and ESP32.

Screens

Press Button (GPIO 39) to cycle through:

  1. Notifications - Reviews, mentions, assignments

  2. Profile - Repos, stars, open PRs, followers

  3. PR Overview - Open, Waiting to review, Ready to merge, Request changes

Each screen fetches fresh data when you switch to it.

Hardware

LILYGO T5 V2.3.1 (~$15-20) - ESP32 with 2.13" e-paper and two built-in buttons:

  • GPIO 39: Cycle screens

  • GPIO 0: Force refresh

That's it. Flash and go.

How It Works

Data fetching:

  • REST API for notifications

  • GraphQL for profile/activity (smaller payloads)

  • Only fetches active screen data

  • Only refreshes display when data changes

Power:

  • Deep sleep between updates (default 10 min)

  • Wakes on timer or button press

  • Web server runs 30 seconds after boot for config access

Web Interface

First boot creates AP: "NotificationHub" (password: configure)
Connect and go to 192.168.4.1

Four tabs:

  • Dashboard - Status, refresh button

  • WiFi - Network config, admin password

  • Providers - GitHub token and username

  • Settings - Update interval

GitHub Token

Generate a Classic token with:

  • notifications

  • read:user

Add it in Providers tab.

Setup

  1. Flash firmware

  2. Connect to "NotificationHub" (password: configure)

  3. Go to 192.168.4.1 (or whatever your network assigns)

  4. Configure WiFi and admin password

  5. Add GitHub token and username

  6. Reboot

Updates every 10 minutes. Press buttons for manual control.

Built with Arduino MCP

Used arduino-mcp - connects Claude/Cursor to Arduino CLI:

"Compile for ESP32"
"Upload to board"
"Convert this PNG to C array"

Way faster than copy-pasting commands.

Claude Desktop config:

{
  "mcpServers": {
    "arduino-uvx": {
      "command": "uvx",
      "args": ["arduino-mcp"],
      "env": {}
    }
  }
}

API Endpoints

GET /api/status          # Current status
POST /api/refresh        # Force refresh
POST /api/reset          # Factory reset

Memory Handling

ESP32 RAM is tight:

  • Paged API requests

  • Dynamic JSON buffers

  • Independent screen state

  • Display hibernation during sleep

What's Next

Could add:

  • GitLab/Bitbucket support

  • Larger displays (4.2" or 7.5")

  • Historical graphs

  • Battery indicator

  • Webhooks for instant updates

  • 3D printed case

Stack

Hardware: LILYGO T5 V2.3.1

Software: ESP32 Arduino, GxEPD2, ArduinoJson

APIs: GitHub REST + GraphQL, NTP

Code: github.com/niradler/github-dashboard-esp32-epaper

Arduino MCP: github.com/niradler/arduino-mcp

License: MIT | Cost: ~$15-20 | Time: 1-2 hours

More from this blog

P

Piece by Piece

46 posts

Hi 👋, let me share a story with you. I don't want to overwhelm you, so I'm serving this story piece by piece.