{"id":50509703,"url":"https://github.com/dmatking/esp32-gh-dashboard","last_synced_at":"2026-06-02T19:01:12.378Z","repository":{"id":349077664,"uuid":"1200838503","full_name":"dmatking/esp32-gh-dashboard","owner":"dmatking","description":"GitHub repository traffic vanity dashboard for the classic CYD cheap yellow display 2.8\" version and others.","archived":false,"fork":false,"pushed_at":"2026-05-27T03:34:14.000Z","size":7026,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-27T05:13:42.477Z","etag":null,"topics":["cheap-yellow-display","cheap-yellow-display-esp32-2432s028r","cyd","embedded","esp-hosted","esp-idf","esp32","esp32-c6","esp32-p4","github-api","github-dashboard","github-stats","github-stats-shower","mipi-dsi","waveshare"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dmatking.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-03T22:14:33.000Z","updated_at":"2026-05-27T03:34:18.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/dmatking/esp32-gh-dashboard","commit_stats":null,"previous_names":["dmatking/gh-stats-dashboard","dmatking/esp32-gh-dashboard"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/dmatking/esp32-gh-dashboard","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmatking%2Fesp32-gh-dashboard","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmatking%2Fesp32-gh-dashboard/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmatking%2Fesp32-gh-dashboard/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmatking%2Fesp32-gh-dashboard/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dmatking","download_url":"https://codeload.github.com/dmatking/esp32-gh-dashboard/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmatking%2Fesp32-gh-dashboard/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33833277,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-02T02:00:07.132Z","response_time":109,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cheap-yellow-display","cheap-yellow-display-esp32-2432s028r","cyd","embedded","esp-hosted","esp-idf","esp32","esp32-c6","esp32-p4","github-api","github-dashboard","github-stats","github-stats-shower","mipi-dsi","waveshare"],"created_at":"2026-06-02T19:01:09.526Z","updated_at":"2026-06-02T19:01:12.371Z","avatar_url":"https://github.com/dmatking.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# esp32-gh-dashboard\n\nA GitHub traffic dashboard built primarily for the wildly popular **\"CYD\"** family (Cheap Yellow Display — the cheap ESP32-with-screen modules). Also runs on the higher-end Waveshare ESP32-P4-WIFI6-Touch-LCD-4B for the 720×720 round-display crowd. Shows views, clones, stars, and day-over-day deltas for all your repositories, cycling through a summary screen and a per-repo detail screen for each.\n\n\u003cimg src=\"assets/cyd_summary.png\" alt=\"CYD 2.8 summary screen\" width=\"320\" hspace=\"8\"\u003e\u0026nbsp;\u003cimg src=\"assets/cyd_repo.png\" alt=\"CYD 2.8 repo screen\" width=\"320\" hspace=\"8\"\u003e\n\n\u003cdetails\u003e\u003csummary\u003eCYD 3.5\" screenshots\u003c/summary\u003e\n\n\u003cimg src=\"assets/cyd35_summary.png\" alt=\"CYD 3.5 summary screen\" width=\"480\" hspace=\"8\"\u003e\u0026nbsp;\u003cimg src=\"assets/cyd35_repo.png\" alt=\"CYD 3.5 repo screen\" width=\"480\" hspace=\"8\"\u003e\n\nThe 3.5\" board renders the same layout as the 2.8\" in the top-left, with empty space below — easy to retune later if you want to use the full 480×320 area.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eWaveshare P4 screenshots\u003c/summary\u003e\n\n\u003cimg src=\"assets/p4_summary.png\" alt=\"P4 summary screen\" width=\"360\" hspace=\"8\"\u003e\u0026nbsp;\u003cimg src=\"assets/p4_repo.png\" alt=\"P4 repo screen\" width=\"360\" hspace=\"8\"\u003e\n\n\u003c/details\u003e\n\n---\n\n## What you need\n\n- One of the supported boards (full list below)\n- A GitHub classic personal access token with `repo` scope — [how to create one](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-personal-access-token-classic)\n- The [github-traffic-log](https://github.com/dmatking/github-traffic-log) companion repo set up and running (collects your traffic data daily)\n\n---\n\n## 1. Flash the firmware\n\nPick the binary matching your board:\n\n| Board | Chip | Display | Binary |\n| ----- | ---- | ------- | ------ |\n| **CYD 2.8\" ILI9341** (E32R28T/E32N28T) — recommended | ESP32 | 320×240 | [`esp32-gh-dashboard-cyd28-flash.bin`](https://github.com/dmatking/esp32-gh-dashboard/releases/latest/download/esp32-gh-dashboard-cyd28-flash.bin) |\n| **CYD-S3 2.8\" ILI9341** (ES3C28P) | ESP32-S3 | 320×240 | [`esp32-gh-dashboard-cyd28s3-flash.bin`](https://github.com/dmatking/esp32-gh-dashboard/releases/latest/download/esp32-gh-dashboard-cyd28s3-flash.bin) |\n| **CYD 3.5\" ST7796** (E32R35T/E32N35T) | ESP32 | 480×320 | [`esp32-gh-dashboard-cyd35-flash.bin`](https://github.com/dmatking/esp32-gh-dashboard/releases/latest/download/esp32-gh-dashboard-cyd35-flash.bin) |\n| **Waveshare ESP32-S3 Touch LCD 2.0\"** (ST7789) | ESP32-S3 | 320×240 (landscape) | [`esp32-gh-dashboard-wvshr200-flash.bin`](https://github.com/dmatking/esp32-gh-dashboard/releases/latest/download/esp32-gh-dashboard-wvshr200-flash.bin) |\n| Waveshare ESP32-P4-WIFI6-Touch-LCD-4B | ESP32-P4 | 720×720 | [`esp32-gh-dashboard-p4-flash.bin`](https://github.com/dmatking/esp32-gh-dashboard/releases/latest/download/esp32-gh-dashboard-p4-flash.bin) |\n\nThe links above always serve the latest tagged release. For a specific version, see [Releases](https://github.com/dmatking/esp32-gh-dashboard/releases).\n\n### Option A — Web flasher (easiest, no install required)\n\nOpen **[ESPConnect](https://thelastoutpostworkshop.github.io/ESPConnect/)** in Chrome or Edge, plug your board in, and flash the binary you downloaded above.\n\n\u003cdetails\u003e\u003csummary\u003eStep-by-step instructions (click to expand)\u003c/summary\u003e\n\n\u003e **Use Chrome or Edge.** Firefox/Safari don't support the Web Serial API the flasher needs.\n\n1. **Download** the right binary for your board from the table above (right-click → Save Link As).\n2. **Plug the board into your computer.** Most CYDs use a CH340/CH9102 USB-serial chip — on Windows you may need the [CH340 driver](https://www.wch-ic.com/downloads/CH341SER_EXE.html). macOS and modern Linux usually work out of the box.\n3. **Open [ESPConnect](https://thelastoutpostworkshop.github.io/ESPConnect/)** in Chrome or Edge.\n4. **Click \"Connect Esp\"** (the green button). A browser dialog will list serial ports — pick the one labeled `USB-SERIAL CH340`, `CP210x`, or similar (likely the only one if you don't have other USB-serial devices plugged in). Click *Connect*.\n   - *Nothing in the dialog?* Unplug and replug the board, and confirm your USB cable is a **data cable**, not charge-only. Try a different port.\n5. **Wait for the chip to be detected** — the flasher will print a line like `Detected ESP32` (or `ESP32-P4`) and show offset fields below.\n6. **Set the firmware file at offset `0x0`:**\n   - In the first row, set the offset to **`0x0`** (zero — *not* the default 0x1000).\n   - Click **Choose File** and pick the `.bin` you downloaded in step 1.\n   - You can ignore any other offset rows — the merged binary already contains the bootloader + partition table + app at their correct internal offsets.\n7. **Click \"Erase Flash\"** (optional but recommended for a clean install).\n8. **Click \"Program\"** and wait — the progress bar takes about 20-30 seconds.\n9. When done, **unplug and replug the board** (or hit the RST button if your CYD has one). The dashboard should boot and display the *WiFi Setup* screen.\n\n**Stuck on \"Connecting...\" or `Failed to connect`?** Some ESP32 dev boards need to be put into download mode manually: hold the **BOOT** button (sometimes labeled IO0) while pressing-and-releasing **RESET** (sometimes EN), then release BOOT. Then retry step 4.\n\n\u003c/details\u003e\n\n### Option B — esptool (Python)\n\nFor the CYD 2.8\" (classic ESP32):\n```bash\npip install esptool\npython -m esptool --chip esp32 -b 460800 \\\n  --before default_reset --after hard_reset \\\n  write_flash 0x0 esp32-gh-dashboard-cyd28-flash.bin\n```\n\nFor the CYD-S3 2.8\" (ESP32-S3):\n```bash\npython -m esptool --chip esp32s3 -b 460800 \\\n  --before default_reset --after hard_reset \\\n  write_flash 0x0 esp32-gh-dashboard-cyd28s3-flash.bin\n```\n\nFor the CYD 3.5\" (classic ESP32):\n```bash\npython -m esptool --chip esp32 -b 460800 \\\n  --before default_reset --after hard_reset \\\n  write_flash 0x0 esp32-gh-dashboard-cyd35-flash.bin\n```\n\nFor the Waveshare 2.0\" Touch (ESP32-S3):\n```bash\npython -m esptool --chip esp32s3 -b 460800 \\\n  --before default_reset --after hard_reset \\\n  write_flash 0x0 esp32-gh-dashboard-wvshr200-flash.bin\n```\n\nFor the Waveshare P4:\n```bash\npython -m esptool --chip esp32p4 -b 460800 \\\n  --before default_reset --after hard_reset \\\n  write_flash 0x0 esp32-gh-dashboard-p4-flash.bin\n```\n\n---\n\n## 2. First-boot setup\n\nOn first boot, the device creates a WiFi access point called **GithubDashboard**.\n\n1. Connect your phone or laptop to **GithubDashboard**\n2. A setup page should open automatically — if it doesn't, open a browser and go to **http://192.168.4.1/**\n3. Fill in the form:\n   - **WiFi Network** and **Password**\n   - **GitHub Username** and **GitHub Token**\n   - **Timezone** — pick from the dropdown, or enter a custom POSIX string\n   - **Daily refresh hour** — what hour (0–23) to fetch fresh data each day (default: 6)\n   - **Screen cycle time** — seconds between screens (default: 30)\n4. Tap **Save \u0026 Connect**\n\nThe device saves your settings and connects to your WiFi. Subsequent boots connect directly.\n\n**To change any setting**:\n\n- **CYD**: re-flash the binary to clear settings (no button-triggered re-provisioning yet). Or, if you've entered a bad GitHub token, the device detects the auth failure on its next fetch and drops you back into the setup page automatically with a \"GitHub Auth Failed\" title — WiFi creds are preserved.\n- **Waveshare P4**: hold the **BOOT button for 3 seconds** at any time while the dashboard is running. The device restarts and the setup page reopens with your existing values pre-filled — change only what you need and tap Save \u0026 Connect again.\n\n---\n\n## 3. Optional: filter which repos appear\n\nCopy [`repo_config.csv`](repo_config.csv) to the root of your `github-traffic-log` repo and edit it to match your repositories:\n\n| repo | show | exclude_totals | effect |\n| ---- | ---- | -------------- | ------ |\n| my-main-project | 1 | 0 | shown on display, counted in totals |\n| old-experiment | 0 | 0 | hidden from display, counted in totals |\n| profile-readme | 0 | 1 | hidden from display, excluded from totals and leaderboard |\n\nIf the file is absent, all repos are shown and nothing is excluded.\n\n---\n\nFor build instructions, project architecture, and hardware details see [BUILDING.md](BUILDING.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdmatking%2Fesp32-gh-dashboard","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdmatking%2Fesp32-gh-dashboard","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdmatking%2Fesp32-gh-dashboard/lists"}