This is the flow that makes a collected phone number usable — for SMS, for WhatsApp, and for AI-assisted calls. Without it, those channels are illegal in the US. With it, they're the fastest way to reach a tradesperson.
Affirmative, unbundled, and unchecked by default — a pre-ticked box is not consent under the TCPA. The exact wording shown is stored verbatim with a timestamp, the page URL and the IP.
No lead fees, 82–85% of the completed job, paid 3–7 days after the photo check.
I agree to receive calls and text messages, including messages generated by AI-assisted systems, from Fixxo at the number provided. Consent is not a condition of any purchase. Message frequency varies. Reply STOP to opt out, HELP for help. Msg & data rates may apply.
The button stays disabled until the box is ticked. That's the point.
Ticking the box enables the send, and one confirmation message goes out.
You can ask us to stop at any time, in any way — reply STOP, say it on a call, or email. We honour it across every channel, and we never re-add you.
Continue to onboardingNo account, no spam, no third parties.
One row per number, per channel. This is the record we'd hand to a regulator, so it holds the exact words shown and everything needed to prove when and how.
WhatsApp is recorded as a separate channel row, because Meta requires its own opt-in. `can_contact(phone, 'sms')` and `can_contact(phone, 'whatsapp')` are checked separately at send time.
Full legal basis and penalties: outreach/COMPLIANCE.md. The enforcement function: db/outreach_schema.sql → can_contact().
The same module is embedded in the technician section of the homepage and on the technician landing page, so every number collected on the site arrives with its consent record attached.