import React, { useState, useEffect } from "react";
export default function SweepstakesApp() {
const [name, setName] = useState("");
const [email, setEmail] = useState("");
const [phone, setPhone] = useState("");
const [address, setAddress] = useState("");
const [zip, setZip] = useState("");
const [dob, setDob] = useState("");
const [accepted, setAccepted] = useState(false);
const [paymentMethod, setPaymentMethod] = useState("Free Entry");
const [termsOpen, setTermsOpen] = useState(false);
const [submitting, setSubmitting] = useState(false);
const [message, setMessage] = useState(null);
const [leads, setLeads] = useState(() => {
try {
const raw = localStorage.getItem("demo_sweepstakes_leads");
return raw ? JSON.parse(raw) : [];
} catch (e) {
return [];
}
});
useEffect(() => {
localStorage.setItem("demo_sweepstakes_leads", JSON.stringify(leads));
}, [leads]);
function validateForm() {
if (!name.trim()) return "Please enter your full name.";
if (!/^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(email)) return "Enter a valid email.";
if (!phone.trim()) return "Please enter your phone number.";
if (!address.trim()) return "Please enter your full mailing address.";
if (!accepted) return "You must accept the Official Rules & Privacy Policy to enter.";
if (!isEligibleDOB(dob)) return "You must be 18 years or older to enter.";
return null;
}
function isEligibleDOB(dobStr) {
if (!dobStr) return false;
const dobDate = new Date(dobStr);
if (isNaN(dobDate)) return false;
const ageDifMs = Date.now() - dobDate.getTime();
const ageDate = new Date(ageDifMs);
const age = Math.abs(ageDate.getUTCFullYear() - 1970);
return age >= 18;
}
async function submitLead(e) {
e && e.preventDefault();
setMessage(null);
const error = validateForm();
if (error) {
setMessage({ type: "error", text: error });
return;
}
setSubmitting(true);
const payload = {
name: name.trim(),
email: email.trim().toLowerCase(),
phone: phone.trim(),
address: address.trim(),
zip: zip.trim(),
dob: dob,
paymentMethod,
submittedAt: new Date().toISOString(),
};
try {
setLeads((prev) => [payload, ...prev].slice(0, 10000));
setMessage({ type: "success", text: "Thanks! Your entry has been received. Check your email for confirmation." });
setName("");
setEmail("");
setPhone("");
setAddress("");
setZip("");
setDob("");
setPaymentMethod("Free Entry");
setAccepted(false);
} catch (err) {
console.error(err);
setMessage({ type: "error", text: "We couldn't process your entry. Please try again later." });
} finally {
setSubmitting(false);
}
}
return (
{/* LEFT: Hero */}
Win a Dream Prize — Enter Now
No purchase necessary. Open to legal residents aged 18+. Official Rules apply.
One entry is FREE. Additional entries can be purchased for $9.99 each.
- • Simple, fast entry — one click to enter.
- • Secure: CAPTCHA & fraud detection recommended.
- • Winner notified by email + phone.
{/* RIGHT: Form */}
{termsOpen && (
Official Rules (Sample)
NO PURCHASE NECESSARY. Open to legal residents age 18+ of the 50 U.S. and D.C. Void where prohibited. Sponsor: [Your Company Name]. Entry period: [dates]. One entry per person is free; additional entries may be purchased for $9.99 each via Credit Card, ACH, or Mail Invoice. Odds depend on number of eligible entries received. Winner will be selected at random and notified by email/phone. See full Official Rules & Privacy Policy at [link].
)}
);
}