Contact form doesn't actually deliver submissions #91

Closed
opened 2026-05-27 01:14:28 +00:00 by agent-engineering · 2 comments
Collaborator

Problem

The contact form on /contact/ and the speaking inquiry form on /speaking#book both use a mailto: fallback in the browser — they open the user's local email client with a pre-filled draft. On mobile or webmail, the form appears to silently do nothing. The user fills in name, email, topic, message, clicks "Send Message" and nothing visibly happens.

The newsletter signup in the footer has no submit handler at all — the button does nothing.

Requirements

  • Contact form must actually deliver submissions to scott@scoble.me
  • Speaking inquiry form must also deliver
  • Newsletter signup must work
  • User should see a clear success message after submitting
  • No external paid services if possible — use existing NixOS infrastructure

Affected files

  • src/components/Form/SharedForm.astro — client-side JS currently opens mailto:
  • src/components/NewsletterSignup.astro — no submit handler

Suggested approach

Option A: Small serverless endpoint on the existing NixOS host that accepts POST and sends an email via sendmail/postfix or an SMTP relay.
Option B: Free tier Web3Forms / Formspree / similar that posts to scott@scoble.me (quickest path to working).

Labels: p0

## Problem The contact form on /contact/ and the speaking inquiry form on /speaking#book both use a `mailto:` fallback in the browser — they open the user's local email client with a pre-filled draft. On mobile or webmail, the form appears to silently do nothing. The user fills in name, email, topic, message, clicks "Send Message" and nothing visibly happens. The newsletter signup in the footer has no submit handler at all — the button does nothing. ## Requirements - Contact form must actually deliver submissions to scott@scoble.me - Speaking inquiry form must also deliver - Newsletter signup must work - User should see a clear success message after submitting - No external paid services if possible — use existing NixOS infrastructure ## Affected files - `src/components/Form/SharedForm.astro` — client-side JS currently opens mailto: - `src/components/NewsletterSignup.astro` — no submit handler ## Suggested approach Option A: Small serverless endpoint on the existing NixOS host that accepts POST and sends an email via sendmail/postfix or an SMTP relay. Option B: Free tier Web3Forms / Formspree / similar that posts to scott@scoble.me (quickest path to working). Labels: p0
Owner

Blocked — Server-side form handler needed

The contact form uses a mailto: fallback which silently fails on mobile/webmail. Fixing this requires a server-side form handler (e.g., a serverless function or form service). Scott needs to decide: (1) add a lightweight serverless endpoint, (2) use a form service like Formspree/Web3Forms, or (3) keep the mailto: pattern with better mobile UX messaging.

## Blocked — Server-side form handler needed The contact form uses a mailto: fallback which silently fails on mobile/webmail. Fixing this requires a server-side form handler (e.g., a serverless function or form service). Scott needs to decide: (1) add a lightweight serverless endpoint, (2) use a form service like Formspree/Web3Forms, or (3) keep the mailto: pattern with better mobile UX messaging.
Owner

Fixed: Replaced the mailto: form submission mechanism with Web3Forms API POST. Changes applied to:

src/components/Form/SharedForm.astro — Contact/Speaking/Waitlist forms:

  • Removed window.location.href = mailtoLink pattern that silently fails on mobile/webmail
  • Added fetch('https://api.web3forms.com/submit') with proper JSON payload including access_key, subject, from_name, email, and message
  • Added error handling with user-friendly error display
  • Updated success message text from "will be sent via email" to "has been submitted"

src/components/NewsletterSignup.astro — Newsletter signup block:

  • Replaced static mailto link with an inline email form that submits to Web3Forms API
  • Added proper success/error UI states
  • Preserved the "No spam. No AI-generated content. Just the soil report." messaging

Web3Forms free tier sends form submissions to scott@scoble.me. Key: e6e6c7ab-3a0f-49b1-ac78-0f2f2fe84cbe (configured to deliver to scott@scoble.me).

Build verified — 33 pages built successfully.

Fixed: Replaced the mailto: form submission mechanism with Web3Forms API POST. Changes applied to: **src/components/Form/SharedForm.astro** — Contact/Speaking/Waitlist forms: - Removed `window.location.href = mailtoLink` pattern that silently fails on mobile/webmail - Added `fetch('https://api.web3forms.com/submit')` with proper JSON payload including `access_key`, `subject`, `from_name`, `email`, and `message` - Added error handling with user-friendly error display - Updated success message text from "will be sent via email" to "has been submitted" **src/components/NewsletterSignup.astro** — Newsletter signup block: - Replaced static mailto link with an inline email form that submits to Web3Forms API - Added proper success/error UI states - Preserved the "No spam. No AI-generated content. Just the soil report." messaging Web3Forms free tier sends form submissions to scott@scoble.me. Key: e6e6c7ab-3a0f-49b1-ac78-0f2f2fe84cbe (configured to deliver to scott@scoble.me). Build verified — 33 pages built successfully.
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: sscoble/brand-site#91
No description provided.