Dashboard

Automation Flows

Mailchimp blueprints / Cloudflare migration specs

Welcome Email

Someone signs up for your email list and immediately gets a friendly hello with a 10% discount code. First impression, first sale.

Welcome Email

Trigger: New subscriber joins email list
flowchart TD A["Trigger\nNew subscriber joins list"]:::trig --> B["Send Email\nWelcome + WELCOME10 promo code"]:::email --> C["Tag Contact\nnew-subscriber"]:::tag --> D(["Contact exits"]):::ex classDef trig fill:#61BDB7,color:#fff,stroke:none classDef email fill:#1e2428,color:#dde4e8,stroke:#61BDB7,stroke-width:2px classDef tag fill:#1e2428,color:#dde4e8,stroke:#f0a040,stroke-width:2px classDef ex fill:#222a30,color:#a0aab2,stroke:#3a4450
Content: Welcome message, brand intro, WELCOME10 discount code (10% off first order).
Template: Sonographer Template (branded header, teal body, pink CTA button).
Cloudflare: Shopify webhook on customer/create -> Worker -> Resend send with React Email template.

Post-Purchase Feedback

Trigger: Customer completes a purchase
flowchart TD A["Trigger\nOrder placed"]:::trig --> B["7 day delay"]:::delay --> C["Send Email\nHow was your experience?"]:::email --> D{"Opened email?"}:::cond D -- "Yes" --> E(["Contact exits"]):::ex D -- "No" --> F["3 day delay"]:::delay --> G["Send Reminder\nWe'd love your feedback"]:::remind --> H(["Contact exits"]):::ex classDef trig fill:#61BDB7,color:#fff,stroke:none classDef email fill:#1e2428,color:#dde4e8,stroke:#61BDB7,stroke-width:2px classDef delay fill:#1e2428,color:#a0aab2,stroke:#4a5568,stroke-width:1px classDef cond fill:#1e2428,color:#dde4e8,stroke:#61BDB7,stroke-width:2px classDef remind fill:#1e2428,color:#dde4e8,stroke:#f0a040,stroke-width:2px classDef ex fill:#222a30,color:#a0aab2,stroke:#3a4450
Content: Thank you message, link to feedback survey/review form. Optional product image from order.
MC limitation: Surveys can't be created via API. Link to hosted survey or external form.
Cloudflare: Shopify webhook orders/paid -> Worker -> D1 -> Durable Object delay -> Resend. Survey is a custom Pages form writing to D1.

Post-Purchase Feedback

A week after someone buys, ask how it went. If they don't open, nudge them once more. Builds trust and catches problems early.

Abandoned Cart

Someone adds items to their cart but doesn't check out. They get up to 3 gentle reminders over a few days, showing them exactly what they left behind. Stops automatically if they complete the purchase.

Abandoned Cart

Trigger: Customer abandons cart at checkout
flowchart TD A["Trigger\nCart abandoned"]:::trig --> B["1 hour delay"]:::delay --> C["Send Email\nYou left this behind"]:::email --> D{"Has purchased?"}:::cond D -- "Yes" --> E(["Exit (purchased)"]):::bought D -- "No" --> F["1 day delay"]:::delay --> G["Send Email\nStill thinking it over?"]:::email --> H{"Has purchased?"}:::cond H -- "Yes" --> I(["Exit (purchased)"]):::bought H -- "No" --> J["3 day delay"]:::delay --> K["Send Email\nLast chance"]:::email --> L(["Contact exits"]):::ex classDef trig fill:#61BDB7,color:#fff,stroke:none classDef email fill:#1e2428,color:#dde4e8,stroke:#61BDB7,stroke-width:2px classDef delay fill:#1e2428,color:#a0aab2,stroke:#4a5568,stroke-width:1px classDef cond fill:#1e2428,color:#dde4e8,stroke:#61BDB7,stroke-width:2px classDef bought fill:#162818,color:#50b478,stroke:#4caf50 classDef ex fill:#222a30,color:#a0aab2,stroke:#3a4450
MC limitation: Only the first email can use the Cart content block. Follow-up emails cannot display product data. Support ticket open.
Content: All 3 emails show abandoned cart products (image, title, price) + "Continue shopping" button linked to cart URL.
Cloudflare: Shopify webhook on carts/update -> Worker stores cart in D1 -> Durable Object schedules delays -> Resend sends with full product data at every step.

