"use client"; import { useState } from "react"; import { Button, Field, Input } from "@/components/ui/form"; export default function AdminBetaInvitesPage() { const [dryRun, setDryRun] = useState(true); const [limit, setLimit] = useState("1"); const [tokenMinutes, setTokenMinutes] = useState("30"); const [loading, setLoading] = useState(false); const [result, setResult] = useState(null); const [error, setError] = useState(null); async function runInvites() { setLoading(true); setError(null); setResult(null); try { const qs = new URLSearchParams({ dryRun: String(dryRun), limit: String(limit || "0"), tokenMinutes: String(tokenMinutes || "30"), }); const res = await fetch(`/api/admin/beta-invites?${qs.toString()}`, { method: "POST", }); const data = await res.json().catch(() => ({})); if (!res.ok) throw new Error(data?.message || data?.error || "Request failed"); setResult(data); } catch (e: any) { setError(e?.message ?? "Failed"); } finally { setLoading(false); } } return (

Send Beta Invites

Runs the backend batch invite sender (uses your email templates + tracking).

setLimit(e.target.value)} /> setTokenMinutes(e.target.value)} />
{error && (
{error}
)} {result && (
            {JSON.stringify(result, null, 2)}
          
)}
); }