disable beta sign up email blasts

This commit is contained in:
2025-12-24 08:34:39 -05:00
parent 57034eefc3
commit 5401f6464d
2 changed files with 28 additions and 6 deletions
+1
View File
@@ -11,6 +11,7 @@ export async function POST(req: Request) {
method: "POST", method: "POST",
headers: { "Content-Type": "application/json" }, headers: { "Content-Type": "application/json" },
body: JSON.stringify(body), body: JSON.stringify(body),
cache: "no-store",
}); });
// Always return ok=true (matches your server behavior) // Always return ok=true (matches your server behavior)
+27 -6
View File
@@ -13,6 +13,7 @@ export default function HomePage() {
async function handleSubmit(e: FormEvent) { async function handleSubmit(e: FormEvent) {
e.preventDefault(); e.preventDefault();
if (!email) { if (!email) {
setMessage("Drop an email in first, operator."); setMessage("Drop an email in first, operator.");
setStatus("error"); setStatus("error");
@@ -30,11 +31,12 @@ export default function HomePage() {
}); });
if (!res.ok) { if (!res.ok) {
throw new Error("Failed to save your signup."); const txt = await res.text().catch(() => "");
throw new Error(txt || "Failed to save your signup.");
} }
setStatus("success"); setStatus("success");
setMessage("Youre locked in. Watch your inbox."); setMessage("Youre on the list. Invites drop soon — well email your access link when its go-time.");
setEmail(""); setEmail("");
setUseCase(""); setUseCase("");
} catch (err) { } catch (err) {
@@ -160,7 +162,8 @@ export default function HomePage() {
value={email} value={email}
onChange={(e) => setEmail(e.target.value)} onChange={(e) => setEmail(e.target.value)}
placeholder="you@gearjunkie.com" placeholder="you@gearjunkie.com"
className="mt-1 w-full rounded-md border border-zinc-800 bg-zinc-950 px-3 py-2 text-sm text-zinc-50 outline-none ring-amber-500/30 placeholder:text-zinc-600 focus:border-amber-400/80 focus:ring-2" disabled={status === "loading" || status === "success"}
className="mt-1 w-full rounded-md border border-zinc-800 bg-zinc-950 px-3 py-2 text-sm text-zinc-50 outline-none ring-amber-500/30 placeholder:text-zinc-600 focus:border-amber-400/80 focus:ring-2 disabled:opacity-60 disabled:cursor-not-allowed"
required required
/> />
</div> </div>
@@ -178,17 +181,22 @@ export default function HomePage() {
value={useCase} value={useCase}
onChange={(e) => setUseCase(e.target.value)} onChange={(e) => setUseCase(e.target.value)}
rows={3} rows={3}
disabled={status === "loading" || status === "success"}
placeholder="E.g. Comparing build costs, finding the best deals, sharing my builds, weird influencer shit..." placeholder="E.g. Comparing build costs, finding the best deals, sharing my builds, weird influencer shit..."
className="mt-1 w-full rounded-md border border-zinc-800 bg-zinc-950 px-3 py-2 text-xs text-zinc-50 outline-none ring-amber-500/30 placeholder:text-zinc-600 focus:border-amber-400/80 focus:ring-2" className="mt-1 w-full rounded-md border border-zinc-800 bg-zinc-950 px-3 py-2 text-xs text-zinc-50 outline-none ring-amber-500/30 placeholder:text-zinc-600 focus:border-amber-400/80 focus:ring-2 disabled:opacity-60 disabled:cursor-not-allowed"
/> />
</div> </div>
<button <button
type="submit" type="submit"
disabled={status === "loading"} disabled={status === "loading" || status === "success"}
className="flex w-full items-center justify-center rounded-md border border-amber-500/70 bg-amber-500/90 px-3 py-2 text-sm font-medium text-black transition hover:bg-amber-400 disabled:cursor-not-allowed disabled:opacity-70" className="flex w-full items-center justify-center rounded-md border border-amber-500/70 bg-amber-500/90 px-3 py-2 text-sm font-medium text-black transition hover:bg-amber-400 disabled:cursor-not-allowed disabled:opacity-70"
> >
{status === "loading" ? "Enlisting…" : "Get Beta Access"} {status === "loading"
? "Enlisting…"
: status === "success"
? "On the List ✅"
: "Get Beta Access"}
</button> </button>
{message && ( {message && (
@@ -205,6 +213,19 @@ export default function HomePage() {
</p> </p>
)} )}
{status === "success" && (
<button
type="button"
onClick={() => {
setStatus("idle");
setMessage(null);
}}
className="w-full rounded-md border border-zinc-800 bg-zinc-950 px-3 py-2 text-xs text-zinc-200 hover:bg-zinc-900"
>
Submit another email
</button>
)}
<div className="mt-6 text-center text-[11px] text-zinc-500"> <div className="mt-6 text-center text-[11px] text-zinc-500">
Already invited?{" "} Already invited?{" "}
<a href="/login" className="underline hover:text-zinc-300"> <a href="/login" className="underline hover:text-zinc-300">