Labels.io

Contact form

The /contact route ships with a UI-only form. It looks real but submit does nothing. This doc is the menu of ways to connect it to actual message delivery.

Pick a path

Easiest — third-party form-to-email

No backend required. You paste an endpoint URL into .env and the form starts posting to that endpoint. Test it with a real submission afterwards to confirm.

  • Formspree — paste an endpoint, you get email delivery.
  • Basin — same model as Formspree, alternative provider.
  • Web3Forms — alternative form-to-email service.

Each has its own pricing, free tier, and submission limits — check their pricing pages.

Full control — your own backend using Resend

Requires a server route (TanStack Start's createServerFn) and a Resend API key. More flexible but more setup.

See agent-skills/wire-contact-form.md Flow B.

If your kit also includes Supabase auth and newsletter contact sync, follow Auth and email setup after wiring Resend.

Drop the form entirely and just show an email address. Works forever, zero setup, but the visitor has to open their email client.

Ask your AI

For the third-party route:

I want the contact form to send to my email. Walk me through using [Formspree / Basin / Web3Forms]:

  1. Creating an account and getting an endpoint URL.
  2. Pasting it into .env.
  3. Updating app/routes/contact.tsx to actually submit.
  4. Testing it end to end.

For the Resend route: see the kit skill linked above.

Picking one

  • Want it working today, simplest path: any of the three form-to-email services (Formspree, Basin, Web3Forms).
  • Full control or already using Resend elsewhere: Resend backend.
  • Solo indie site, you are fine with mailto: just link to your email.

On this page