feat(marketing-emails): add waitlist launch email campaign#412
Draft
h4yfans wants to merge 1749 commits into
Draft
feat(marketing-emails): add waitlist launch email campaign#412h4yfans wants to merge 1749 commits into
h4yfans wants to merge 1749 commits into
Conversation
…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
Support vertical split view parity
test(e2e): add desktop workflow coverage
Fix vault key initialization
Improve Agent Chat UI
…t, updating conversation ID handling, and improving conversation creation logic. Add new component for blocks-so and adjust tests accordingly.
Remove highlight reminder popover
Add generated Agent Chat conversation titles
fix: prevent Agent Chat final result duplication
…stions Simplify wikilink suggestions
Show reminders in inbox snoozed view
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.
601527e to
0afd6a0
Compare
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
New
apps/marketing-emailspackage with React Email templates for the end-of-June launch waitlist sequence (~350 subscribers).Templates (six)
01-waitlist-launch-announcement01-waitlist-launch-plain02-waitlist-product-preview03-waitlist-feature-deepdivefeaturesLib)04-waitlist-launch-day05-waitlist-last-callDesign 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
apps/marketing-emails/out/pnpm dev:emails,pnpm build:emails,pnpm typecheck:emailsPre-send checklist (for whoever ships these)
WAITLIST25discount code works end-to-end in payment system before [T004] Update electron.vite.config.ts for native modules #4/syncpage handles both new + returning usersTest plan
pnpm typecheck:emails— greenpnpm build:emails— all six templates render to HTMLpnpm dev:emails(port 3006)