# ReBreak Magic — Unified Desktop App (Nuxt + Tauri)

## Ziel

Eine einheitliche Cross-Platform-Desktop-App für Mac und Windows, die:
- Mac + iPhone in den ReBreak-Schutz einbindet
- Windows-PC in den ReBreak-Schutz einbindet
- iOS-Supervision ohne Erase über `supervise-magic` durchführt
- Sideload-Protect-Profil über lokalen HTTP-Server + QR-Code installiert
- Später ABM/ADE-Silent-Enrollment vorbereitet

## Tech-Stack

- **Frontend:** Nuxt 4.1.3 + @nuxt/ui 4.5.1 + Tailwind CSS 4 + Vue 3
- **Desktop-Runtime:** Tauri 2.x (Rust Core + WebView)
- **System-Zugriff:** Rust-Tauri-Commands + Sidecars
- **iOS-Supervision:** `supervise-magic` Go-Binary als Sidecar
- **Profile-Transfer:** Lokaler Rust-HTTP-Server + QR-Code

## Vergleich: Aktuelle Mac vs. Windows

| Bereich | Mac (SwiftUI) | Windows (Tauri/React) | Unified (Nuxt+Tauri) |
|---|---|---|---|
| **UI-Framework** | SwiftUI | React + Vite | **Nuxt + NuxtUI** |
| **Desktop-Runtime** | Native App | Tauri 2 | **Tauri 2** |
| **System-Core** | Swift Services | Rust | **Rust** |
| **Login** | Supabase JWT | 6-stelliger Pairing-Code | **Nur Pairing-Code** |
| **iPhone Detection** | `libimobiledevice` via Shell | — | **`libimobiledevice` Sidecar** |
| **iOS Supervision** | `supervise-magic` Go-Binary | — | **`supervise-magic` Sidecar** |
| **Sideload-Profil** | AirDrop | — | **Lokaler HTTP-Server + QR-Code** |
| **MDM-Enrollment** | NanoMDM HTTP-API | — | **NanoMDM HTTP-API** |
| **Mac-PC-Schutz** | `.mobileconfig` DNS-Profil | — | **`.mobileconfig` + `profiles` command** |
| **Windows-PC-Schutz** | — | DoH via PowerShell | **DoH + Tamper-Service** |
| **Tamper-Protection** | MDM/NanoMDM | SYSTEM-Service | **Plattformabhängig** |
| **Token-Speicher** | macOS Keychain | Windows Credential Manager | **Rust `keyring` crate** |
| **Installer** | DMG + Notarization | NSIS | **DMG (Mac) + NSIS/MSI (Win)** |

## Gemeinsamer Wizard-Flow

1. **Welcome** — Plattform erkennen, Willkommen
2. **Pairing** — 6-stelliger Pairing-Code aus der ReBreak-App
3. **Device Detection** — iPhone per USB erkennen (Mac) / PC-Info sammeln (Win)
4. **Pre-Flight** — Find-My-iPhone prüfen, Voraussetzungen checken
5. **Supervise** — `supervise-magic` ausführen, iPhone rebootet
6. **Sideload Profile** — Lokaler Server starten, QR-Code anzeigen, User installiert Profil
7. **MDM Enrollment** — QR-Code/Download für NanoMDM-Enrollment-Profil
8. **Configure** — NanoMDM Commands pushen (Take-Management + mdmSupervised=true)
9. **Protection Active** — Schutzstatus anzeigen, Release-Cooldown verwalten

## Plattformspezifische Rust-Module

```
src-tauri/src/
├── main.rs                 # Entry + Tauri-Setup
├── lib.rs                  # Öffentliche Commands
├── platform/
│   ├── mod.rs              # Trait + Dispatcher
│   ├── macos.rs            # Mac-spezifisch (DNS-Profil, Keychain, USB)
│   └── windows.rs          # Windows-spezifisch (DoH, Service, Credential Manager)
├── sidecar/
│   └── supervise_magic.rs  # Go-Binary Management
├── server/
│   └── local_http.rs       # Lokaler HTTP-Server für Profile
├── config.rs               # App-Konfiguration
├── backend/
│   └── api.rs              # /api/magic/* Client
└── error.rs                # Gemeinsame Fehler-Typen
```

