YvorAIO · iOS Companion · Mockups

10 écrans iOS, palette YvorAIO exacte.

Inspirés de Cybersole mais re-pensés pour ta DA violette + Inter. Chaque mockup utilise les vraies couleurs du renderer (extraites de src/renderer/index.html) et reflète la structure Tasks / Profiles / Accounts / Generators / Proxies / Settings + les 4 sites actifs (Amazon, Disney, Funko, Fnac).

1Home / Dashboard
Welcome + 4 stats live + Active Tasks + Recent Checkouts
2Tasks list
Groupes par site, filter chips, status pills, FAB
3Live Monitor (task)
Stream en direct des steps + log + Stop/Restart/Solve
4Create Task (sheet)
Site picker · Mode · Captcha twin pill · CTA
5Checkouts log
Total spent + groupé par date avec thumbnails
6Profiles
Groupes collapsibles · cards profil · cartes
7Accounts
Active / Banned / Relogin par site (incl. account-status.amazon.fr)
8Generators
Amazon · Funko · Fnac avec stats success / queue / log
9Solver / Captcha
Push depuis le bot · Funcaptcha tiles · countdown
10Profile / Settings
License · notifications toggles · 2FA · sign out

Comment l'app communique avec YvorAIO

Le bot Electron tourne déjà avec un client WS prod (src/main/auth/wsClient.tswss://gateway.yvoraio.com). L'app iOS peut se brancher sur la même infra.

Tier 1 · Push notifications natives (APNs)
Bot → gateway → APNs : checkout réussi, captcha required, 3DS challenge, account banned. Latence <1s. Réveille l'app même fermée.
Tier 2 · WebSocket live (app au premier plan)
Réutilise cloud/gateway-api/src/SessionDO.ts (Durable Object déjà en prod). Ajouter un canal device:ios:<userId> dans le RegistryDO existant. Messages: task_started, task_status, captcha_required, checkout_succeeded, account_banned.
Tier 3 · REST polling (history / config)
Liste checkouts, profils, accounts via Pages Functions cloud/site/functions/api/*. Auth par session token reçu via QR-pairing depuis l'app desktop (équivalent du flow ws-ticket actuel).
Pairing app ↔ bot
L'app desktop affiche un QR code (déjà existant pattern : voir WelcomePopup). L'iOS le scanne → envoie le ticket à /api/auth/desktop/ws-ticket → reçoit un session token long-lived (HMAC-signé, 30j). Stocké dans Keychain iOS.
Stack iOS recommandée
SwiftUI + Combine pour le state, URLSessionWebSocketTask pour le WS (pas de lib externe), Keychain pour le ticket, UserNotifications pour APNs. Pas de React Native — iOS natif pour le live feel.
Solver — la killer feature
Quand le bot intercepte un Funcaptcha/Turnstile, il push {type:'captcha_required',taskId,imageUrl,siteKey,deadline} sur la WS iOS. L'app affiche les tiles, l'user solve en 1 tap, l'app POST /api/captcha/solve → relayé au bot via SessionDO broadcast. Latence visée <3s.