Talk to a human.
Questions about Luppy, early access, or whether it fits your cleaning business? We're a quick message away — and a real person always answers.
/* ea-contact.jsx — Contact page for the Luppy Early-Access site. Same content/behavior as contact.jsx, but shares EANav / EAFooter (early-access.jsx) so chrome matches the rest of the pre-launch site. */ (function () { const { useState } = React; const TOPICS = [ { id: 'sales', label: 'Sales' }, { id: 'support', label: 'Support' }, { id: 'billing', label: 'Billing' }, { id: 'partnership', label: 'Partnership' }, { id: 'press', label: 'Press' }, { id: 'other', label: 'Other' }, ]; const EMPTY_FORM = { name: '', email: '', company: '', size: '', message: '', company_website: '' }; function ContactForm() { const [form, setForm] = useState(EMPTY_FORM); const [topic, setTopic] = useState('sales'); const [sending, setSending] = useState(false); const [error, setError] = useState(''); const [sent, setSent] = useState(null); // { name, email, topic } const set = (k) => (e) => setForm((f) => ({ ...f, [k]: e.target.value })); const canSend = form.name.trim() && form.email.trim() && form.message.trim(); const send = async (e) => { e.preventDefault(); if (!canSend || sending) return; setError(''); setSending(true); try { await submitForm({ form: 'contact', topic, name: form.name.trim(), email: form.email.trim(), company: form.company.trim(), size: form.size, message: form.message.trim(), company_website: form.company_website, }); setSent({ name: form.name.trim(), email: form.email.trim(), topic }); setForm(EMPTY_FORM); } catch (err) { setError(err.message); } finally { setSending(false); } }; if (sent) { return (
Thanks, {sent.name.split(' ')[0] || 'there'} — your message is on its way to our{' '} {TOPICS.find((t) => t.id === sent.topic)?.label.toLowerCase()} team. We'll reply to{' '} {sent.email || 'your inbox'} within one business day.
Fill this in and the right person will get back to you — usually within a few hours.
Questions about Luppy, early access, or whether it fits your cleaning business? We're a quick message away — and a real person always answers.