From 7dd7ac700409b2ed943d17ad83613ca1cf790299 Mon Sep 17 00:00:00 2001 From: Imrayya Date: Wed, 1 Jul 2026 12:12:44 +0000 Subject: [PATCH] gitignore: add HANDOFF.md to ignore list --- .gitignore | 3 ++ HANDOFF.md | 119 ----------------------------------------------------- 2 files changed, 3 insertions(+), 119 deletions(-) delete mode 100644 HANDOFF.md diff --git a/.gitignore b/.gitignore index d0cddf6..9f684e1 100644 --- a/.gitignore +++ b/.gitignore @@ -48,3 +48,6 @@ android/app/build/ *.apk *.aab android/local.properties + +# Handoff docs (internal tracking) +HANDOFF.md diff --git a/HANDOFF.md b/HANDOFF.md deleted file mode 100644 index 587dea9..0000000 --- a/HANDOFF.md +++ /dev/null @@ -1,119 +0,0 @@ -# HANDOFF — PaperDash Project Setup - -**Date:** 2026-07-01 -**Status:** Initial project scaffold complete - -## What Was Done - -### 1. Repository Setup - -- Cloned empty repo from `https://gitea.kareemhorstink.me/Imrayya/e-ink-dash` -- Created `README.md`, `.gitignore`, `LICENSE` (MIT) -- Copyright: **Imrayya (2026)** -- Project name: **E-INK Dashboard Ecosystem ~ Paperdash** - -### 2. Architecture Documentation - -- Read and processed `.pi/paperdash_architecture_document.txt` -- Updated architecture doc with: - - Generic audio mixer interface (Windows Core Audio + Voicemeeter, Voicemeeter as primary focus) - - Two notification types: `progress` (with progress bar) and `alert` (rich text with priority levels) - - Updated ASCII diagram to include Windows Audio backend - -### 3. Design Decision Records (`.pi/docs/design/`) - -Created four design documents: - -- **architecture-overview.md** — Framework choices (FastAPI, Vanilla JS, WebView, WebSocket) -- **audio-mixer-design.md** — Generic audio interface with pluggable backends, data models -- **notification-system-design.md** — Two notification types (progress + alert), schemas, rationale -- **exe-tray-design.md** — PyInstaller + pystray system tray, quit-only interface - -### 4. Python Server (`server/`) - -Created the FastAPI server with these modules: - -- **main.py** — FastAPI app with WebSocket endpoint (PIN auth), REST endpoints (`/api/v1/state`, `/api/v1/notify`), client HTML serving -- **audio_mixer.py** — Pluggable audio backends (Windows Core Audio via pycaw, Voicemeeter via voicemeeter-api), unified `AudioMixerState` data model, `AudioMixerManager` for polling -- **media.py** — Windows GSMTC media tracking (title, artist, artwork, playback state), media control commands (play/pause/skip/prev) -- **notifications.py** — `NotificationManager` supporting progress and alert types, ID-based update/dismiss, auto-pruning (max 10 active) -- **telemetry.py** — HWiNFO64 Shared Memory polling for CPU/GPU temps, RAM/VRAM usage -- **tray_wrapper.py** — System tray icon with quit option, runs server in subprocess -- **build_exe.py** — PyInstaller build script producing `PaperDash.exe` in `server/dist/` -- **requirements.txt** — All Python dependencies - -### 5. Test Suite (`server/tests/`) - -Created comprehensive tests: - -- **test_notifications.py** — Notification creation, updates, pruning, dismissal, progress percentage calculation (async tests with pytest-asyncio) -- **test_audio_mixer.py** — Data model defaults, manager initialization with no backends, set_volume/set_mute graceful handling -- **test_main.py** — Health endpoint, state endpoint, notify endpoint auth (401 without token, success with valid token) -- **test_media.py** — Media state defaults, playing state, manager get_state -- **test_telemetry.py** — Sensor reading, telemetry state, manager get_state - -### 6. E-Ink Client (`client/`) - -Created the web client (source of truth for HTML/CSS/JS): - -- **index.html** — PIN login screen + dashboard with panels (media, audio mixer, telemetry, notifications) -- **style.css** — High-contrast black/white E-Ink optimized styles, no transitions, block-based progress meters -- **app.js** — Vanilla JS WebSocket client with: - - PIN authentication and auto-reconnect - - Media display (title, artist, album, artwork base64, progress bar, controls) - - Audio mixer display (master volume, mute, per-channel meters with block indicators) - - Telemetry display (CPU/GPU temp, RAM/VRAM usage) - - Notifications (progress bars as block indicators, alert priorities) - - Swipe gesture zones (70px threshold) for volume adjustment - - DOM API usage (no innerHTML for security) - -### 7. Android Client APK (`android/`) - -Created a custom Android WebView APK for the **BOOX Go 7 Color Gen II** (Android 13): - -- **MainActivity.kt** — Kotlin Single Activity that hosts a full-screen WebView, hides system bars via immersive mode, loads `file:///android_asset/index.html` -- **AndroidManifest.xml** — INTERNET permission, landscape orientation, full-screen theme -- **build.gradle.kts** — AGP 8.2.0, Kotlin 1.9.22, compileSdk 34, targetSdk 34, minSdk 33 (Android 13) -- **assets/** — Bundled index.html, style.css, app.js (copied from `client/`) -- **README.md** — Build and installation instructions - -Build: `cd android && ./gradlew assembleDebug` -APK output: `app/build/outputs/apk/debug/app-debug.apk` - -### 8. Git Ignore - -- Python artifacts (`__pycache__`, `*.pyc`, `dist/`, `build/`) -- Virtual environments (`venv/`, `.venv/`) -- Environment files (`.env`, `.env.local`) -- IDE files (`.idea/`, `.vscode/`) -- `.pi/` directory (contains secrets like PINs and tokens) -- Build artifacts (`*.exe`, `*.spec`) - -## Key Design Decisions - -1. **Audio mixer is generic** — supports both Windows default output and Voicemeeter through a pluggable backend interface. Voicemeeter is the immediate implementation focus. - -2. **Two notification types** — `progress` for long-running tasks with progress bars, `alert` for one-off messages with priority levels (info/warning/error). - -3. **E-Ink optimized client** — vanilla JS (no frameworks), DOM API instead of innerHTML, block-stepped progress meters, no CSS transitions, high-contrast black/white theme. - -4. **System tray .exe** — PyInstaller compiles the server to a standalone .exe that runs in the notification bar with a single "Quit" option. No window, no taskbar presence. - -5. **PIN auth for dashboard, Bearer token for scripts** — dual authentication model matching the architecture doc. - -## What's Next - -- Install dependencies and run tests: `cd server && pip install -r requirements.txt && pytest` -- Test on Windows with actual Voicemeeter and HWiNFO64 -- Build Android APK: `cd android && ./gradlew assembleDebug` -- Install APK on BOOX Go 7 Color via ADB: `adb install app/build/outputs/apk/debug/app-debug.apk` -- Build the .exe: `python build_exe.py` -- Fine-tune E-Ink UI layout for the 7-inch display resolution -- Sync `client/` changes to `android/app/src/main/assets/` when updating the web client - -## Environment Variables Required - -| Variable | Purpose | -|----------|---------| -| `DASHBOARD_PIN` | 4-digit PIN for E-Ink client WebSocket auth | -| `API_TOKEN` | Bearer token for `/api/v1/notify` endpoint |