AstroBaaS

Marketing & email

Personalized Email Campaigns

Paid pluginsize Mplanned, not built

Indicative price, not an offer: €39/mo; dynamic content blocks, A/B testing, deliverability

Generated from docs/plan/paid/personalized-email-campaigns/PLAN.md in the AstroBaaS repository. Nothing described below is implemented — it is the written plan for it.

A paid module that adds dynamic content blocks to email campaigns (product recommendations, personalized greetings, personalized discounts). Includes A/B testing and email SLA for reliable delivery.

The problem

Generic emails to all customers convert at 1%. Personalized emails with product recommendations and customer-specific discounts convert at 3-5%. Merchants don’t have tools to add dynamic content without coding.

What it does

  • Dynamic content blocks (if-then rules: show product recommendations if customer is tier ‘VIP’)
  • Personalization tokens ({{customer.firstName}}, {{customer.lastOrderDate}}, {{customer.loyaltyPoints}})
  • Product recommendation engine (collaborative filtering or rules-based: customers who bought X also bought Y)
  • Discount personalization (auto-generate time-limited discount codes per customer)
  • A/B testing dynamic content (variant A shows recommendations for product X; variant B shows product Y)
  • Email deliverability SLA (if emails land in spam, we diagnose and fix domain/sender reputation issues)
  • Personalization preview (show campaign preview with sample customer data before send)
  • Conversion tracking (link click → product view → add to cart → purchase; track customer journey)
  • Email performance by personalization (show which personalized blocks had highest click-through rate)
  • Suppress unengaged customers (don’t send personalized emails to customers who haven’t opened last 3 emails)

What it deliberately does NOT do

Each boundary carries its reason. A boundary without a reason gets crossed by the next person who reads this.

  • ML-powered recommendation engine (advanced collaborative filtering, matrix factorization) — paid ‘ml-recommendations’ owns ML models
  • Dynamic send time optimization (send at optimal time per customer based on behavior) — paid ‘send-time-optimization’ owns ML + scheduler
  • Real-time personalization (if customer browses product X, send email within 1 hour) — paid ‘real-time-personalization’ owns automation triggers
  • Automated email sequences based on behavior (if customer adds to cart, send reminder after 4 hours) — paid ‘email-automation’ owns state machines
  • Custom code in templates (Liquid, Handlebars; user-supplied logic) — security; core offers safe personalization tokens only
  • CRM integrations (Salesforce, HubSpot customer sync) — paid ‘crm-integrations’ owns third-party credential sync

Data model

Extension of email-campaign-builder. New entities: personalization.templates {id, campaignId, blocks[], dynamicContentRules[], recommendationRules[], personalizationTokens[]}; personalization.dynamicContentBlocks {id, campaignId, label, condition [{field, operator (equals/contains/gt/lt), value}], content (html), priority}; personalization.productRecommendations {id, campaignId, rule (collaborative/trending/category), limit, algorithmVersion}; personalization.personalizationTokens {id, tokenName ({{customer.firstName}}), dataSource (customer/order/behavior), mappingRule, fallbackValue}; personalization.discountCodes {id, campaignId, customerId, code, discountAmount, expiresAt, usedAt}; personalization.conversionTracking {id, campaignId, customerId, linkClicked, productViewed, addedToCart, purchased, purchaseAmount}; personalization.suppression {id, customerId, reason (unengaged/complained/hard-bounce), suppressedAt}.

API

  • POST /api/personalization/campaigns
  • GET /api/personalization/campaigns/{id}
  • PATCH /api/personalization/campaigns/{id}
  • POST /api/personalization/campaigns/{id}/preview
  • POST /api/personalization/campaigns/{id}/send
  • GET /api/personalization/campaigns/{id}/performance
  • POST /api/personalization/discount-codes
  • GET /api/personalization/discount-codes
  • GET /api/personalization/recommendations
  • PATCH /api/personalization/suppression/{customerId}
  • GET /api/personalization/suppression
  • GET /api/personalization/insights

