Files
thewh1teagle--vibe/pwa/index.html
T
thewh1teagle 18160c22f7 Add phone handoff: record on a phone, transcribe on the desktop (#1411)
Pairs a phone to the desktop by QR code, then sends recordings over an
iroh connection for Sona to transcribe, streaming the transcript back.

The phone side is a PWA deployed alongside the website at /vibe/phone/.
Browsers cannot hole-punch, so its traffic is relayed — end-to-end
encrypted throughout, so the relay only ever sees ciphertext.

Desktop:
- iroh endpoint behind the `vibe/handoff/0` ALPN, off by default and
  restored on startup only when the user previously enabled it
- pairing token compared in constant time; identity persisted so the QR
  survives restarts
- incoming audio saved to ~/Documents/Vibe like any other recording, and
  written to the transcripts store so it lands in Recents
- Settings -> Phone section with a self-contained QR encoder, reachable
  from a phone icon in the sidebar footer
- launch-at-startup setting via tauri-plugin-autostart, default off

Phone PWA:
- React + Vite on the desktop app's UI stack
- language list and model come from the desktop over the wire, never
  hardcoded, so the picker always matches the loaded model
- MediaRecorder mime negotiation for Safari, screen wake lock, and an
  install-to-home-screen hint

Analytics cover adoption and success rate without sending transcripts,
filenames, paths, or the chosen language.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-22 18:47:57 +03:00

22 lines
868 B
HTML

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
<title>Vibe Phone</title>
<link rel="manifest" href="/manifest.webmanifest" />
<meta name="theme-color" content="#ffffff" media="(prefers-color-scheme: light)" />
<meta name="theme-color" content="#181818" media="(prefers-color-scheme: dark)" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-title" content="Vibe Phone" />
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<link rel="apple-touch-icon" href="/icons/icon-192.png" />
<link rel="icon" type="image/png" href="/icons/icon-192.png" />
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>