Files
pi-pm3/dangerous-pi-project-outline.md
michael 1da6730735 Add Dangerous Pi MVP implementation - complete backend and system integration
This commit adds the complete Dangerous Pi web management interface with all MVP features implemented and tested locally.

## New Features

### Backend (Python + FastAPI)
- Complete FastAPI backend with async support
- 40+ API endpoints (Health, PM3, WiFi, Updates, UPS, BLE, Plugins)
- 6 managers: Session, WiFi, Update, UPS, BLE, Plugin
- SQLite database with sessions, config, history, crash reports
- Server-Sent Events (SSE) for real-time notifications
- Mock PM3 worker for development without hardware

### WiFi Manager
- Interface detection (USB vs built-in)
- Network scanning with signal strength
- Mode switching (AP/Client/Dual/Auto/Off)
- Network connection with password support
- Hidden SSID and saved networks support
- Static IP and DHCP configuration
- 10 WiFi API endpoints

### Update Manager
- GitHub releases API integration
- Automatic periodic update checks
- Semantic version comparison
- Update download with progress tracking
- SHA256 checksum verification
- Automatic installation with backup and rollback
- PM3 client rebuild after updates
- 6 Update API endpoints

### UPS Manager
- I2C battery monitoring (MAX17040-compatible)
- Battery percentage, voltage, current tracking
- Power source detection (AC/Battery)
- Safe shutdown triggers at configurable thresholds
- Event callbacks for battery warnings
- SSE and BLE notification integration
- 3 UPS API endpoints

### BLE Manager
- Bluetooth Low Energy notification support
- Auto-detects BLE capability
- Multiple notification types (updates, battery, shutdown, etc.)
- BLE advertising management
- Device connection tracking
- 4 BLE API endpoints

### Plugin Framework
- Dynamic plugin loading/unloading
- Plugin lifecycle management (load, enable, disable, unload)
- Hook system for extensibility
- JSON-based metadata
- Example "Hello World" plugin included
- 7 Plugin API endpoints

### Frontend (Remix.js + React)
- Cyberpunk-themed responsive UI
- Dashboard with system status
- PM3 command interface with history
- Settings page with WiFi and Update management
- Command logs viewer
- Theme toggle (Dark/Light/Auto)
- Server-side rendering (SSR)
- Mobile-first responsive design

### System Integration
- Systemd service with security hardening
- Automated install/uninstall scripts
- Environment configuration template
- Hardware access groups (i2c, bluetooth, gpio, dialout)
- Pi-gen stage 04 integration for OS image building
- Port conflict resolution with ttyd-bash
- I2C interface auto-enable for UPS HAT

### Testing
- test_backend.py - Backend API tests
- test_ups.py - UPS manager tests
- test_ble.py - BLE manager tests
- test_plugins.py - Plugin manager tests
- All tests passing locally

### Documentation
- 12 comprehensive documentation files
- claude.md - AI development guide
- WIFI_MANAGER.md - WiFi management guide
- UPDATE_MANAGER.md - Update system guide
- PORT_CONFLICT.md - Port conflict resolution guide
- MVP_COMPLETE.md - MVP implementation summary
- PROJECT_STATUS.md - Project status and roadmap
- systemd/README.md - Service management docs
- pi-gen integration documentation

## Technical Details
- ~5,000+ lines of backend code
- 11 Python dependencies (smbus2 added for UPS)
- FastAPI with async/await throughout
- Type hints and docstrings on all functions
- RESTful API design with SSE for notifications
- Security hardening (non-root, protected dirs, resource limits)

## Next Steps
- Deploy to Raspberry Pi Zero 2 W hardware
- Test with real Proxmark3 device
- Test UPS HAT integration
- Test BLE on Pi hardware
- Build custom OS image with pi-gen
- Performance optimization for Pi Zero 2 W

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 08:11:36 -08:00

6.7 KiB
Raw Blame History

Dangerous Pi — Architecture & Dev Plan (Updated)

  1. Overview

Dangerous Pi extends the existing pi-pm3 project with:

Modern web UI (Remix optional, Python + SSE preferred for efficiency)

Single-user session management with web terminal fallback

Automatic application updates via GitHub Releases

Proxmark3 client rebuild on boot

UPS / safe power management

Wi-Fi / AP management (auto / captive portal / dual Wi-Fi detection)

Optional authentication

Backup plugin scaffolding

BLE notifications using built-in Pi Zero 2 W Bluetooth

Target hardware: Raspberry Pi Zero 2 W

  1. Hardware Architecture Component Purpose Notes Pi Zero 2 W Main controller Runs backend & web UI; includes built-in Bluetooth 4.2 (BLE) UPS HAT Safe shutdown / battery monitoring Expose battery % via I2C or API PNP transistor Programmatically “press” proxmark button 50100ms pulse to emulate press 2x Slide switches Hardware mode switches One: On/Off → safe shutdown, Two: Wi-Fi → Auto/AP Optional USB Wi-Fi dongle Enables dual Wi-Fi mode Detected dynamically; allows client + AP mode Proxmark3 NFC/LF hardware Interfaced via Python wrapper (client/proxmark3.py)
  2. Backend Architecture 3.1 Stack

Language: Python 3.11+

Framework: FastAPI (async, SSE support)

Database: SQLite (for config, crash reports, session info)