Every route added here must also appear in src/pages/openapi.json.ts — a test fails the build if it does not.

Admin

Personalized campaign builder: template editor with dynamic content block rules, condition builder. Product recommendation engine setup: choose algorithm (collaborative, trending, category-based), test with sample data. Discount code generator: auto-generate unique codes per customer, set expiration. Preview and testing: render campaign with sample customer data (VIP, regular, inactive). Performance dashboard: view metrics per dynamic block (click rate, conversion rate), heatmap. Suppression list: manage unengaged customers, mark as suppressed. Personalization insights: show merchant which recommendations convert best, which products have highest attach rate.

The seam — why this is paid

Core owns free email-newsletter-campaigns (template builder, send, tracking) and email-campaign-builder (templates, A/B testing). Paid personalization module owns personalization engine (if-then rules, token replacement, safe variable set — business logic, support), product recommendation algorithm (collaborative filtering, trending, category-based — requires data science), email deliverability SLA (diagnose domain/sender issues and provide fixes — support commitment), conversion tracking and journey mapping (link click → purchase — requires event tracking), advanced segmentation for personalization (suppress unengaged, segment by tier — business logic).

Support commitment: personalization algorithm accuracy, email SLA, compliance

Dependencies

  • email-newsletter-campaigns module (subscriber list, basic send)
  • email-campaign-builder module (templates, A/B testing)
  • Orders module (to identify customer tier, purchase history, loyalty points)
  • Products module (for product recommendations)
  • Discounts module (to generate and track discount codes)
  • Email service (SMTP/SES)
  • Email authentication validation (SPF, DKIM, DMARC checking)

Acceptance checks

Each of these must be able to fail. Before claiming this is done, break the code deliberately and watch each one go red.

  • A dynamic content rule ‘if customer.tier == VIP, show premium product recommendations’ correctly identifies VIP customers
  • Personalization token {{customer.firstName}} is replaced with actual customer first name in preview and sent email
  • A/B test comparing personalized content A (recommendations for product X) vs. B (product Y) correctly splits traffic 50/50
  • Product recommendations for a sample customer using collaborative filtering return products similar to customer’s past purchases
  • Personalized discount code per customer is unique, expires 7 days after send, and shows discount amount
  • Discount code is tracked when used on an order; usage count increments and expiresAt is checked before apply
  • Conversion tracking logs customer click on email link, product view, add-to-cart, and purchase; journey is reconstructed
  • A suppressed customer (who hasn’t opened last 3 emails) does not receive personalized campaign
  • Email preview in mobile viewport (375px) shows all personalized blocks and renders without text overflow
  • Performance metrics per campaign show which blocks had highest CTR; if block A (recommendations) had 25% CTR and block B (text) had 5%, report difference

Risks

Personalization token injection: if user content contains {{customer.password}}, sensitive data leaks; whitelist safe tokens only. Dynamic content rendering: if rule condition is malformed, email fails to render; validate rules on save. Product recommendation poisoning: if recommendation engine is biased toward high-margin products, customers see irrelevant recommendations; log rationale. Discount code exhaustion: if 10k customers get codes in one campaign and each code is valid once, 10k codes generated; track inventory. Conversion tracking privacy: if tracking pixel reveals customer identity to external service, GDPR violation; use first-party analytics only. Email deliverability regression: if personalized emails have high unsubscribe rate, sender reputation drops; monitor engagement. Personalization performance: if rendering for 1M customers takes 1 hour, campaign send is delayed; implement async rendering and caching. Suppression list staleness: if suppression list not updated in real-time, unengaged customers still receive emails; re-calculate before each send.

Commercial context

Suggested price€39/mo; dynamic content blocks, A/B testing, deliverability
Rival anchorKlaviyo: €20-1200/mo; Braze: €200+/mo; custom: €2000+

The anchor is what the nearest equivalent charges on Shopify or Magento today. It is context for a pricing decision, not the decision.


Generated from the commerce plan. See docs/COMMERCE-PLAN.md for the full catalogue and ../../AI-GUIDE.md for how to work on this repository.