E-INK Dashboard Ecosystem ~ Paperdash
A local network dashboard ecosystem designed for the Onyx Boox Go 7 Color (Android E-Ink display). It displays real-time Windows desktop states including media playback, audio mixer channels (Windows default output or Voicemeeter), system telemetry, and custom script notifications (progress bars and rich text alerts).
Copyright (c) Imrayya (2026) — MIT License
Architecture
Paperdash bypasses heavyweight native Android UIs in favor of a lightweight, asynchronous Python server communicating via low-overhead WebSockets to a highly optimized E-Ink web client.
flowchart TD
subgraph WindowsHost["WINDOWS HOST PC"]
subgraph Subsystems["Subsystems"]
Media["WinRT Media API"]
Audio["Windows Audio / Core Audio"]
VM["Voicemeeter API"]
HW["HWiNFO Shared Memory"]
end
Server["FastAPI Server"]
StateAgg["State Aggregator"]
Auth["Token Auth Engine"]
end
subgraph External["EXTERNAL CLIENTS"]
Script["Custom Script / CLI"]
end
subgraph Boox["ONYX BOOX GO 7 COLOR (Android 13)"]
APK["Android WebView APK
(Kotlin)"]
style APK fill:#000,color:#fff
end
Media --> Server
Audio --> Server
VM --> Server
HW --> Server
Server --> StateAgg
Server --> Auth
Script -->|Bearer Token| Auth
StateAgg -->|WebSocket| WebView
Auth -->|PIN Auth| WebView
Client-side optimizations: PIN-authenticated WebSocket connection, static DOM updates (no smooth scrolling/fades), full-screen CSS Grid layout with static tap-and-swipe gestures.
Tech Stack
Server (Python 3.11+, Windows)
- FastAPI + Uvicorn — ASGI web framework with native async WebSocket handling
- winsdk — Windows Media API for GSMTC (Global System Media Transport Controls)
- pysounddevice / pycaw — Generic Windows Core Audio API for default output volume and mute
- voicemeeter-api — Voicemeeter Remote API wrapper for per-strip mixer controls
- pyhwinfo — Hardware telemetry via HWiNFO64 Shared Memory
- PyInstaller — Compiles the server to a standalone
.exewith system tray icon
Client (BOOX Go 7 Color, Android 13)
- Custom Android WebView APK — Kotlin app wrapping the web client in a full-screen WebView
- Vanilla JavaScript (ES6+) + CSS — configured for monochrome/high-contrast E-Ink palettes
Features
- Media Playback Tracking — Song title, artist, playback percentage, and cover art via Windows GSMTC
- Audio Mixer Control — Real-time volume and mute from Windows default output or Voicemeeter per-strip gains, mutes, and track states
- Hardware Telemetry — CPU/GPU core temps, VRAM usage from HWiNFO64
- Custom Notifications — External scripts can push progress bars or rich text alerts via
POST /api/v1/notify - E-Ink Optimized UI — High-contrast styling, discrete zone gestures, minimal refresh
- System Tray .exe — Runs unobtrusively in the Windows notification bar with a quit option
Authentication
- Dashboard UI (Boox Tablet): Shared PIN authentication via WebSocket handshake (
?pin=XXXX) - External Scripts/CLI: Static Bearer Token via
Authorization: Bearer <SECRET_TOKEN>header
Project Structure
e-ink-dash/
├── .pi/
│ ├── docs/design/ # Design decision records
│ └── paperdash_architecture_document.txt
├── server/ # Python FastAPI server
│ ├── main.py # Application entry point
│ ├── audio_mixer.py # Audio mixer abstraction (Windows + Voicemeeter)
│ ├── media.py # Media playback tracking (GSMTC)
│ ├── notifications.py # Notification system (progress + alerts)
│ ├── telemetry.py # Hardware telemetry (HWiNFO)
│ ├── tray_wrapper.py # System tray .exe wrapper
│ ├── build_exe.py # PyInstaller build script
│ ├── requirements.txt
│ └── tests/ # Test suite
├── client/ # E-Ink web client
│ ├── index.html
│ ├── style.css
│ └── app.js
├── README.md
├── LICENSE
└── .gitignore
Getting Started
Server
cd server
python -m venv venv
venv\Scripts\activate # Windows
pip install -r requirements.txt
python -m uvicorn main:app --host 0.0.0.0 --port 8921
Set environment variables:
DASHBOARD_PIN— 4-digit PIN for the E-Ink clientAPI_TOKEN— Bearer token for external scripts
Build .exe
cd server
python build_exe.py
# Output: server/dist/PaperDash.exe
Client (Android APK)
The web client is bundled into an Android APK. Open Android Studio, sync Gradle, and run on the BOOX Go 7 Color.
cd android
./gradlew assembleDebug
# APK at: app/build/outputs/apk/debug/app-debug.apk
Install via ADB:
adb install app/build/outputs/apk/debug/app-debug.apk
The WebView loads file:///android_asset/index.html and connects to the server via WebSocket at ws://<pc-ip>:8921/ws.
Design Decisions
See .pi/docs/design/ for detailed design decision records covering architecture, audio mixer, notifications, and the .exe build.
License
MIT — see LICENSE for details.