type: decision
status: active
timestamp: 2026-06-20
tags: [forms, decisions, architecture, web3forms, static-forms, tally]

Forms — trio (Web3Forms primary + Static Forms fallback + Tally for rich)

Vendor-redundant contact forms: Web3Forms + backup' primary, Static Forms fallback, both browser-only, both free unlimited). Tally handles rich / multi-step / conditional forms. Three roles, no overlap.

Forms — trio (Web3Forms primary + Static Forms fallback + Tally for rich)

Decision

The family runs three form services, each with a distinct role:

RoleServiceWhy
Contact form — primaryWeb3FormsBrowser-only, domain-bound key, unlimited free
Contact form — fallbackStatic FormsDifferent vendor + edge; auto-swapped by <ContactForm> on Web3Forms failure
Rich / multi-step / conditional formsTallyLogic, conditional branches, payment integration, unlimited free

Formspree stays documented as a second swap target but is not in the active rotation.

Why three and not one

The trio mirrors the captcha-turnstile-plus-hcaptcha pattern: two free vendors on different infra for the high-availability surface, plus a specialist tool for the case the simple one doesn’t cover.

Implications

Cross-refs


Edit on GitHub · Back to index