Architecture and roadmap for Raspy: a personal Raspberry Pi control plane. One async FastAPI backend ("the spine"), modular attachments that ship their own UI, and a generic frontend shell (SvelteKit static → laptop web + Capacitor APK now, Flutter later). Reachable over LAN, Cloudflare Tunnel, Tailscale, or future static-IP port-forward — all behind one domain, with brute-force-resistant username/password auth.
- 00-overview.md — the whole system on one page; key bets; stack.
- 10-spine.md — FastAPI core: structure, lifecycle, manifest, data.
- 20-attachments.md — the plugin contract + server-driven UI.
- 30-auth-security.md — login, sessions, transport trust.
- 40-frontend.md — the generic renderer, caching, APK.
- 45-theming.md — orthogonal color × concept themes, token-only components.
- 50-deployment.md — running on the Pi, the four transports, ops.
- 55-distribution.md — one-binary builds, the installer, self-update.
- 56-connectivity.md — the connectivity attachment (tunnels), security boundary.
- 57-terminal.md — the terminal attachment (PTY over the encrypted channel).
- 60-roadmap.md — milestones and build order.
- Server-driven UI — attachments describe their own UI; the frontend renders it and never changes per attachment. (20-attachments.md)
- Transport-agnostic spine — auth happens in the app, so LAN / Cloudflare / Tailscale / port-forward all share one login. (30-auth-security.md §5)
- Online-only, memory-hard auth — no capturable handshake to crack offline; every guess is a rate-limited Argon2id verify. (30-auth-security.md)