/* Vooice — mobile screens, on iOS frame.
- MobileLiveCall: viewing the live outbound call from your phone
- MobileChat: telegram-style async thread with Vooice (text + voice clip)
*/
function MobileLiveCall({ tweaks }) {
const [tSec, setTSec] = React.useState(8);
React.useEffect(() => {
const id = setInterval(() => setTSec(t => (t + 0.1) % 46), 100);
return () => clearInterval(id);
}, []);
return (
{/* Top */}
← BACK
VOOICE / LIVE
···
OUTBOUND · ON THE LINE
Bayview Hair
Studio
Booking Thursday at 2 with Marcus.
{/* Wave */}
VOOICE
00:{(20 + Math.floor(tSec)).toString().padStart(2,'0')}
{/* Live transcript bubble */}
MARCUS · 00:13
"Sure, let me check… we have Wednesday 3:30 with Lina, or Thursday 2 with Marcus."
VOOICE · NOW
"Thursday at 2 works for Jordan's calendar. Could you confirm 45 minutes, on the books as Marcus Wu?"
{/* Big buttons */}
);
}
function MobileChat() {
return (
{/* Top */}
{/* Day stamp */}
TODAY · APR 8
{/* You */}
Can you call Bayview Hair and book a haircut this week? Wed or Thu afternoon.
{/* Vooice voice clip reply */}
· · · 4 minutes · · ·
{/* Update card */}
BOOKED
Thu Apr 11 · 2:00–2:45 PM
Marcus Wu · Bayview Hair Studio
"Marcus is the same one cutting your hair — he's the owner. He said hi."
📅 ADDED
·
🔔 30 MIN BEFORE
Nice. Did he ask about the cancellation last time?
No — and he didn't seem to remember. I logged it as resolved.
k thx
{/* Composer */}
);
}
function Bub({ side, t, voice, children }) {
const isMe = side === 'me';
return (
{isMe ? 'YOU' : 'VOOICE'} · {t}
{children}
);
}
function VoiceClip({ duration, caption }) {
return (
);
}
window.MobileLiveCall = MobileLiveCall;
window.MobileChat = MobileChat;