Reason Commons Open Interest Signup Implementation Plan
Reason Commons Open Interest Signup Implementation Plan
For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking.
Goal: Let Reason Commons visitors register interest in future updates through the shared CRM route, without starting a newsletter or sending email.
Architecture: The landing uses a normal HTML form post to the globally enabled /interest/v1 Worker route. The Worker records the submission and consent evidence in Twenty; the Worker, not Reason Commons, renders the success page. This supersedes the target-packet plan at 2026-09-08-reasoncommons-future-updates-signup.md for the current pre-newsletter scope.
Tech Stack: Flowershow MDX-compatible Markdown; config.json; Life Itself Mailer open-interest client guide.
Global Constraints
- Exclude
docs/superpowersfrom Flowershow publication throughconfig.json. - Use
target=reason-commonsandproject=Reason Commonsconsistently. - Use the visible promise
Get future updates from Reason Commons.and consent-copy version2026-09-09. - Post only
email,target,project,consent_copy,consent_copy_version, andsourcetohttps://mailer.lifeitself.org/interest/v1. - Do not add a sender, brand configuration, Resend data, newsletter language, double opt-in, JavaScript, CORS, a redirect, or any tracking/profile fields.
- Do not publish the form until the CRM operator confirms
INTEREST_SIGNUPS_ENABLED=trueis deployed and a malformed-input request returns400.
Task 1: Exclude private process material
Files: Modify config.json.
- Step 1: Add the exclusion
Add "/docs/superpowers" directly after "/docs/plans" in contentExclude.
- Step 2: Validate configuration
Run node -e "JSON.parse(require('fs').readFileSync('config.json', 'utf8'))". Expected: exit status 0.
Task 2: Confirm the shared endpoint is ready
Files: Read ../crm/guides/open-interest-signup.md.
- Step 1: Check the safe malformed-input response
Post email=not-an-email, target=reason-commons, project=Reason Commons, consent_copy=Get future updates from Reason Commons., and consent_copy_version=2026-09-09 to https://mailer.lifeitself.org/interest/v1.
Expected: 400; 404 means the CRM operator must enable and deploy the shared route, and no interest record or email is created by this check.
- Step 2: Verify one controlled successful submission
Use an approved seed mailbox and the exact form fields from Task 3. Expected: Worker confirmation page and a Twenty interest record with target reason-commons, the given consent copy/version, and canonical landing URL as source; no Resend state or email.
Task 3: Add the landing form
Files: Modify README.md; modify custom.css.
- Step 1: Replace the placeholder with the native form
Use the exact endpoint and hidden values from Step 1, render the same consent promise as visible text adjacent to the submit button, and retain the existing GitHub and Issues & discussion links beneath the form.
- Step 2: Preview the page
Run fl . --yes, then check the label, keyboard interaction, low-volume promise, and form layout. Remember that preview ignores contentExclude; verify the exclusion after production deployment.
Task 4: Record the public change
Files: Modify changelog.md.
- Step 1: Add the release entry after the controlled signup succeeds
Add a newest-first dated entry saying visitors can register interest in occasional future Reason Commons updates. Do not claim that a newsletter exists or describe CRM implementation details.