Skip to content

Forms and Integrations

The site keeps public forms in Statamic but handles the interactive visitor experience through Livewire sections.

Statamic form definitions live in resources/forms/:

HandleTitleLivewire section
member_registrationMember RegistrationMemberRegistrationSection
media_registrationMedia RegistrationMediaRegistrationSection
newsletterNewsletter RegistrationNewsletterRegistrationSection

Each Livewire component validates submitted fields, verifies Friendly Captcha, stores a Statamic form submission, sends an admin notification, and sends a visitor confirmation email.

Submissions are exported through Statamic’s built-in CSV and JSON exporters, configured in config/statamic/forms.php.

Mailables live in app/Mail/ and render templates from resources/views/mail/.

FormAdmin emailConfirmation email
Member registrationMemberRegistrationAdminMemberRegistrationConfirmation
Media registrationMediaRegistrationAdminMediaRegistrationConfirmation
NewsletterNewsletterAdminNewsletterConfirmation

The admin recipient is read from Laravel mail configuration. The mail transport is configured through standard Laravel mail environment variables.

App\Services\FriendlyCaptchaService verifies visitor captcha tokens against Friendly Captcha’s verification API. The required configuration keys are:

  • FRC_SITE_KEY
  • FRC_API_KEY

Local development accepts the token value dev, which lets developers exercise the Livewire form flow without calling the external service.

GoogleEventListSection reads a calendar ID from the page-builder section payload and calls App\Services\GoogleCalendarService.

The service uses:

  • GOOGLE_CALENDAR_API_KEY
  • Google Calendar events API
  • a five-minute Laravel cache entry per calendar ID

If no API key is configured or the API request fails, the section returns an empty event list instead of breaking the page.

MapSection and SmartVoteCandidatesSection use App\Services\SmartVoteService to fetch candidate data from SmartVote’s GraphQL API. The page-builder payload supplies election, district, and party IDs.

Candidate lists are sorted by list position after the API response is received.

donation_payrexx and donation_raise_now are Blade-rendered page-builder sections. Their provider URLs or embed configuration come from section fields. Treat provider configuration as operationally sensitive when it contains account-specific details; public docs should describe the section behaviour without publishing private account configuration.

Matomo configuration is read from:

  • MATOMO_URL
  • MATOMO_SITE_ID

The defaults are safe for local development, but production values belong in the environment, not in public documentation.