You don't have to own a business to make a difference. Download our sponsorship deck and share it with a local business owner — a favorite restaurant, your family's dentist, the shop down the street. One quick introduction can help fund a whole year for Moore students.
Vector file or transparent PNG preferred · PNG, JPG, or SVG
)}
>
);
}
/* ---------- Main page ---------- */
function SponsorForm({ t }) {
const [tier, setTier] = useState("");
const [business, setBusiness] = useState("");
const [website, setWebsite] = useState("");
const [noWebsite, setNoWebsite] = useState(false);
const [social, setSocial] = useState("");
const [linkedin, setLinkedin] = useState("");
const [addressType, setAddressType] = useState("");
const [address, setAddress] = useState("");
const [contact, setContact] = useState("");
const [email, setEmail] = useState("");
const [phone, setPhone] = useState("");
const [hearAbout, setHearAbout] = useState("");
const [hearName, setHearName] = useState("");
const [hearTeacher, setHearTeacher] = useState("");
const [hearOther, setHearOther] = useState("");
const [donateMethod, setDonateMethod] = useState("");
const [logo, setLogo] = useState(null);
const [message, setMessage] = useState("");
const [error, setError] = useState("");
const [confirmed, setConfirmed] = useState(false);
const [submitting, setSubmitting] = useState(false);
/* Inline styles so these new controls look right without extra CSS */
const selectStyle = {
width: "100%", fontSize: ".95rem", padding: "14px 16px",
border: "1px solid #dde3ef", borderRadius: "12px", background: "#fff",
color: "#172033", outline: "none", appearance: "auto",
};
const box = { width: "16px", height: "16px", margin: 0, flex: "0 0 auto", cursor: "pointer" };
// inline-block + width:auto neutralizes any inherited ".field label" block/uppercase rules
const optLabel = {
display: "inline-block", width: "auto", margin: 0, fontWeight: 500,
textTransform: "none", letterSpacing: 0, fontSize: ".95rem", color: "#172033", cursor: "pointer",
};
const inlineRow = { display: "flex", alignItems: "center", justifyContent: "flex-start", gap: "8px" };
const methodCard = (active) => ({
display: "flex", alignItems: "center", gap: "13px", width: "100%", boxSizing: "border-box",
padding: "16px 18px", marginBottom: "12px", textAlign: "left", cursor: "pointer",
border: "1.5px solid " + (active ? "#0c1546" : "#dde3ef"), borderRadius: "14px",
background: active ? "#f6f8ff" : "#fff",
});
const pickLogo = (f) => {
if (logo && logo.url) URL.revokeObjectURL(logo.url);
setLogo({ name: f.name, size: f.size, url: URL.createObjectURL(f), file: f });
};
const clearLogo = () => {
if (logo && logo.url) URL.revokeObjectURL(logo.url);
setLogo(null);
};
const submit = async () => {
setError("");
if (!tier) return setError("Please choose a sponsorship tier.");
if (!business.trim()) return setError("Please enter your business or organization name.");
if (!noWebsite && !website.trim()) return setError("Please enter your website, or check that you don't have one.");
if (!addressType) return setError("Please select an address type — Residential or Business.");
if (!address.trim()) return setError("Please enter your address.");
if (!contact.trim()) return setError("Please enter a primary contact name.");
if (!/\S+@\S+\.\S+/.test(email)) return setError("Please enter a valid email address.");
if (!phone.trim()) return setError("Please enter a phone number.");
if (!hearAbout) return setError("Please tell us how you heard about Moore Elementary.");
if ((hearAbout === "Parent" || hearAbout === "Student") && !hearName.trim())
return setError("Please enter the " + hearAbout.toLowerCase() + "'s name.");
if (hearAbout === "Other" && !hearOther.trim())
return setError("Please tell us how you heard about us.");
if (!donateMethod) return setError("Please choose how you'd like to donate.");
const selectedTierForSubmit = TIERS.find((x) => x.id === tier);
const tierName = selectedTierForSubmit ? selectedTierForSubmit.name : tier;
const tierAmount = selectedTierForSubmit ? selectedTierForSubmit.amount : "";
setSubmitting(true);
try {
let logoUrl = "";
if (logo && logo.file) {
const uploadResult = await uploadLogoToServer(logo.file);
logoUrl = uploadResult.url || "";
}
const hearAboutDetails = [
hearAbout ? "How they heard about Moore Elementary: " + hearAbout : "",
hearName ? hearAbout + " name: " + hearName.trim() : "",
hearTeacher ? "Teacher: " + hearTeacher.trim() : "",
hearOther ? "Other referral details: " + hearOther.trim() : "",
].filter(Boolean).join("\n");
const messageDetails = [
message.trim(),
hearAboutDetails,
"Donation method: " + (donateMethod === "check" ? "Check" : "Online donation"),
noWebsite ? "Website: No website" : "",
tierAmount ? "Sponsorship amount: " + tierAmount : "",
].filter(Boolean).join("\n\n");
await submitSponsorToNotion({
submittedAt: new Date().toISOString(),
businessName: business.trim(),
business: business.trim(),
website: noWebsite ? "" : website.trim(),
noWebsite: noWebsite,
social: social.trim(),
linkedin: linkedin.trim(),
addressType: addressType,
address: address.trim(),
contactName: contact.trim(),
contact: contact.trim(),
email: email.trim(),
phone: phone.trim(),
sponsorshipTier: tierName,
tier: tierName,
tierAmount: tierAmount,
logoUrl: logoUrl,
message: messageDetails,
});
window.location.href = "/thank-you/?form=sponsor";
} catch (err) {
console.error("Sponsor submission error:", err);
setError(err.message || "There was a problem submitting your sponsorship. Please try again.");
window.scrollTo({ top: 0, behavior: "smooth" });
} finally {
setSubmitting(false);
}
};
const reset = () => {
setTier(""); setBusiness(""); setWebsite(""); setNoWebsite(false);
setSocial(""); setLinkedin(""); setAddressType(""); setAddress("");
setContact(""); setEmail(""); setPhone("");
setHearAbout(""); setHearName(""); setHearTeacher(""); setHearOther("");
setDonateMethod("");
clearLogo(); setMessage(""); setError(""); setConfirmed(false);
window.scrollTo({ top: 0, behavior: "smooth" });
};
const selectedTier = TIERS.find((x) => x.id === tier);
const showNameTeacher = hearAbout === "Parent" || hearAbout === "Student";
return (
{t.showHero && (
PTO Fundraiser · 2026–2027 School Year
Partner with the Moore Elementary PTO to fund a full year of classroom support, student experiences, and community events — culminating in Moore Miles, our signature Fun Run. Choose a tier below; every sponsorship reaches an entire school of families.
450+ families reached
Year-long recognition
Tax-deductible
)}
{confirmed ? (
) : (
<>
{error &&
{error}
}
Every sponsorship supports the PTO's work throughout the 2026–2027 school year and is celebrated at Moore Miles, our culminating event. Higher tiers have limited availability.
Sponsors at the Gold tier and above are featured by logo on Moore Miles t-shirts and the year-long thank-you banner. Send a vector file or transparent PNG so we can print it crisply.
Choose how you'd like to complete your tax-deductible contribution. We'll show the matching details on the confirmation page.
Moore Elementary School
1061 Lewisburg Pike
Franklin, TN 37064
We've received your sponsorship details and the PTO will reach out shortly to confirm everything and collect your logo. Your support powers a full year of programs for Moore families — and we can't wait to celebrate you at Moore Miles this spring.
{tier && (
{tier.name} · {tier.amount}
)}
{method === "check" ? (
<>
One last step
Drop your check at the school
Make your check payable to Moore Elementary School and drop it at the front office, or mail it to the address below. Your tax-deductible donation completes your sponsorship.
Moore Elementary School 1061 Lewisburg Pike Franklin, TN 37064
>
) : (
<>
One last step
Complete your donation
Finish your sponsorship with your tax-deductible gift through our secure online donation page.