Job Queue: Async queue for Proxmark commands + rebuild tasks

System services: Systemd units for:

Backend FastAPI server

Rebuild on boot / auto-update

UPS monitoring daemon

3.2 Components

API Layer

REST endpoints for:

Triggering proxmark commands

Changing Wi-Fi mode (auto/AP/client/dual)

Initiating backup

Updating auth config

SSE endpoints for:

Notifications (update available, backup complete, PM3 rebuild required)

Command completion messages

Proxmark Worker

Python async task runner

Uses client/proxmark3.py wrapper

Fire-and-wait commands (no live streaming)

Handles one active session at a time

Arbitrates web terminal vs web UI commands

Update Manager

Polls GitHub Releases API

Downloads latest release archive

Overwrites Dangerous Pi app code + rebuilds proxmark client

Restarts backend

SSE notifies user of:

Available update

Download progress

Rebuild pending restart

Option to restart immediately

Backup Plugin Scaffold

Default: periodic full application directory backup (config + logs + scripts)

Optional: full SD image backup

User notified via SSE & BLE

Plugin can optionally push backups to file storage service

Session Manager

Only one session allowed at a time

Force takeover option in web UI

Graceful disconnect handling (releases lock)

Optional idle timeout (default: 5min)

BLE Manager

Uses built-in Pi Zero 2 W Bluetooth

Detects BLE functionality at runtime

Handles notifications for:

Updates available

Backups completed

PM3 rebuild pending

UPS low battery

Wi-Fi Detection

On boot, backend detects available network interfaces:

Built-in Wi-Fi → client / AP / auto mode

USB Wi-Fi → enables dual Wi-Fi (client + AP) mode

Web UI only exposes viable modes depending on detected hardware

  1. Frontend Architecture 4.1 Stack

Framework: Remix (preferred) or minimal SPA

Transport:

SSE for server → client notifications

REST for client → server commands

Components:

Dashboard: status, UPS %, Wi-Fi mode, battery, logs, available updates

Scan: antenna placement overlay (SVG)

Clone: step-by-step wizard (MIFARE Classic, LF → T5577)

Terminal: xterm.js-based web terminal

Settings: auth, BLE pairing, backup options, SSL toggle

Wi-Fi Settings: dynamically show only available modes (auto, AP, client, client+AP if second module detected)

4.2 Design Patterns

SSR (server-side rendering) where possible to reduce Pi load

Islands/hydration only for dynamic components (terminal, wizards, notifications)

Minimal external JS libraries to keep bundles small

  1. Networking / Wi-Fi Mode Description AP (captive portal) Forced by hardware switch; default IP: 10.3.141.1; simple portal page Auto UI chooses mode: client / dual (if second Wi-Fi detected) / BLE / client+BLE / off Client + BLE Only available if BLE dongle is present Authentication Optional; user can enable password in web UI

Optional HTTPS: self-signed certificate generated at first boot if enabled

  1. UPS / Power Management

UPS daemon monitors battery, triggers safe shutdown

Web UI shows battery %, UPS health, charge status

Hardware On/Off switch triggers systemd shutdown sequence

Optional PNP transistor to safely trigger proxmark button

  1. Update & Rebuild Flow

On boot:

Backend service starts

Update manager checks GitHub Releases

If new release available, download + overwrite app code

Rebuild proxmark3 client using native compiler

SSE notifies user: “PM client rebuild will occur on restart”

User can choose “restart now” or defer

On update failure:

Rollback to previous working directory (retain backups)

SSE alert to user

  1. Backup & Recovery

Periodic: full application directory backup by default

Optional: full SD image backup

User notifications: web UI + BLE

Restore:

UI button triggers restoration from last backup

Optional plugin can extend cloud storage

Installer: full custom OS image preconfigured for appliance mode

  1. OS / Installer Layout /dangerous-pi/ ├─ /boot/ # Raspberry Pi boot partition │ └─ config.txt ├─ /root/ # OS root │ ├─ /app/ │ │ ├─ backend/ # FastAPI + proxmark worker │ │ ├─ frontend/ # Remix or SPA bundle │ │ ├─ plugins/ # backup, optional future extensions │ │ └─ scripts/ # PM3 rebuild, installer helpers │ ├─ /data/ │ │ ├─ sqlite.db # config, crash logs, session lock │ │ └─ backups/ │ └─ /logs/ # application logs ├─ systemd/ │ ├─ dangerous-pi.service │ └─ dangerous-pi-backup.service └─ installer.sh # Optional installer for existing Pi OS

  2. Security

Local network only (LAN)

Optional password authentication

Optional HTTPS (self-signed cert)

Backend and worker run as non-root user

Crash/error reports opt-in

  1. Development / Performance Notes

FastAPI async endpoints to minimize Pi Zero 2 W CPU load

SSR for static pages, dynamic islands for interactive features

SQLite chosen for small-footprint persistence

xterm.js terminal uses a single PTY; session management prevents concurrent conflicts

Minimal JS and CSS bundles to preserve performance

PM3 commands handled asynchronously, sequentially, single-threaded

BLE automatically enabled if built-in Bluetooth functional

Dual Wi-Fi UI dynamically reflects detected hardware

  1. Optional Future Plugins

Cloud backup / restore

BLE remote control

Advanced telemetry

External API integration