/* Pricing, FAQ, Contact, Footer, Booking Modal */ function FAQ() { const [open, setOpen] = React.useState(0); const items = [ { q: "We're a small club. Are we too small?", a: "Probably not. If you have a written prospectus and a handful of existing or potential sponsors, there's usually enough to work with. The discovery call is where we figure that out honestly. We'll tell you if we're not the right fit.", }, { q: "Do you take over our existing sponsor relationships?", a: "We become the day-to-day point of contact, but everything goes out under your club's name. Sponsors still feel like they're partnering with your club, because they are. We're the engine room, not the brand.", }, { q: "How is this different from a marketing agency?", a: "We don't do creative, social media, or brand work. We do the unglamorous, high-leverage commercial work: managing renewals, building target lists, sending pitches, and booking meetings. It's a narrow scope on purpose.", }, { q: "What's the minimum commitment?", a: "Foundation is month-to-month from day one. Growth has a 3-month minimum so we can actually generate momentum, then it's month-to-month. Performance is a 6-month engagement because outreach cycles take that long to compound.", }, { q: "Do you work outside of football?", a: "Not yet. We're deliberately focused on grassroots and community football across Australia so we know the market, the audience, and what a realistic local sponsorship deal actually looks like.", }, { q: "What does the club need to provide?", a: "Your current prospectus, a list of existing and past sponsors, and roughly an hour a month of one committee member's time for an update call. That's it. We do the rest.", }, ]; return (
FAQ

Common questions from club committees.

If yours isn't here, ask it on the discovery call. We'd rather over-explain than under-deliver.

{items.map((it, i) => (

{it.a}

))}
); } function Contact({ onBook }) { const [form, setForm] = React.useState({ name: '', club: '', email: '', message: '' }); const [touched, setTouched] = React.useState({}); const [submitted, setSubmitted] = React.useState(false); const [submitting, setSubmitting] = React.useState(false); const errors = {}; if (!form.name.trim()) errors.name = 'Required'; if (!form.club.trim()) errors.club = 'Required'; if (!form.email.trim()) errors.email = 'Required'; else if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(form.email)) errors.email = 'Invalid email'; if (!form.message.trim()) errors.message = 'Required'; const isValid = Object.keys(errors).length === 0; const showErr = (k) => touched[k] && errors[k]; const onChange = (k) => (e) => setForm({ ...form, [k]: e.target.value }); const onBlur = (k) => () => setTouched({ ...touched, [k]: true }); const onSubmit = (e) => { e.preventDefault(); setTouched({ name: true, club: true, email: true, message: true }); if (!isValid) return; setSubmitting(true); fetch('https://formspree.io/f/xkoeodar', { method: 'POST', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' }, body: JSON.stringify({ name: form.name, club: form.club, email: form.email, message: form.message }), }) .then((res) => { setSubmitting(false); if (res.ok) { setSubmitted(true); } else { alert('Something went wrong. Please email us directly at hello@clubsidecommercial.com'); } }) .catch(() => { setSubmitting(false); alert('Something went wrong. Please email us directly at hello@clubsidecommercial.com'); }); }; return (
Ready to talk?

Let's see if there's
something worth doing.

Drop your details and a few sentences about your club. We'll come back within one business day with thoughts, honest feedback, and a time for a call if it makes sense.

Email hello@clubsidecommercial.com
Response time Within one business day
Based in Brisbane · Working Australia-wide
Prefer to book straight in?
{submitted ? (

Thanks, {form.name.split(' ')[0]}.

We've got it. We'll reply to {form.email} within one business day, usually faster.

) : (
{showErr('name') && {errors.name}}
{showErr('club') && {errors.club}}
{showErr('email') && {errors.email}}