Pick up and finish yesterday's cut-off Tier B pass. - build/: PyInstaller scaffold (datatools.spec + launcher.py + hook-streamlit.py + README) — folder-mode bundle, locked 127.0.0.1, per-OS recipe - marketing/COPY.md: single source of truth for every customer-facing string — landing H1/sub/CTAs, demo CTAs, email subjects, Gumroad listing, banned phrases - marketing/community-posts/: 9 drafts (3 posts × 3 niches: bookkeeper, revops, shopify-pet) — story / tip / soft-offer - marketing/emails/: 18 drafts (Gumroad delivery + 5-touch onboarding × 3 niches), per-niche segmentation guidance - docs/NEXT-STEPS.md: flip 2.2 / 2.4 / 3.1 / 3.4 to done with pointers to the new assets; add Phase 0 inventory rows - .gitignore: narrow `build/` ignore so PyInstaller spec + launcher + hooks get tracked, only generated artifacts (build/build/, build/__pycache__/, build/dist/) stay ignored Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1.7 KiB
Shopify-pet · Day 1 — Try it on this Shopify customer export first
Subject: Try it on this Shopify customer export first Send: Day 1, ~9am buyer-local-time
Hi {{first_name}},
Yesterday's email had your download. Today's email has a file — a synthetic Shopify customer export I built specifically to break things Klaviyo silently chokes on.
→ {{sample_file_url}} (480 KB CSV, 2,200 rows — fully synthetic, no real customer data)
What's hidden in there:
- Phone numbers in 6 different formats (
(415) 555-0143,415.555.0143,4155550143,+44 20 7946 0958without country field,+1-415-555-0143 ext 12,415 555 0143) - Email addresses with embedded zero-width spaces (looks identical to a clean email; Klaviyo treats as different addresses)
- ~80 obvious customer duplicates (same email, different case)
- ~40 cross-row duplicates (different email, same name + same shipping address — usually the same person ordering with two emails)
- Shipping addresses with mixed
St./Street/St/STREETfor the same street name - 12 customers from outside North America with country field blank
Drop it into DataTools. Click "Run all" in the analyzer. Then run format → dedupe → text-clean → gate in that order.
Look at the gate report at the end — it'll tell you exactly which rows would have broken Klaviyo, with a one-line "why" per row.
If you want to see the difference: import the raw file to a test Klaviyo list, then import the cleaned file to a different test list. Compare the SMS-deliverable count. The delta is what you've been losing every month.
Reply and tell me what it caught (or missed) — v1.1 detector improvements come from real-world feedback.
— Michael {{support_email}}