## Frontend-Struktur (Nuxt)

```
app/
├── app.vue                 # Tauri-Root + Layout
├── pages/
│   ├── index.vue           # Welcome / Wizard-Start
│   ├── pair.vue            # Pairing-Code (UPinInput)
│   ├── detect.vue          # Geräte-Erkennung
│   ├── supervise.vue       # Supervision-Step
│   ├── sideload.vue        # Lokaler Server + QR-Code
│   ├── enroll.vue          # MDM-Enrollment
│   ├── protect.vue         # Schutz aktivieren
│   └── status.vue          # Status + Release
├── components/
│   ├── WizardStep.vue
│   ├── QrDisplay.vue
│   ├── DeviceCard.vue
│   └── ProtectionStatus.vue
├── composables/
│   ├── useTauri.ts
│   ├── useMagicApi.ts
│   └── useLocalServer.ts
└── assets/
    └── css/main.css
```

## Wichtige Entscheidungen

1. **Nuxt statt React:** Einheitlicher Stack mit Admin/Marketing, besseres Ökosystem-Sharing.
2. **Tauri statt Electron:** Kleinere Bundle-Größe, Rust-Performance, bessere System-Integration.
3. **Lokaler HTTP-Server statt AirDrop:** Plattformunabhängiger Profil-Transfer.
4. **Sidecar für Go-Binary:** `supervise-magic` muss nicht nach Rust portiert werden.
5. **ABM vorbereiten:** Architektur soll später Silent-Enrollment unterstützen, aber aktuell manuell.

## Risiken / Offene Punkte

- `supervise-magic` Windows-Build noch nicht verifiziert
- Verhalten von `PayloadRemovalDisallowed` bei Webserver-Download noch nicht getestet
- ABM-Beantragung dauert Wochen
- macOS Code-Signing + Notarization erforderlich für Production
- Windows Code-Signing (EV empfohlen) für Production

## Aktueller Stand

- ✅ Nuxt 4 + Tauri 2 Skelett unter `apps/rebreak-magic`
- ✅ Wizard-Pages mit NuxtUI: Welcome, Pair, Detect, Supervise, Sideload, Enroll, Status
- ✅ Rust-Module: Config, Backend-API, Platform-Abstraction, lokaler HTTP-Server, Sidecar-Integration
- ✅ `supervise-magic` Go-Binary als Tauri-Sidecar eingebunden
- ✅ Lokaler HTTP-Server für Sideload-Profil + QR-Code-Generierung
- ✅ `cargo check` erfolgreich
- ✅ `pnpm build` erfolgreich (Nuxt mit `nitro.preset: "static"` erzeugt `index.html`)
- ✅ `.app` Bundle mit `rebreak-magic` + `supervise-magic` Sidecar wird erzeugt
- ✅ Komplette Backend-Logik: Pairing-Code einlösen, Gerät registrieren, Status/Device-Liste abrufen, Release anfragen/abbrechen
- ✅ Token sicher im System-Keyring gespeichert
- ✅ Profil-Download vom Backend + lokaler QR-Code-Server für Sideload
- ✅ Release-Cooldown in Status-Seite angezeigt
- ⚠️ `.app` Bundle nur (kein DMG, um Bundling-Probleme zu vermeiden)

## Nächste Schritte

1. Plattformspezifische Schutzmechanismen implementieren (Mac DNS-Profil, Windows DoH + Service)
2. Echte Backend-API-Calls für Pairing / Status implementieren
3. Profil-Generierung in Rust ergänzen (statt hartcodiertem `/tmp/...` Pfad)
4. Windows-Build der `supervise-magic` Sidecar verifizieren
5. Code-Signing + Notarization für Production vorbereiten
6. CI-Pipeline für Mac + Windows Builds