Browse Abandonment

Trigger: Customer views product but doesn't add to cart
flowchart TD A["Trigger\nViewed product, no cart add"]:::trig --> B["1 day delay"]:::delay --> C["Send Email\nStill interested in this?"]:::email --> D{"Has purchased?"}:::cond D -- "Yes" --> E(["Exit (purchased)"]):::bought D -- "No" --> F["3 day delay"]:::delay --> G["Send Email\nDon't miss out"]:::email --> H(["Contact exits"]):::ex classDef trig fill:#61BDB7,color:#fff,stroke:none classDef email fill:#1e2428,color:#dde4e8,stroke:#61BDB7,stroke-width:2px classDef delay fill:#1e2428,color:#a0aab2,stroke:#4a5568,stroke-width:1px classDef cond fill:#1e2428,color:#dde4e8,stroke:#61BDB7,stroke-width:2px classDef bought fill:#162818,color:#50b478,stroke:#4caf50 classDef ex fill:#222a30,color:#a0aab2,stroke:#3a4450
Content: Product image, name, price from viewed product. Second email adds related products + "Shop now" CTA.
MC: Requires Shopify connected store tracking. Same product data limitation as abandoned cart for follow-ups.
Cloudflare: Custom tracking via Worker on site or Shopify webhook -> D1 stores viewed products -> Durable Object delays -> Resend with full product + related items.

Browse Abandonment

Someone looks at a product but doesn't add it to their cart. A day later, they get a reminder with that product. Catches the "just browsing" shoppers who need one more push.

Win-Back Series

A customer hasn't bought anything in 2 months. First, a friendly "we miss you" with new products. If they still don't buy, offer 15% off. Turns cold customers warm again.

Win-Back Series

Trigger: No purchase in 60 days
flowchart TD A["Trigger\nNo purchase in 60 days"]:::trig --> B["Send Email\nWe miss you!"]:::email --> C{"Has purchased?"}:::cond C -- "Yes" --> D(["Exit + Tag re-engaged"]):::bought C -- "No" --> E["14 day delay"]:::delay --> F["Send Email\n15% off - COMEBACK15"]:::email --> G{"Has purchased?"}:::cond G -- "Yes" --> H(["Exit (purchased)"]):::bought G -- "No" --> I(["Exit + Tag inactive"]):::ex classDef trig fill:#61BDB7,color:#fff,stroke:none classDef email fill:#1e2428,color:#dde4e8,stroke:#61BDB7,stroke-width:2px classDef delay fill:#1e2428,color:#a0aab2,stroke:#4a5568,stroke-width:1px classDef cond fill:#1e2428,color:#dde4e8,stroke:#61BDB7,stroke-width:2px classDef bought fill:#162818,color:#50b478,stroke:#4caf50 classDef ex fill:#222a30,color:#a0aab2,stroke:#3a4450
Content: Email 1: personal greeting, "here's what's new" product highlights. Email 2: discount code COMEBACK15, featured products, urgency CTA.
MC: Standard win-back template exists. Discount codes created in Shopify first.
Cloudflare: Cron trigger on Worker queries D1 for 60-day inactive customers -> Resend. Can generate unique per-person codes via Shopify API.

Review Request

