Email Lifecycle State Machine

Canonical source of truth for Solid's lifecycle email logic. This file defines states, triggers, subject lines, exemptions, and suppression behavior for the rolling-access model. If this file and Marketing/email.md conflict, this file wins.

Canonical
This file governs the system
State definitions, transitions, subject lines, operational rules, and lifecycle boundaries live here. Marketing/email.md is the strategy companion, not the final arbiter.
Voice
Founder voice throughout
User-facing emails should read like a note from the founder: first-person singular when speaking directly, calm and useful, with -- Solid as the consistent sign-off.
Cap
Weekly cap has explicit exemptions
The 1-per-week marketing cap does not block account-setup or activation/onboarding emails (W1, A1-A3, G1-G2). Transactional emails are outside the cap entirely.
Triggering
Behavior matters more than timing
Automations need product events like dashboard return, subscription started, first build completed, renewal approaching, and usage decline. Time delay alone is not enough.
Tooling requirement. This state machine needs behavioral triggers (dashboard return, subscription started, first build completed, renewal approaching, usage drop), not just time delays. Customer.io, Loops, or ConvertKit with automations. Mailchimp works for the waitlist phase but gets clunky for behavior-based sequences.

Primary journey: Waitlist → Admitted → Activated → Engaged. Everything else is an off-ramp, overlay, or recovery state layered on top of that path.

WAITLIST

Pending Activation

Signed up, completed setup, workspace not yet activated. Dashboard shows "Solid is at capacity." Goal: keep them warm, reinforce the category framing, collect signal on who to admit next.

Entry: Completes workspace setup
Exit → Admitted: Workspace activated (by code or backend)
Exit → Cold: 30+ days, stopped opening emails
WAITLIST COLD

Disengaged from Waitlist

On the waitlist 30+ days and stopped opening emails. One re-engagement attempt, then suppress from active sends. Don't delete them. They can be reactivated with a major announcement as a one-time broadcast.

Entry: 30+ days pending, no email opens
Exit → Waitlist: Re-engages (opens or clicks)
Otherwise: Suppress from active sends, keep in broadcasts-only
ADMITTED

Access Granted, Subscription Pending

Workspace activated (by code or backend). In Solid, this means they still need to choose a plan, add payment, verify phone, and confirm subscription before entering the workspace. The access email is the onboarding. Get them to finish subscription and reach their first build as fast as possible.

Entry: Workspace activated by code or backend
Exit → Activated: Subscribes and completes first build
Exit → Ghost: No return visit or no subscription started after 48h
GHOST

Admitted, No Return Visit

Workspace is ready, but they never came back to choose a plan or complete subscription. Usually timing, not disinterest. Short runway to activate, then move on. Don't revoke access unless capacity requires it, and if so, warn them first.

Entry: 48h after admission, no return visit or subscription start
Exit → Activated: Returns, subscribes, and builds
After G2: Suppress to monthly product updates only
ACTIVATED

Subscribed, First Build Complete

Has subscribed, entered the workspace, and completed their first conversation or build. Goal: deepen usage, build habit, turn them into advocates. All triggers are relative to first build date.

Entry: Completes first build/conversation
Exit → Engaged: Regular usage pattern established
Exit → Stalled: No activity 7+ days after initial use
STALLED

Built Once, Went Silent

Subscribed, tried it, drifted away. Don't spam. Find out what happened or let go gracefully. After S3, suppress from active sequences and move to product updates only.

Entry: No activity 7+ days after last build
Exit → Activated: Comes back and builds again
After S3: Suppress to product updates only
ENGAGED

Regular Active Usage

Using the product regularly. Reduce email frequency. They're already in the product. Don't over-communicate. Goal: keep informed, deepen loyalty, create referral sources.

Entry: Regular usage pattern established (multiple builds)
Exit → Power User: Sustained high usage
Exit → At-Risk: Usage drops significantly (2+ weeks inactive)
POWER USER

Sustained High Usage

Sub-segment of Engaged. Consistently high usage relative to plan. Same email cadence as Engaged, plus expansion triggers. These users are your best referral and testimonial candidates.

Entry: Sustained high usage over multiple billing cycles
Exit → At-Risk: Usage drops significantly
AT-RISK

Usage Declining

Was building regularly, now inactive for 2+ weeks. This is a trust state, not a guilt state. Don't say "we miss you." Surface problems or get out of the way.

Entry: Usage drops significantly (2+ weeks inactive)
Exit → Engaged: Re-engages
Exit → Churned: Cancels subscription
CHURNED

Cancelled Subscription

Cancelled their paid plan. Post-churn sequence: listen first, then share improvements, then make one offer, then stop. No guilt, no desperation. Their workspace and work stay intact.

Entry: Cancels subscription
Exit → Activated: Re-subscribes
After C4: Permanently suppress from all marketing
WIN-BACK

Final Re-engagement Window

The tail of the churned sequence (C3-C4). After C4, permanently suppress from all marketing emails. They only hear from Solid again if they resubscribe or if legally required. Major broadcasts (funding, Product Hunt) are the sole exception.

Entry: Day 30+ after cancellation (C3-C4 phase)
Exit → Activated: Re-subscribes
After C4: Permanently suppress. Transactional only

One-time sends to the full list, not part of any sequence. Every broadcast must have a segment-aware CTA. The same news goes to someone on the waitlist for 2 months and someone who uses Solid daily, but the action you want from each is different.

Weekly cap. No more than 1 marketing email per week to any user, except account-setup and activation/onboarding emails (W1, A1-A3, G1-G2). Transactional emails are outside the cap.

Suppression rules. After WC1 with no engagement, suppress to broadcasts only. After G2 or S3, suppress to product updates only. After C4, permanently suppress from all marketing. If a monthly summary would show $0 usage, suppress it and trigger AR1 instead.

Transactional boundary. Payment receipts, payment failures, plan changes, and top-up confirmations are not lifecycle emails. They do not move users between marketing states and should not depend on marketing suppression logic.

Phase 1
Before launch
W1: Welcome · W2: Category problem · A1: You're in · A2: Quick win nudge · Launch day broadcast
Phase 2
Weeks 3-4
A3: Day 3-4 revision prompt · W3: Proof of life · W4: Social proof
Phase 3
Post-launch, first 30 days
ACT1-3: Activated sequence · S1-3: Stalled sequence · G1-2: Ghost sequence · Ongoing waitlist update template
Phase 4
60-90 days, when you have enough users
AR1: At-risk trigger · C1-C4: Churn sequence · E1: Expansion emails · R1: Referral prompt · WC1: Waitlist cold re-engagement

Source of truth. This file is the canonical state machine. Marketing/email.md should match it, not override it. If something changes here, the companion doc should be updated to reflect the change.

Subscription gate. Solid has a required subscription step between ADMITTED and ACTIVATED. When admitted, the user must select a plan, add payment, verify phone, and confirm before entering the workspace. This means GHOST in Solid is "never came back to subscribe," not "never logged in."

Voice rule. Use founder voice throughout. Direct emails should sound like a note from one person who knows the product well. Prefer first-person singular in body copy; keep -- Solid as the consistent sign-off.

Language rules. User-facing copy must follow onboarding.md: no "waitlist," "early access," "apply," or "request access." Use capacity framing: "workspace," "ready," and "when." State names like WAITLIST and GHOST are internal only; the subject lines and snippets in this file already follow the public framing.

Referral approach. The single referral nudge (R1) at week 4-6 is intentionally light. Solid rejects gamification, so no referral ladders, points, or leaderboards. The incentive is simple: if an engaged user refers someone strong, prioritize that person for activation.