Skip to content

feat(website): add EmailOctopus join page and flip CTAs#407

Open
yagudaev wants to merge 1 commit into
mainfrom
claude/add-email-signup-button-RhlnU
Open

feat(website): add EmailOctopus join page and flip CTAs#407
yagudaev wants to merge 1 commit into
mainfrom
claude/add-email-signup-button-RhlnU

Conversation

@yagudaev

@yagudaev yagudaev commented May 7, 2026

Copy link
Copy Markdown
Owner

Summary

  • New /join signup-style page with an inline email form that posts to a new POST /api/subscribe route, which subscribes the address to EmailOctopus via the v2 API.
  • Homepage CTAs now lead with Join (primary) and keep Download for Mac as a secondary action across the header, hero, and "Get started" section.
  • /api/subscribe returns 501 not_configured until EMAIL_OCTOPUS_API_KEY and EMAIL_OCTOPUS_LIST_ID are set, matching the rest of the site's graceful-degrade pattern. .env.example documents both.

Notes for review

  • EmailOctopus credentials are pulled from env vars only — no list ID is hardcoded. Set EMAIL_OCTOPUS_API_KEY and EMAIL_OCTOPUS_LIST_ID in Vercel (and .env.local for dev) to turn it on.
  • The form treats EmailOctopus' "already exists" response as a soft success so resubmissions don't look like errors.
  • PostHog cta_clicked, join_submitted, join_succeeded, and join_failed events fire from the new flow so we can measure conversion.
  • I couldn't run yarn lint in the sandbox (corepack can't reach repo.yarnpkg.com to fetch Yarn 4). Please run yarn lint and the dev server locally to confirm.

Test plan

  • yarn lint and yarn build pass in website/.
  • Without env vars set: visit /join, submit a valid email, verify the inline error surfaces (501 → upstream_error-class message).
  • With EMAIL_OCTOPUS_API_KEY and EMAIL_OCTOPUS_LIST_ID set: submit a real email, verify the contact lands on the EmailOctopus list and the success state renders.
  • Submit the same email twice — second attempt should still show the success state (treated as already-subscribed).
  • Submit an obviously invalid email (foo) — inline validation message appears and no network call is needed (but server still rejects).
  • Homepage: header Join button, hero Join primary + Download for Mac secondary, and "Get started" section all link to /join and /download respectively.

https://claude.ai/code/session_01LtVvWyMttH3PPRARNbQae8


Generated by Claude Code

Adds /join with a signup-style email capture, a POST /api/subscribe
route that talks to EmailOctopus v2, and promotes Join to the primary
CTA across the homepage with Download kept as a secondary option. The
subscribe route returns 501 until EMAIL_OCTOPUS_API_KEY and
EMAIL_OCTOPUS_LIST_ID are set, matching the rest of the website's
graceful-degrade pattern.

https://claude.ai/code/session_01LtVvWyMttH3PPRARNbQae8
@vercel

vercel Bot commented May 7, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
voiceclaw Ready Ready Preview, Comment May 7, 2026 11:52pm

Request Review

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants