~/projects/pideck

SOFTWARE2026

PiDeck

A self-hosted system that turns an Android phone into a programmable control deck for a Windows PC, driven by a UI schema the PC pushes over WebSocket and a hot-reloadable Python plugin system.

TIMELINE
Aug 2026
TEAM
Solo
CONTEXT
Personal project
The PiDeck page editor: an action palette beside a live deck of vitals meters, media controls and page buttons.
54actions across 9 categories
37telemetry keys
86backend tests

Overview

PiDeck turns a phone’s browser into a control deck for a Windows PC. A FastAPI host running on the PC owns all the UI logic and pushes a JSON schema over WebSocket to a React client that renders whatever the host tells it to, so new controls or telemetry can be added on the PC side without touching the client.

Features

  • Drag-and-drop visual page editor served by the host itself
  • Live system telemetry: CPU, GPU, RAM, disk, network, temperatures, audio, media, OBS, and Discord state
  • Hot-reloadable plugin system — dropping in a Python file adds actions with no rebuild or restart
  • Multi-step macros with per-step delays and telemetry-based conditions
  • Phone-as-trackpad, scroll pad, and keyboard using real Win32 input injection
  • Context-aware automatic page-switching based on the PC’s foreground application
  • Idle screen that renders live system vitals as generative art
  • Six-digit pairing codes and a LAN-only guard for security

How it works

The PC-side host is a FastAPI service with a plugin registry (@action / @vitals_provider decorators) that hot-reloads on file changes and broadcasts a generated UI schema over WebSocket; a code generator keeps a TypeScript protocol file in sync with the Python models at build time. The Android client, built with React, Vite, and Zustand, is a thin renderer with no hardcoded UI — it only draws whatever schema it receives. Trackpad and scroll input stream as raw deltas over a separate low-latency socket path rather than discrete action calls, and macro conditions run through an AST-sandboxed evaluator.