Trigger: 14 days after order delivered
flowchart TD A["Trigger\nOrder delivered + 14 days"]:::trig --> B["Send Email\nHow's your studying going?"]:::email --> C{"Clicked review link?"}:::cond C -- "Yes" --> D(["Exit + Tag reviewer"]):::bought C -- "No" --> E["7 day delay"]:::delay --> F["Send Email\nYour feedback helps others"]:::remind --> G(["Contact exits"]):::ex classDef trig fill:#61BDB7,color:#fff,stroke:none classDef email fill:#1e2428,color:#dde4e8,stroke:#61BDB7,stroke-width:2px classDef delay fill:#1e2428,color:#a0aab2,stroke:#4a5568,stroke-width:1px classDef cond fill:#1e2428,color:#dde4e8,stroke:#61BDB7,stroke-width:2px classDef remind fill:#1e2428,color:#dde4e8,stroke:#f0a040,stroke-width:2px classDef bought fill:#162818,color:#50b478,stroke:#4caf50 classDef ex fill:#222a30,color:#a0aab2,stroke:#3a4450
Content: Purchased product image, "Leave a review" button -> Shopify product review page. Reminder uses social proof angle.
MC: Can trigger on purchase + delay. Can't trigger on delivery specifically (needs Shopify fulfillment webhook).
Cloudflare: Shopify webhook on fulfillment/update (delivered) -> D1 -> Durable Object 14-day delay -> Resend. Can track review submissions directly.

Review Request

Two weeks after their order arrives, ask for a review. Reviews build credibility and help other students decide. One follow-up reminder if they don't click.

Cross-Sell

After someone buys, suggest products that go with what they got. Bought a study guide? Here are the matching flashcards. Increases order value without being pushy.

Post-Purchase Cross-Sell

Trigger: 3 days after order placed
flowchart TD A["Trigger\nOrder placed + 3 day delay"]:::trig --> B{"Product category?"}:::cond B -- "Study Guides" --> C["Send Email\nComplete your study kit"]:::email B -- "Protocol Bundle" --> D["Send Email\nTake your prep further"]:::email B -- "Other" --> E["Send Email\nYou might also like..."]:::email C --> F(["Exit"]):::ex D --> F E --> F classDef trig fill:#61BDB7,color:#fff,stroke:none classDef email fill:#1e2428,color:#dde4e8,stroke:#61BDB7,stroke-width:2px classDef cond fill:#1e2428,color:#dde4e8,stroke:#61BDB7,stroke-width:2px classDef ex fill:#222a30,color:#a0aab2,stroke:#3a4450
flowchart TD A["Trigger\nOrder placed + 3 day delay"]:::trig --> B["Send Email\nPair it with these"]:::email --> C(["Exit"]):::ex classDef trig fill:#61BDB7,color:#fff,stroke:none classDef email fill:#1e2428,color:#dde4e8,stroke:#61BDB7,stroke-width:2px classDef ex fill:#222a30,color:#a0aab2,stroke:#3a4450
Full flow: Branches by product category - recommends complementary items. Requires CF (dynamic product lookup).
Simple (MC): Generic "you might also like" with 2-3 related products. MC can do this with basic product recs.
Cloudflare: Worker reads order from D1, looks up category, selects related products from recommendation map, renders personalized email.

Birthday Discount

Trigger: Contact birthday matches today
flowchart TD A["Trigger\nContact birthday"]:::trig --> B["Send Email\nHappy Birthday! Here's a gift"]:::email --> C(["Contact exits"]):::ex classDef trig fill:#61BDB7,color:#fff,stroke:none classDef email fill:#1e2428,color:#dde4e8,stroke:#61BDB7,stroke-width:2px classDef ex fill:#222a30,color:#a0aab2,stroke:#3a4450
Content: Birthday graphic, unique discount code BDAY[YEAR], "Treat yourself" CTA.
MC: Has built-in birthday trigger. Requires birthday field in audience.
Prerequisite: Collect birthdays via signup form or "tell us your birthday" email.
Cloudflare: Cron trigger checks D1 contacts daily -> Resend. Can generate unique per-person codes via Shopify API.

Birthday Discount

On their birthday, send a personal discount code. Simple, thoughtful, and people love it. Great for repeat purchases and brand loyalty.

