Skip to content

feat(marketing-emails): add waitlist launch email campaign#412

Draft
h4yfans wants to merge 1749 commits into
mainfrom
feat/waitlist-email-campaign
Draft

feat(marketing-emails): add waitlist launch email campaign#412
h4yfans wants to merge 1749 commits into
mainfrom
feat/waitlist-email-campaign

Conversation

@h4yfans
Copy link
Copy Markdown
Collaborator

@h4yfans h4yfans commented May 17, 2026

Summary

New apps/marketing-emails package with React Email templates for the end-of-June launch waitlist sequence (~350 subscribers).

Templates (six)

# file role
1a 01-waitlist-launch-announcement designed re-intro variant
1b 01-waitlist-launch-plain plain founder-voice alternative (recommended)
2 02-waitlist-product-preview editor screenshot + feature-vote mechanic
3 03-waitlist-feature-deepdive voted feature spotlight (4 pre-written variants in featuresLib)
4 04-waitlist-launch-day live announcement + 25% Sync offer reveal
5 05-waitlist-last-call ~65-word urgency push before discount expiry

Design strategy

Plain founder-voice across the sequence, design budget rising only where conversion demands it. No logo headers, no eyebrow tags, no marketing-template chrome. Visual elements (screenshots, button, offer callout) appear only when they earn their place — primarily on launch day (#4).

Positioning consistently leads with local-first + end-to-end encrypted as the differentiator.

Build pipeline

  • React Email v6, renders to apps/marketing-emails/out/
  • New root scripts: pnpm dev:emails, pnpm build:emails, pnpm typecheck:emails
  • Per-recipient personalization (firstName, discountCode, discountExpiry, screenshotUrl) handled at send time via Resend

Pre-send checklist (for whoever ships these)

  • Verify sender domain DKIM/SPF/DMARC in Resend
  • Add physical postal address to footer (CAN-SPAM compliance)
  • Confirm WAITLIST25 discount code works end-to-end in payment system before [T004] Update electron.vite.config.ts for native modules #4
  • Confirm /sync page handles both new + returning users
  • Produce hero/feature screenshots (560×360, <200KB hosted)
  • Edit hardcoded timing copy ("Three weeks until launch", "Two weeks until launch") to match actual send date

Test plan

  • pnpm typecheck:emails — green
  • pnpm build:emails — all six templates render to HTML
  • Visual preview via pnpm dev:emails (port 3006)
  • Side-by-side review of v1 designed vs v1 plain variant before campaign goes out

h4yfans added 30 commits May 11, 2026 00:07
…ult-mcp

# Conflicts:
#	apps/desktop/src/renderer/src/pages/settings/settings-page.i18n.test.tsx
feat: agent chat P1 — vault MCP server
…n-storage

feat: agent chat P2 conversation storage
Agent Chat P3: Chat UI and runtime orchestration
…t, updating conversation ID handling, and improving conversation creation logic. Add new component for blocks-so and adjust tests accordingly.
Add generated Agent Chat conversation titles
fix: prevent Agent Chat final result duplication
h4yfans added 5 commits May 18, 2026 17:10
Adds new apps/marketing-emails package with React Email templates for the
end-of-June launch waitlist sequence.

Six templates covering the full pre-launch arc:
- 01-waitlist-launch-announcement: designed re-intro variant
- 01-waitlist-launch-plain: plain founder-voice alternative
- 02-waitlist-product-preview: editor screenshot + feature vote mechanic
- 03-waitlist-feature-deepdive: voted-feature spotlight (4 variants in featuresLib)
- 04-waitlist-launch-day: live announcement + 25% sync offer reveal
- 05-waitlist-last-call: ~65-word urgency push before code expiry

Build pipeline:
- react-email v6, exports HTML to apps/marketing-emails/out/
- pnpm dev:emails / build:emails / typecheck:emails scripts at repo root

All templates render with placeholder slots for screenshots and
configurable props (firstName, discountCode, discountExpiry, etc.)
so per-recipient personalization happens at send time via Resend.
Operator manual for the five-email campaign:
- Pre-flight checklist (domain verification, audience, postal address,
  discount code config)
- Per-email send steps for the Resend dashboard, with subject/preview
  text and the HTML file to copy
- Optimal send times (Tue-Thu 9:30am ET for nurture, Fri 2:30pm for
  last-call urgency) with rationale
- Twitter companion content per email, plus a 5-tweet launch-day thread
- Tracking metrics and unsubscribe thresholds
- Troubleshooting table for deliverability, opens, and discount-code
  issues
Operator is in Istanbul (UTC+3). Adds local time next to every ET
reference in the playbook — schedule table, per-email send blocks,
tweet companion timings, launch-day T-30/T-0, and the launch tweet
thread time. Includes UTC offset note explaining ET = EDT (UTC-4) in
May–July, so Istanbul = ET + 7h.
Cold list reality: 350 people signed up months ago — some don't
remember what memrynote.com is when they open #1. Forwarded emails
also lack any orientation without a URL.

Subtle gray hyperlink under "— Kaan" in all 5 plain-style templates:
launch-plain, product-preview, feature-deepdive, launch-day, last-call.

Styled as 15px #888888 underlined — signature-y, not CTA-y. Same
treatment across the sequence for consistency.
Brand is MemryNote now. Bulk replace across all user-facing strings:
six email templates (subjects, previews, body copy, alt text, footer
attribution), PLAYBOOK.md (instructions, subject lines, tweet copy,
launch thread), and README.md.

Code identifiers (component names, type names, package name @memry/
marketing-emails, the worktree) intentionally untouched — those are
internal and renaming them is a separate, larger change.

Domain references stay lowercase (memrynote.com).
The hardcoded https://memrynote.com/unsubscribe URL pointed to a page
that does not exist. CAN-SPAM and Gmail/Apple Mail spam filters both
require a functional unsubscribe — broken links erode domain
reputation fast.

Swap the prop default in all 6 templates to '{{{RESEND_UNSUBSCRIBE_URL}}}'.
Resend's Broadcasts dashboard substitutes the merge tag per recipient
at send time. Resend hosts the unsubscribe confirmation page and adds
the List-Unsubscribe header automatically (renders as Gmail/Apple Mail's
native unsubscribe button).

Adds a pre-flight row to PLAYBOOK.md documenting the verification step:
send a Resend test email, click the unsub link, confirm Resend's hosted
page loads.

Zero hosting work on memrynote.com required.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies documentation Improvements or additions to documentation enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant