email-signup

Double opt-in email capture with signed confirmation links and CSV export.

With fz, into the venture manifest

fz add email-signup

With cargo

cargo add cratefield-module-email-signup

fz runs inside your venture repository, linked against its own harness. About fz

What it is

email-signup.

A visitor submits an email; the module records a pending row, sends a signed confirmation link, and marks the address confirmed only when the link is followed. It answers the same bytes whatever the row state, so it never leaks whether an address is already on the list. The admin export is a CSV behind the harness admin token.

Ports

Database · Mailer · Signer · Captcha and RateLimiter optional

Routes

/v1/email-signup

  • POST/v1/email-signup

    Join, answers 202 whatever the state

  • GET/v1/email-signup/confirm

    Follow the signed link

  • GET/v1/email-signup/admin/export.csv

    admin tokenThe confirmed list

UI surface

A join form and a confirmation landing page, rendered at /ui from the handler's own body types, so the form cannot drift from the route.

History

Changelog.

From the crate’s CHANGELOG.md in the harness, as of 0c5560b. 4 versions recorded, newest first. Every published version is on crates.io.

  1. 0.4.2

    crates.ioReleaseDiff

    Other

    • updated the following local packages: cratefield-core, cratefield-mail-templates
  2. 0.4.1

    crates.ioReleaseDiff

    Other

    • ADR 0030: the mail-theme record takes the number it was sharing (#875)
2 earlier versions 0.3.0 to 0.4.0
  1. 0.4.0

    crates.ioReleaseDiff

    Added

    • mail-templates branded mail in each venture's own style for every module that sends mail (#715) (#716)

    Changed

    • Breaking: requires cratefield-core 0.8 (was 0.7), and so a minor rather than a patch bump: a venture still on core 0.7 does not pick this release up through a caret requirement and end up with two copies of core (#712).
    • The confirmation and welcome mails render through cratefield-mail-templates in the venture's theme (layout, dark variant, preheader, text twin), replacing the askama templates; subjects are unchanged and the unsubscribe link moves to the footer. themed_templates(&theme) composes the venture's own MailTheme; default_templates() uses the theme resolved from the venture's Brand and MAIL_THEME (#715).
  2. 0.3.0

    crates.ioRelease

    Added

    • core breaking name problem type URIs under the venture's own base (#557) (#581)

Merged, tested against SQLite and Postgres, and conformant on both mounts.