Files
datatools-dev/marketing/emails/shopify-pet/04-day14.md
Michael e1f364f010 feat: Tier B operator scaffolding — bundle, copy SoT, posts, emails
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>
2026-05-02 14:04:37 +00:00

2.0 KiB
Raw Blame History

Shopify-pet · Day 14 — Two-minute trick: hidden-character cleanup

Subject: Two-minute trick: hidden-character cleanup Send: Day 14 Goal: surface the text cleaner — non-obvious, high-value


Hi {{first_name}},

The tool inside DataTools that buyers find last is the text cleaner — and on Shopify customer exports it's usually the one with the most "wait, that was a problem?" moments.

What it catches: invisible characters that got into your customer data when customers typed on their phones. The most common offenders:

  • Zero-width space (U+200B) inside emails — Klaviyo treats sarah@acme.com (with hidden char) and sarah@acme.com (without) as different addresses
  • Non-breaking space (U+00A0) inside addresses — Shopify accepts it, Klaviyo accepts it, but USPS address validation fails on it
  • BOM marker (U+FEFF) at the start of CSV cells — usually from a customer pasting from Word or a PDF
  • Right-to-left mark (U+200F) — rare, but appears in customer names from Hebrew/Arabic locales

The 2-minute workflow:

  1. After the format standardizer pass, run the text cleaner.
  2. It produces an additional sidecar file: <filename>.hidden-chars.csv — every cell where it found a hidden char, with a "what was hidden where" annotation.
  3. Skim it. Most are fine to silently strip (zero-width spaces, BOMs). For rare ones (right-to-left marks in a name), confirm before stripping — sometimes they're load-bearing.
  4. Click "Apply cleanup". The text cleaner replaces the hidden chars in the cleaned CSV.

The reason this matters: dedupe runs after text-clean. Two emails with a hidden char difference look identical in the GUI but get treated as two separate customers — and your dedupe pass won't catch them unless the text cleaner ran first.

The pipeline order baked into the GUI is: analyzer → format → text-clean → dedupe → gate. Stick to it; per-tool runs out of order are the most common source of "wait, why didn't dedupe catch this?".

— Michael {{support_email}}