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

2. 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	50–100ms 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)
3. 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 session idle timeout (default: 5min) - releases PM3 lock after inactivity

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

4. 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

5. 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

6. 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

7. 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

8. 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

9. 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

10. 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

11. 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

12. Optional Future Plugins

Cloud backup / restore

BLE remote control

Advanced telemetry

External API integration
