When a customer is eligible for multiple flows simultaneously, this tree determines which track takes priority. Read top-to-bottom — the first match wins.
browse_digest_count > 0 before each emailWhen a customer's intent upgrades mid-flow, the higher-intent track takes over. The lower-intent flow exits or goes to offset.
| Escalation Event | What Happens to Current Flow | What Activates |
|---|---|---|
| Browser adds to cart | Browse flow: EXIT immediately | Cart Flow Email 1 at +2h → Cart Digest sequence |
| Cart user starts checkout | Cart flow: Pause, moves to offset days | Checkout Flow Email 1 at +1h → Checkout sequence gets priority days |
| Checkout user places order | Checkout + Cart flows: EXIT immediately | Post-Purchase Thank You → 20-day suppression on ALL flows |
| New subscriber takes any action | Welcome flow: CONTINUES in parallel | Relevant action flow fires concurrently — momentum preserved |
Trigger: Checkout Started event, no Placed Order within window
Lookback: 7 days | Total emails: 4 over 7 days | Exit: Purchase or 7-day expiry
| Timing | Status | Content | CTA | Notes | |
|---|---|---|---|---|---|
| +1 hour | Checkout #1 | LIVE | "Complete your purchase" — dynamic product block showing checkout items, images, prices. Clean, elegant, single focus. | Return to Checkout | Uses existing Klaviyo flow. Template: Abandoned Cart Klaviyo March 2026.html. Skip smart sending — too time-sensitive to delay. |
| +24 hours | Checkout #2 | LIVE | Trust & reassurance — returns policy, warranty, authenticity certification, financing options. Cart contents reminder. Customer service contact info. | Complete Purchase | Existing flow Email 2. "Questions? We're here to help." |
| +3 days | Checkout Digest | NEW | ALL checkout items consolidated (from checkout_digest_items property). Social proof — reviews for those items/categories. "Customers who bought these also loved…" |
Return to Checkout | Uses digest campaign with checkout_digest_count > 0 segment. Script updates property; campaign sends. Items >$1,000: include financing callout. |
| +7 days | Checkout Final | REC | "Your pieces are waiting." Complimentary service offer (free engraving, resizing, cleaning kit). Full trust block. Final gentle close. If cart >$2,000: personal note from consultant. | Complete Purchase | Final touch before items expire. Do NOT discount. Service-based incentive ONLY. |
Trigger: Added to Cart event, no Started Checkout within window
Lookback: 21 days | Total emails: 4 over 10 days | Exit: Purchase, checkout start, or 10-day expiry
| Timing | Status | Content | CTA | Notes | |
|---|---|---|---|---|---|
| +2 hours | Cart #1 | LIVE | "Your cart is saved" — most recent item with image, name, price. Clean design, brand imagery. | View Cart | Existing Klaviyo flow triggered by Added to Cart. Skip smart sending. |
| +2 days | Cart Digest #1 | NEW | ALL cart items consolidated (from cart_digest_items property). Styling tips: "How to wear these pieces." Compare-at price strikethrough where applicable. |
View Cart | Uses digest campaign with cart_digest_count > 0 segment. Exclude profiles with recent checkout (in Checkout Track). |
| +5 days | Cart Digest #2 | NEW | Social proof — reviews for carted items or categories. "Customers who loved these also loved…" Include 1–2 complementary product suggestions. | View Cart | Second digest send. If no engagement on Digest #1, consider different subject line angle. |
| +10 days | Cart Final | REC | Trust & reassurance — returns, warranty, secure payment, financing. "These pieces are still available." Last touchpoint before items go stale. | View Cart | Final cart touch. No discount. Service-based incentive if appropriate (complimentary gift wrap). |
Trigger: Viewed Product event
Re-entry: After 7 days | Total emails: 2 over 5 days | Exit: Purchase, checkout, or browse_digest_count = 0 (conditional split)
browse_digest_items (populated by daily_digest_updater.py) to show ALL recently viewed products in a single grid. Conditional split on browse_digest_count > 0 ensures emails only send when digest data exists.Profile Filters (re-checked before every action):
Placed Order = 0 times in last 20 daysCheckout Started = 0 times since starting this flow| Timing | Status | Content | CTA | Notes | |
|---|---|---|---|---|---|
| +1 day | Browse #1 | LIVE | "💎 Did Something Catch Your Eye?" — Dynamic product grid from browse_digest_items showing ALL recently viewed products with images, names, prices. Purple "View Details" buttons. No divider lines between items. |
View Details (per item) | Conditional split: browse_digest_count > 0 → YES sends email, NO exits flow. Subject: 💎 Did Something Catch Your Eye? Preview: Pieces you've had your eye on at Jewelry Depot |
| +5 days | Browse #2 | LIVE | "Still Thinking It Over? Only 1 Left In Stock" — Same product grid + Shop With Confidence trust block (free shipping, 30-day returns, lifetime warranty, Affirm financing). Real scarcity — Jewelry Depot carries 1 of each piece. | View Details (per item) | Second conditional split: browse_digest_count > 0. Subject: Still Thinking It Over? Only 1 Left In Stock Preview: Each piece is unique — free shipping, 30-day returns & lifetime warranty |
daily_digest_updater.py script populates browse_digest_items (list of up to 8 products), browse_digest_count, browse_first_item_name, and browse_first_item_price on each profile. Browse items are suppressed if the customer also carted or checked out the same product (matched on product_id). Script must run before flow emails render — schedule via cron or run manually.
Trigger: Profile created + subscribed to email (NOT triggered by purchase). Multiple triggers allowed (newsletter signup, discount form, Shopify checkout subscription).
Current state: 1 email only | Does NOT suppress other flows
Profile Filter: Has received email from this flow zero times over all time — prevents duplicate welcome emails when multiple triggers fire for the same profile (e.g., Shopify sync + Klaviyo form simultaneously). LIVE
| Timing | Status | Content | CTA | Notes | |
|---|---|---|---|---|---|
| Immediate | Welcome #1 | LIVE | Welcome + brand story. Signature pieces hero imagery. What makes Jewelry Depot different. | Browse Collection | Currently the ONLY welcome email. This is functional but under-optimized — see Gaps. |
| Day 2–21 | Welcome #2–7 | GAP | Not yet built. See Future Enhancements for the full 7-email sequence plan. | — | Future expansion: education, social proof, styling, craftsmanship, trust signals, soft CTA. |
Trigger: Placed Order event
Suppression window: 20 days — ALL other flows blocked except Thank You
After 20 days: Profile re-enters normal flow eligibility
| Timing | Status | Content | CTA | Notes | |
|---|---|---|---|---|---|
| Immediate | Thank You | REC | Warm personal thank you. Reaffirm great choice. Order details + shipping timeline. Brand voice. | Track Order | Currently handled by Shopify's order confirmation, not Klaviyo. GAP — Klaviyo thank-you email would allow brand-consistent experience and lead into post-purchase flow. |
| Day 1–20 | ⛔ 20-DAY SUPPRESSION WINDOW — No checkout, cart, browse, welcome, or campaign emails. Only Shopify transactional emails (shipping confirmations). | ||||
| Day 20+ | Re-entry | TODO | Suppression lifts. Profile re-evaluated against current behavior. If new browse/cart activity exists, appropriate flow activates. | — | Currently the 20-day exclusion is in the digest script only. Needs to be enforced across ALL Klaviyo flows via flow filters. |
This grid shows ALL tracks side-by-side. Read each row (track) left-to-right to see the email cadence. Colored cells = email fires. Gray cells = suppressed.
| Track | 0–1h | 2–4h | Day 1 (24h) | Day 2 | Day 3 | Day 5 | Day 7 | Day 10 | Day 14 | Day 20+ |
|---|---|---|---|---|---|---|---|---|---|---|
| 🔴 CHECKOUT |
Chk #1 Complete purchase LIVE
|
Chk #2 Trust & financing LIVE
|
Chk Digest All items + social proof NEW
|
Chk Final Service offer REC
|
||||||
| 🟠 CART |
Cart #1 Cart saved LIVE
|
Cart Digest #1 All items + styling NEW
|
Cart Digest #2 Social proof NEW
|
Cart Final Trust signals REC
|
||||||
| 🔵 BROWSE |
Browse #1 Digest grid — "Catch Your Eye?" LIVE
|
Browse #2 Digest grid + trust block LIVE
|
||||||||
| 🟢 WELCOME |
Welcome #1 Brand story LIVE
|
Future: Welcome #2–7 over 21 days
|
||||||||
| 🟣 POST-PURCHASE |
Thank You Order confirmation REC
|
⛔ 20-DAY SUPPRESSION — All flows & campaigns blocked |
Re-entry Normal eligibility resumes
|
|||||||
| ⚪ CAMPAIGNS |
New Arrivals (2×/mo) · Editorial/Lifestyle (2×/mo) · Collection Spotlight (1×/mo) · Seasonal per calendar Frequency: Max 1 campaign/week for engaged. Max 1–2/month for low engagement. Always respect flow priority — skip campaign if profile received flow email that day. |
|||||||||
When a customer has both Started Checkout items and separate Added to Cart items (items they browsed/carted but didn't proceed to checkout with), both tracks run with interleaved timing. Checkout gets priority days.
| Day | Track | Content | Status | |
|---|---|---|---|---|
| +1 hour | CHECKOUT | Checkout Flow #1 | "Complete your purchase" — checkout items with images, prices. Immediate urgency (warm, not aggressive). | LIVE |
| +24h (Day 1) | CHECKOUT | Checkout Flow #2 | Trust & reassurance — returns, warranty, financing. Checkout items reminder. | LIVE |
| Day 2 | CART (offset) | Cart Digest #1 | ALL cart items (not in checkout) consolidated. "While you're deciding, you also had your eye on these…" Styling tips. | NEW |
| Day 3 | CHECKOUT | Checkout Digest | Consolidated checkout items + social proof. Reviews. "Customers who bought these also loved…" | NEW |
| Day 5 | CART (offset) | Cart Digest #2 | Cart items + social proof + complementary suggestions. Secondary conversion opportunity. | NEW |
| Day 7 | CHECKOUT | Checkout Final | "Your pieces are waiting." Service offer (engraving, resizing). Final gentle close for checkout items. | REC |
Result: 6 emails over 7 days. 1 immediate + 5 over the week = roughly 5/week during peak recovery. Acceptable for high-intent dual-track customers with $750+ AOV. The customer has shown intent on multiple items — this level of attention is warranted.
Cross-reference: when a profile is "in" the row track, what happens to the column track?
| Profile is in ↓ \ Effect on → | Checkout Emails | Cart Emails | Browse Emails | Welcome | Campaigns |
|---|---|---|---|---|---|
| 🔴 Checkout Track | ✅ ACTIVE | ⏸ OFFSET | ❌ SUPPRESSED | ✅ Unaffected | ✅ Normal |
| 🟠 Cart Track | — | ✅ ACTIVE | ❌ SUPPRESSED | ✅ Unaffected | ✅ Normal |
| 🔵 Browse Track | — | — | ✅ ACTIVE | ✅ Unaffected | ✅ Normal |
| 🟢 Welcome Track | ✅ Unaffected | ✅ Unaffected | ✅ Unaffected | ✅ ACTIVE | ✅ Normal |
| 🟣 Post-Purchase (20d) | ❌ SUPPRESSED | ❌ SUPPRESSED | ❌ SUPPRESSED | ❌ SUPPRESSED | ❌ SUPPRESSED |
| Email Type | Timing Model | Send Window | Timezone |
|---|---|---|---|
| Immediate triggers (Flow Email #1) | Event-based: 1–2 hours after event | Fire immediately regardless of time of day | N/A — fires on event |
| Flow follow-ups (Flow Email #2+) | Event-based + window: delay hours, then queue for optimal window | 7:00–8:00 PM (primary) or 10:00–11:00 AM (secondary) | Recipient local time |
| Digest campaigns | Schedule-based: fixed campaign schedule | 7:30 PM | Recipient local time (Klaviyo "Smart Send Time" or timezone setting) |
| Lifecycle campaigns | Schedule-based: manual sends | 7:00–8:00 PM (weekday) or 11:00 AM (weekend) | Recipient local time |
| Rule | Limit | Scope | Enforcement |
|---|---|---|---|
| Max emails per day | 1 per day (across flows + campaigns) | Per profile | Klaviyo Smart Sending + flow scheduling |
| Max emails per week (standard tracks) | 3–4 per week | Per profile | Flow time delays + campaign frequency |
| Max emails per week (dual-track) | 5 per week (peak recovery, high intent) | Per profile, dual-track only | Interleave schedule (see Section 6) |
| Browse abandonment throttle | Max 1 per 48 hours | Per profile, browse flow only | Aggregate multiple views into one email |
| Setting | Recommended Value | Rationale |
|---|---|---|
| Global Smart Sending window | 16 hours | Allows evening → next morning sends without blocking. 24h is too restrictive for momentum. |
| Checkout Flow Email #1 | Skip Smart Sending | This is the highest-value email. A hot lead who started checkout 1h ago MUST receive this, even if they got a welcome email earlier. Configure via flow settings → Smart Sending Override. |
| Cart Flow Email #1 | Skip Smart Sending | Same logic. High-intent action = immediate response, never blocked. |
| All other flow emails | Respect Smart Sending | Follow-ups are less time-sensitive. If another email was sent recently, a delay is acceptable. |
| Campaign sends | Respect Smart Sending | Campaigns always yield to higher-priority flow emails. |
| Condition | Value | Purpose |
|---|---|---|
checkout_digest_count | > 0 | Has checkout items to show |
| Checkout Started | > 48 hours ago | Existing flow emails (1h + 24h) have finished sending |
| Checkout Started | < 7 days ago | Items are still fresh / not stale |
| Placed Order | NOT in last 20 days | 20-day purchaser exclusion |
| Received this campaign | NOT in last 3 days | Prevent repeat sends on back-to-back campaign dates |
| Condition | Value | Purpose |
|---|---|---|
browse_digest_count | > 0 | Has browse items to show (conditional split in flow, not campaign segment) |
| Placed Order | NOT in last 20 days | 20-day purchaser exclusion (profile filter) |
| Checkout Started | 0 times since starting this flow | Exit if they escalated to checkout (profile filter) |
browse_digest_count > 0 is checked before each email — if the digest script hasn't run or the profile has no browse data, the profile exits cleanly down the NO branch.| Condition | Value | Purpose |
|---|---|---|
cart_digest_count | > 0 | Has cart items to show |
| Added to Cart | > 4 hours ago | Cart Flow Email 1 (+2h) has already sent |
| Added to Cart | < 21 days ago | Items still within consideration window |
| Started Checkout | NOT in last 7 days | If they're in Checkout Track, don't send Cart Digest (it offsets instead — handled by dual-track flow) |
| Placed Order | NOT in last 20 days | 20-day purchaser exclusion |
| Received this campaign | NOT in last 3 days | Prevent repeat sends |
| Step | When | What |
|---|---|---|
| 1. Script runs | 7:00 PM (30 min before campaign) | python daily_digest_updater.py — updates cart_digest_items and checkout_digest_items on all eligible profiles. Excludes 20-day purchasers. |
| 2. Campaign sends | 7:30 PM recipient local time | Klaviyo campaign targets segment (see above). Sends to all profiles matching segment conditions. |
| 3. Cadence | Every 3 days (Tue + Fri recommended) | Both the script run and campaign send occur every 3 days. Tue + Fri provides even spacing. |
| Track | Cycle Ends When | Cooldown Period | Re-Entry Trigger | Override |
|---|---|---|---|---|
| Checkout | Purchase OR 7 days with no action | 7 days after last checkout email | New Checkout Started event |
New checkout event during cooldown → reset immediately, re-enter |
| Cart | Purchase, checkout, OR 10 days with no action | 7 days after last cart email | New Added to Cart event |
New cart event during cooldown → reset immediately, re-enter |
| Browse | Cart add, checkout, purchase, or flow completes (2 emails over 5 days) | 7 days (Klaviyo re-entry setting: "Allow re-entry after 7 days") | New Viewed Product event after re-entry window |
Digest-based: all views consolidated into browse_digest_items. No per-view emails. Re-entry window prevents email fatigue. |
| Post-Purchase | 20 days after purchase | 20 days (the suppression IS the cooldown) | Automatic — suppression lifts, profile re-evaluates | No override. 20-day suppression is absolute. |
get_recent_purchaser_ids()). The live Klaviyo flows (checkout, cart, browse) do NOT have this filter. A customer who just purchased can still receive abandoned cart emails from the flow — this damages trust and brand perception.Placed Order NOT in last 20 days. This is a 5-minute fix per flow in Klaviyo's flow builder. Priority: DO THIS FIRST.
Placed Order. Email 1 = Thank You (immediate). Start simple, expand later.
daily_digest_updater.py script must be run manually before each campaign send. If forgotten, profiles have stale data and the campaign sends outdated product info (or doesn't send at all if properties are empty).launchd or crontab) to run the script at 7:00 PM every Tue and Fri. Example: 0 19 * * 2,5 cd /path/to/project && .venv/bin/python migration/daily_digest_updater.py
checkout_digest_count > 0.
cart_digest_items property for dynamic rendering (requires script to run before flow email, which may not be realistic for a 2-hour trigger).
These are strategic improvements that build on the current architecture. Listed in priority order by estimated revenue impact.
| # | Enhancement | Why | Complexity |
|---|---|---|---|
| F1 | Expand Welcome Series to 7 emails over 21 days | Brand building during highest-engagement window. Matches 27-day sales cycle. | Medium — content creation + flow setup |
| F2 | Post-Purchase flow: care instructions (Day 3), review request (Day 14), cross-sell (Day 30) | Reduces buyer's remorse, generates reviews, drives repeat purchases | Medium — flow setup + content |
| F3 | Price Drop / Back-in-Stock alerts | Highest-conversion triggered emails for high-intent viewers | Medium — requires Shopify product data integration + flow triggers |
| F4 | VIP flow differentiation ($2,000+ lifetime) | Personal consultant outreach, early access, exclusive services | Low — segment creation + conditional splits in existing flows |
| F5 | Convert digest from campaign to segment-triggered flow | Per-person timing instead of fixed schedule. Cleaner architecture. | Medium — push custom Klaviyo event from script, build flow around it |
| F6 | Winback flow (180+ days lapsed) | Recover lapsed customers with aspirational, non-desperate messaging | Low — segment + 4-email flow |
| F7 | Sunset flow (120+ days unengaged) | Protect deliverability. Suppress or re-permission unengaged profiles. | Low — segment + 2-email flow |
| F8 | SMS expansion (when plan upgraded) | Time-sensitive alerts, VIP-exclusive channel, shipping updates | Medium — plan upgrade + flow modifications |
| F9 | Pinterest Ads audience sync | Suppress, retarget, and build lookalikes from Klaviyo segments on Pinterest | Low — integration setup |
| F10 | Automated digest script scheduling (cron) | Eliminate manual step before each campaign send | Low — crontab setup |
| Item | Status | Date | Notes |
|---|---|---|---|
| Checkout Flow Email 1 (immediate) | ✅ LIVE | Pre-migration | Mailchimp → Klaviyo migration. Template: Abandoned Cart Klaviyo March 2026.html |
| Checkout Flow Email 2 (trust/financing) | ✅ LIVE | Pre-migration | Part of existing flow |
| Cart Flow Email 1 (cart saved) | ✅ LIVE | Pre-migration | Existing flow |
| Browse Abandonment Flow (digest-based, 2 emails) | ✅ LIVE | Apr 3, 2026 | Redesigned from per-view 4-email → digest-based 2-email. Trigger: Viewed Product, 7-day re-entry. Conditional split on browse_digest_count > 0. Profile filters: Placed Order 0 (20d), Checkout Started 0 since flow start. |
| Welcome Email 1 | ✅ LIVE | Pre-migration | Single email. expansion planned (F1) |
| Welcome duplicate prevention filter | ✅ DONE | Apr 3, 2026 | Profile filter: "Has received email from this flow zero times over all time." Prevents duplicate sends from multiple triggers (Shopify + Klaviyo form). |
Browse Digest Properties (browse_digest_items) | ✅ DONE | Apr 3, 2026 | 82 profiles updated, 4 purchasers excluded. Properties: browse_digest_items, browse_digest_count, browse_first_item_name, browse_first_item_price. |
| Browse Digest Email #1 HTML (product grid) | ✅ DONE | Apr 3, 2026 | Dynamic grid: 50% width images, product names, formatted prices, purple "View Details" buttons. Uses {% for %} loop over browse_digest_items. |
| Browse Digest Email #2 HTML (grid + trust block) | ✅ DONE | Apr 3, 2026 | Same product grid + "Shop With Confidence" trust block: free shipping, 30-day returns, lifetime warranty, Affirm financing. |
Cart Digest Properties (cart_digest_items) | ✅ DONE | Apr 1, 2026 | 43 profiles updated, 3 purchasers excluded. daily_digest_updater.py |
Checkout Digest Properties (checkout_digest_items) | ✅ DONE | Apr 1, 2026 | Written for all 43 profiles (same script run) |
| Cart Digest Email Template (HTML block) | ✅ DONE | Apr 1, 2026 | Klaviyo drag-and-drop with {% for %} loop. Working with images, prices, compare-at. |
| Checkout Digest Email Template | 🔲 TODO | — | Same pattern as cart template but uses checkout_digest_items |
| Cart Digest Campaign (Klaviyo segment + scheduled send) | 🔲 TODO | — | Segment: cart_digest_count > 0 + conditions (see Section 9) |
| Checkout Digest Campaign (Klaviyo segment + scheduled send) | 🔲 TODO | — | Segment: checkout_digest_count > 0 + conditions (see Section 9) |
| Add 20-day purchaser exclusion to ALL live flows | ❌ GAP | — | CRITICAL — GAP-1. 5-min fix per flow in Klaviyo flow builder. |
| Verify/fix Smart Sending for Checkout #1 and Cart #1 | ❌ GAP | — | CRITICAL — GAP-3. Check Klaviyo flow settings → Smart Sending override. |
| Checkout Final Email (Day 7 service offer) | 🔲 TODO | — | Recommended addition. Content: service offer, not discount. |
| Cart Final Email (Day 10 trust signals) | 🔲 TODO | — | Recommended addition. Final cart touchpoint. |
| Klaviyo Thank You email (post-purchase) | ❌ GAP | — | CRITICAL — GAP-2. Create Placed Order flow with Thank You email. |
| Cron job for digest script | 🔲 TODO | — | 7:00 PM Tue/Fri. See GAP-4. |
| Fix UTM/collection page bug | ❌ GAP | — | CRITICAL — GAP-5. All collection links in all emails are broken. |
| Verify Browse flow exit conditions | 🔲 TODO | — | CHOKE-3: Confirm browse flow exits on cart/checkout events. |
| Audit existing Checkout Flow email count | 🔲 TODO | — | CHOKE-1: How many emails in the live flow? Need to prevent overlap with digest. |
| Check global frequency cap setting | 🔲 TODO | — | CHOKE-4: Klaviyo Settings → Email → Sending. |
Jewelry Depot Email Flow Architecture v1.1 — April 3, 2026
Store: shop.jewelrydepot.com | Klaviyo Email Plan | AOV: $750 | 27-day sales cycle
Working document — update tracker as items are completed.
v1.1 changes: Browse track redesigned (digest-based 2-email, 7-day re-entry). Welcome duplicate fix (profile filter). 82 browse profiles updated.