Marketing & email
SMS Marketing
Indicative price, not an offer: EUR 50-500/month SaaS (varies by contact volume)
Generated from docs/plan/paid/sms-marketing/PLAN.md in the AstroBaaS repository. Nothing described below is implemented — it is the written plan for it.
Merged from duplicate proposals: “SMS Marketing”
A paid module that unifies SMS, email, and push notifications in one campaign workflow. Requires SMS gateway credentials (Twilio/Brevo) and includes compliance tooling for TCPA and GDPR regulations.
The problem
Merchants’ email, SMS, and push notification marketing run on separate platforms with no unified workflow. They manually manage contacts across Klaviyo, Postscript, and others, losing subscriber data consistency and spending 3-5x on platform fees.
What it does
- SMS campaign builder (text-based, URL shortener, preview across carriers)
- Push notification builder (title, body, image, action URL)
- Unified contact management (merge SMS, email, push into one subscriber record with channel preferences)
- SMS and push segmentation (by purchase history, customer tier, location, opt-in status per channel)
- Scheduled SMS/push sends (one-time, recurring, or trigger-based on order/signup)
- SMS/push analytics (delivery rate, open rate, click rate, conversion, opt-out rate per message)
- Opt-in and opt-out compliance (TCPA double-opt-in, SMS consent tracking, easy unsubscribe per channel)
- Phone number validation and carrier lookup (detect US number, format E.164)
- Bounce and complaint handling (hard bounce = remove number, STOP message = mark opt-out)
- Multi-channel campaign (same audience, send SMS to some, email to others, push to app users)
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.
- SMS gateway provisioning (merchant must have Twilio/Brevo account and provide API keys) — paid credential seam; core doesn’t manage vendor relationships
- Phone-to-SMS automation (if customer replies, trigger email to merchant) — paid ‘SMS automation’ module owns two-way messaging and IVR
- Shared inbox (view SMS replies from customers) — requires incoming message routing; paid ‘SMS inbound’ module owns this
- MMS (multimedia SMS with images/video) — many carriers don’t support MMS; paid ‘MMS’ module owns carrier compatibility
- WhatsApp or Telegram integration (separate from SMS) — separate paid module with their own Business API credentials
- Predictive send time per subscriber — requires ML; paid ‘advanced send’ owns time optimization
Data model
Extension of newsletters.subscribers. New entities: sms.subscribers {id, email (nullable), phoneNumber, countryCode, carrier, subscribedToSms, subscribedToEmail, subscribedToPush, smsOptInAt, smsOptOutAt, complaintAt, lastMessageSentAt, createdAt}; sms.campaigns {id, name, type (sms/push/multi), recipientSegmentId, messageBody, scheduledFor, sentAt, status, estCostUsd, costUsd, sentCount, deliveredCount, failedCount}; sms.analytics {id, campaignId, subscriberId, sent, deliveredAt, failedAt, failureReason, openedAt, clickedAt}; sms.optOutLog {id, subscriberId, phoneNumber, optOutReason, optOutAt}.
API
- POST /api/sms/campaigns
- GET /api/sms/campaigns
- GET /api/sms/campaigns/{id}
- POST /api/sms/campaigns/{id}/send
- POST /api/sms/campaigns/{id}/cost-estimate
- GET /api/sms/campaigns/{id}/analytics
- POST /api/sms/subscribers
- GET /api/sms/subscribers
- POST /api/sms/subscribers/bulk-import
- GET /api/sms/subscribers/{id}/opt-outs
- POST /api/sms/credentials
Every route added here must also appear in src/pages/openapi.json.ts — a test
fails the build if it does not.
Admin
SMS campaign builder: message editor with 160-character SMS length preview per carrier, scheduling, segmentation, cost estimate before send. Multi-channel campaign builder: drag to assign channels per segment. Subscriber management: import phone numbers from CSV, view opt-in/opt-out status per channel. SMS provider setup: paste API key for Twilio/Brevo, validate connection. Analytics dashboard: campaign performance by channel, opt-out rate trends, cost per message, ROI. Opt-out log: view subscriber opt-outs with reason and timestamp.
The seam — why this is paid
Core owns free email-newsletter-campaigns (template builder, send, tracking). Paid SMS/push module owns SMS gateway credential management (Twilio/Brevo/Attentive API keys), TCPA compliance tooling (double-opt-in, opt-out recording, consent proof), phone number validation and carrier lookup (telecom data services), multi-channel orchestration (route to SMS vs. email vs. push), cost estimation and billing (support commitment for accuracy).
Requires email/SMS gateway credentials (Twilio, SendGrid). Cloud SaaS model typical; support needed for CAN-SPAM, GDPR compliance.
Dependencies
- email-newsletter-campaigns module (subscriber list, segmentation framework)
- Orders module (segment by purchase history)
- SMS provider account (Twilio, Brevo, Postscript; merchant must have account)
- Scheduler (for scheduled SMS sends)
- Audit log (to track compliance: consent proof, opt-out requests)
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 phone number is validated as E.164 format (e.g., +1-415-555-0100) or rejected with clear error
- A carrier lookup returns correct carrier name (Verizon, AT&T, etc.) for >95% of US numbers tested
- An SMS campaign sends to 1000 opted-in subscribers and shows delivery rate (delivered/sent) ±1%
- An opt-in SMS arrives to customer within 1 second of subscription; contains double-opt-in link
- A customer who replies ‘STOP’ is automatically opted out and no future SMS is sent to that number
- An SMS campaign cost is estimated before send and matches actual cost (Twilio rate * message count) within $0.01 per 100 messages
- A multi-channel campaign sends email to all subscribers, SMS only to opted-in SMS subscribers, push only to app users
- SMS message preview shows character count and carrier-specific rendering (e.g., link shortener truncation)
- Opt-out log shows reason (user STOP reply, bounce, complaint) and timestamp
- Analytics show delivery rate per carrier; alert merchant if Verizon delivery drops below 90%
Risks
Phone number validation: if library is outdated, validation fails for new area codes; keep validation library current. Carrier lookup: if third-party service is down, lookup fails; implement fallback and queue retry. TCPA compliance: if double-opt-in email is lost, merchant is liable for TCPA fines; audit trail must be immutable. Opt-out sync: if merchant has multiple campaigns, opt-out must prevent all future SMS; single source of truth required. Cost overrun: if segmentation returns 100x expected audience, SMS costs spike; show cost before send and require confirmation. SMS delivery failures: if carrier rejects SMS (rate limit, invalid recipient), implement retry logic; log all failures. Carrier blocking: if merchant buys VoIP number, carriers may block SMS; educate on carrier support requirements.
Commercial context
| Suggested price | EUR 50-500/month SaaS (varies by contact volume) |
| Rival anchor | Omnisend, Klaviyo, MailChimp |
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.