);
}
function FAQ() {
const items = [
{
q: 'I’m bad at chess. Does this just lock me out forever?',
a: 'No. The first thing you do is pick your level. If you’re new, the puzzles are very gentle — think "the queen takes the free piece." The point is to make you pause and think, not to humiliate you.',
},
{
q: 'What if I genuinely need to open Instagram right now?',
a: 'Tap "Give up." You’ll get a one-time short pass, but no scroll reward. Most people find they didn’t actually need the app that badly. The rest get to skip the puzzle when it matters.',
},
{
q: 'How is this different from a normal app blocker?',
a: 'App blockers say no. Scroll Gambit says "earn it." That tiny shift — from punishment to a small game — is the whole point. You feel like you won something instead of feeling lectured.',
},
{
q: 'Will I actually get better at chess?',
a: 'Probably, yeah. You’ll see hundreds of tactical patterns. We track your rating gently in the background so puzzles stay challenging without becoming impossible.',
},
{
q: 'Can I be in early access?',
a: 'Drop your email at the top. iOS beta starts soon.',
},
];
const [open, setOpen] = useStateA(0);
return (
Questions
Reasonable concerns, answered.
{items.map((it, i) => (
setOpen(open === i ? -1 : i)}>
{it.q}
{it.a}
))}
);
}
function SignupForm({ size = 'normal' }) {
const [email, setEmail] = useStateA('');
const [sent, setSent] = useStateA(false);
const [sending, setSending] = useStateA(false);
const [error, setError] = useStateA(null);
async function submit(e) {
e.preventDefault();
if (!email || !email.includes('@') || sending) return;
setSending(true);
setError(null);
try {
const base = (typeof window !== 'undefined' && window.__API_BASE) || '';
const r = await fetch(`${base}/api/waitlist`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ email, source: 'landing' }),
});
const body = await r.json().catch(() => ({}));
if (!r.ok || !body.ok) {
if (body.error === 'invalid_email') {
setError('That email doesn’t look right.');
} else if (body.error === 'rate_limited') {
setError('Too many tries. Wait a minute and retry.');
} else {
setError('Something went wrong. Try again?');
}
return;
}
setSent(true);
setEmail('');
} catch {
setError('Couldn’t reach the server. Try again?');
} finally {
setSending(false);
}
}
if (sent) {
return (
You’re on the list. We’ll be in touch.
);
}
return (
{error && (
{error}
)}
);
}
function Hero() {
return (
iOS beta — invites going out weekly
Solve a chess puzzle before you scroll.
Scroll Gambit puts a quick tactic between you and Instagram. Crack it,
earn five minutes. Skip it, miss the scroll. No nagging, no shame —
just a small, clever obstacle.
2,847 on the waitlist
);
}
function CTAStrip() {
return (
Solve. Scroll. Repeat.
The whole product is one screen. Get the email when it ships.
);
}
function Nav() {
return (
);
}
function Footer() {
return (
);
}
function Landing() {
return (