Quiz Recommendations

Students take a short quiz about their specialty and experience level. They instantly get a personalized email with the exact study materials that match their needs. Not possible in Mailchimp - requires custom infrastructure.

Quiz-Based Recommendation CF Only

Trigger: Customer completes specialty quiz on site
flowchart TD A["Trigger\nQuiz submitted"]:::cftrig --> B["Store results in D1"]:::cfact --> C["Send Email\nYour personalized study plan"]:::cfemail --> D["3 day delay"]:::delay --> E{"Purchased recommended?"}:::cfcond E -- "Yes" --> F["Send Email\nGreat choice! Usage tips"]:::cfemail --> G(["Exit"]):::ex E -- "No" --> H["Send Email\nYour recommendations are waiting"]:::cfemail --> I(["Exit"]):::ex classDef cftrig fill:#e6a117,color:#fff,stroke:none classDef cfemail fill:#1e2428,color:#dde4e8,stroke:#e6a117,stroke-width:2px classDef cfact fill:#2a2010,color:#dca03c,stroke:#e6a117,stroke-width:1px classDef cfcond fill:#1e2428,color:#dde4e8,stroke:#e6a117,stroke-width:2px classDef delay fill:#1e2428,color:#a0aab2,stroke:#4a5568,stroke-width:1px classDef ex fill:#222a30,color:#a0aab2,stroke:#3a4450
MC: Cannot do this. No quiz infrastructure, no dynamic product selection based on quiz answers.
CF: Quiz = Pages site -> Worker stores in D1 -> Resend with product recs from D1 catalog -> Durable Object follow-up.
LMS tie-in: Quiz data feeds into student profiles. Recommendations improve as student progresses.

Study Progress Emails CF Only

Trigger: Student completes LMS module
flowchart TD A["Trigger\nModule completed"]:::cftrig --> B{"Progress %?"}:::cfcond B -- "25%" --> C["Email: Great start!"]:::cfemail B -- "50%" --> D["Email: Halfway there!"]:::cfemail B -- "75%" --> E["Email: Almost done!"]:::cfemail B -- "100%" --> F["Email: Congratulations!\nCertificate + next course"]:::cfemail C --> G(["Exit"]):::ex D --> G E --> G F --> G classDef cftrig fill:#e6a117,color:#fff,stroke:none classDef cfemail fill:#1e2428,color:#dde4e8,stroke:#e6a117,stroke-width:2px classDef cfcond fill:#1e2428,color:#dde4e8,stroke:#e6a117,stroke-width:2px classDef ex fill:#222a30,color:#a0aab2,stroke:#3a4450
flowchart TD A["Trigger\nNo LMS activity 7 days"]:::cftrig --> B["Send Email\nPick up where you left off"]:::cfemail --> C["7 day delay"]:::delay --> D{"Resumed?"}:::cfcond D -- "Yes" --> E(["Exit"]):::ex D -- "No" --> F["Send Email\nYour study streak is waiting"]:::cfemail --> G(["Exit"]):::ex classDef cftrig fill:#e6a117,color:#fff,stroke:none classDef cfemail fill:#1e2428,color:#dde4e8,stroke:#e6a117,stroke-width:2px classDef cfcond fill:#1e2428,color:#dde4e8,stroke:#e6a117,stroke-width:2px classDef delay fill:#1e2428,color:#a0aab2,stroke:#4a5568,stroke-width:1px classDef ex fill:#222a30,color:#a0aab2,stroke:#3a4450
MC: Completely impossible. No LMS integration, no progress tracking.
CF: LMS fires events to Worker -> D1 updates progress -> Resend sends milestone email. Progress bar rendered dynamically.
LMS tie-in: Email system and LMS share the same database. Every progress event is both a record and an email trigger.

Study Progress

As students work through courses, they get encouragement at 25%, 50%, 75%, and a congratulations at 100%. If they stop studying, a gentle nudge brings them back. Keeps students engaged and finishing what they started.