"use client"; import { FormEvent, useState } from "react"; import Image from "next/image"; import Link from "next/link"; import { WrenchScrewdriverIcon, ShieldExclamationIcon, CurrencyDollarIcon, BookmarkSquareIcon, BuildingStorefrontIcon, ChatBubbleLeftRightIcon, } from "@heroicons/react/20/solid"; export default function HomePage() { const [email, setEmail] = useState(""); const [useCase, setUseCase] = useState(""); const [status, setStatus] = useState< "idle" | "loading" | "success" | "error" >("idle"); const [message, setMessage] = useState(null); const [accepted, setAccepted] = useState(false); const TOS_VERSION = "2025-12-27"; async function handleSubmit(e: FormEvent) { e.preventDefault(); if (!email) { setMessage("Drop an email in first, operator."); setStatus("error"); return; } if (!accepted) { setMessage( "You must accept the Terms and confirm you’re responsible for safe/legal assembly." ); setStatus("error"); return; } try { setStatus("loading"); setMessage(null); const res = await fetch("/api/beta-signup", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ email, useCase, acceptedTos: accepted, tosVersion: TOS_VERSION, }), }); if (!res.ok) { const txt = await res.text().catch(() => ""); throw new Error(txt || "Failed to save your signup."); } setStatus("success"); setMessage( "✅ You’re on the list. Invites drop soon — we’ll email your access link when it’s go-time." ); setEmail(""); setUseCase(""); } catch (err) { console.error(err); setStatus("error"); setMessage("Something broke. Try again in a minute."); } } const features = [ { name: "Guided part roles", description: "Pick parts by role so you’re not guessing what fits where.", icon: WrenchScrewdriverIcon, }, { name: "Basic compatibility warnings", description: "Early guardrails to catch obvious mismatches before you buy.", icon: ShieldExclamationIcon, }, { name: "Live pricing totals", description: "See the running total as you build, with real retailer listings.", icon: CurrencyDollarIcon, }, { name: "Save builds", description: "Save a build to your account so you can finish it later.", icon: BookmarkSquareIcon, }, { name: "Limited retailers (for now)", description: "We’re starting small with a couple merchants and expanding fast.", icon: BuildingStorefrontIcon, }, { name: "Feedback-driven roadmap", description: "Tell us what’s confusing, wrong, or missing — we’ll fix that first.", icon: ChatBubbleLeftRightIcon, }, ]; return (
{/* Abstract Brand Background */}
{/* Top Bar / Logo */}
Battl Builders Logo
{/* Hero */}
Private Beta AR-15 focus

Stop Guessing. Start Building.

Battl Builders helps you plan an AR-15 build faster: choose parts by role, get basic compatibility guidance, and compare real listings—without juggling tabs or spreadsheets.

  • • Guided part roles (no “where does this go?”)
  • • Basic compatibility warnings
  • • Live pricing from current retailers
  • • Save builds to your account

Early access beta. Data, pricing, and available parts are still evolving.

{/* Beta Form */}

Join the Beta List

Drop your email and we'll send early access when the Builder goes hot. No spam, just builds.

setEmail(e.target.value)} placeholder="you@gearjunkie.com" 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:cursor-not-allowed disabled:opacity-60" required />