'use client' import { useState, FormEvent } from 'react' export default function BetaPage() { const [email, setEmail] = useState('') const [status, setStatus] = useState<'idle' | 'loading' | 'success' | 'error'>('idle') const [message, setMessage] = useState('') async function handleSubmit(e: FormEvent) { e.preventDefault() setStatus('loading') try { const res = await fetch('/api/beta-signup', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email }), }) if (res.ok) { setStatus('success') setMessage('You\'re in! We\'ll add you to the closed beta testers list.') setEmail('') } else { const data = await res.json() setStatus('error') setMessage(data.error || 'Something went wrong. Please try again.') } } catch { setStatus('error') setMessage('Network error. Please try again.') } } return ( <> {/* Hero */}

Closed beta · Limited spots

Get early access

Sign up to join the OpenCode Mobile closed beta on Google Play. We need 20 testers to unlock the public release.

{/* Signup Form */} {status === 'success' ? (

You're on the list

{message}

We'll send you a Google Play beta invite within 24 hours.

) : (
setEmail(e.target.value)} className="flex-1 px-4 py-3 rounded-lg text-sm outline-none transition-colors" style={{ backgroundColor: 'var(--card)', border: '1px solid var(--border)', color: 'var(--fg)', }} disabled={status === 'loading'} />
)} {status === 'error' && (

{message}

)}

Use the Gmail linked to your Google Play account. No spam, no commitment.

{/* What you get */}

What beta testers get

{[ { title: 'Early access', desc: 'Install from Google Play before anyone else. Get updates as we ship them.', }, { title: 'Direct feedback channel', desc: 'Report bugs and request features directly to the dev team.', }, { title: 'Shape the product', desc: 'Your input decides what we build next. Beta feedback has outsized impact.', }, ].map((item) => (
[*]

{item.title}

{item.desc}

))}
{/* FAQ */}

FAQ

{[ { q: 'What is OpenCode Mobile?', a: 'A free, open-source mobile client for the opencode AI coding agent. Connect to your own server and code from anywhere.', }, { q: 'Why do you need my email?', a: 'Google Play requires us to add tester email addresses explicitly. We use the same Gmail you use on your Android device.', }, { q: 'Is it free?', a: 'Yes. Free and open source, MIT license. No in-app purchases, no ads.', }, { q: 'When does the public release happen?', a: 'Google requires 14 days of closed testing with at least 20 testers. The sooner we hit 20, the sooner we launch.', }, { q: 'What Android version?', a: 'Android 8.0 (API 26) or newer.', }, ].map((faq) => (

{faq.q}

{faq.a}

))}
) }