Skip to content

Marketing

Manage email campaigns, push notifications, SMS campaigns, and audience segments to engage your users.

Marketing Dashboard

Routes

  • /admin/marketing - Email campaigns
  • /admin/marketing/push-notifications - Push notifications
  • /admin/marketing/segments - Audience segments
  • /admin/marketing/sms - SMS campaigns

Overview

The Marketing section provides comprehensive tools for communicating with your users:

  • Email Campaigns - Send scheduled or immediate email broadcasts
  • Push Notifications - Engage users with browser notifications
  • SMS Campaigns - Reach users via text message
  • Audience Segments - Create and save reusable targeting criteria

Email Campaigns

Email Campaigns

Route

/admin/marketing

Statistics

  • Total Verified Users - Users eligible to receive emails
  • Opt-In Rate - Percentage of users who opted in to marketing
  • Opt-Out Rate - Percentage of users who unsubscribed

Campaign Composer

Campaign Composer

Creating a Campaign

  1. Navigate to /admin/marketing
  2. Enter campaign details:
    • Subject Line - Email subject (keep it compelling!)
    • Preview Text - Text shown in inbox preview
    • Content - Email body (supports HTML and Markdown)
  3. Preview the email
  4. Select recipients:
    • All verified users
    • Specific segments
    • Custom filters
  5. Schedule or send immediately
  6. Click "Send Campaign"

Best Practices

  • Subject Lines: Keep under 50 characters
  • Preview Text: Complement the subject, don't repeat it
  • Content: Mobile-friendly, concise, clear CTA
  • Timing: Test different send times
  • Frequency: Don't over-email your users

Campaign Scheduling

Campaign Scheduling

Schedule email campaigns to send at a future time:

Scheduling a Campaign

  1. Compose your email campaign as usual
  2. Instead of "Send Now", click "Schedule"
  3. Select date and time (must be at least 5 minutes in future)
  4. Review scheduled time in your local timezone
  5. Click "Schedule Campaign"

Managing Scheduled Campaigns

  • View all scheduled campaigns in the "Scheduled" tab
  • See scheduled send time and recipient count
  • Cancel scheduled campaigns before they send
  • Reschedule campaigns if timing needs to change

Test Before Scheduling

  • Use "Send Test Email" to preview before scheduling
  • Test emails are sent immediately to your admin email
  • Verify content and formatting before committing to schedule

Campaign History

Campaign History

View past campaigns:

  • Campaign name and subject
  • Send date and time
  • Recipients count
  • Delivery stats
  • Open rate
  • Click rate
  • Actions (view, duplicate, archive)

Analytics

For each campaign:

  • Sent - Total emails sent
  • Delivered - Successfully delivered
  • Opened - Users who opened
  • Clicked - Users who clicked links
  • Bounced - Failed deliveries
  • Unsubscribed - Users who opted out

Push Notifications

Push Notifications

Route

/admin/marketing/push-notifications

Statistics

  • Active Subscriptions - Users with push enabled
  • Total Sent - All-time push notifications sent
  • Delivered - Successfully delivered notifications
  • Failed - Failed deliveries

Notification Composer

Notification Composer

Creating a Notification

  1. Navigate to /admin/marketing/push-notifications
  2. Enter notification details:
    • Title - Bold headline (keep it short!)
    • Body - Notification text (under 120 characters)
    • Icon - Notification icon (optional)
    • Image - Rich notification image (optional)
    • URL - Destination when clicked
    • Action Buttons - Up to 2 action buttons
  3. Preview on different devices
  4. Select recipients:
    • All subscribers
    • Specific segments
    • By device type (desktop, mobile)
  5. Schedule or send immediately
  6. Click "Send Notification"

Best Practices

  • Title: Under 40 characters
  • Body: Under 120 characters for best display
  • Images: 1200x630px for optimal display
  • Timing: Respect user time zones
  • Frequency: Limit to important updates only
  • Value: Make every notification count

Notification History

View past notifications:

  • Notification title
  • Send date and time
  • Recipients count
  • Delivery stats
  • Click-through rate
  • Actions (view, duplicate, archive)

Automatic Instant Win Notifications

The system automatically sends push notifications when users win instant prizes:

How It Works

When a user claims an instant win prize:

  1. Order is completed and payment confirmed
  2. User reveals their instant win prize
  3. System automatically sends push notification to winner
  4. Notification includes prize details and next steps

Notification Content

Automatic notifications include:

  • Title: "Congratulations! You've won!"
  • Body: Prize name and brief description
  • Icon: Platform icon
  • Action: Direct link to user's prizes page

Configuration

Instant win notifications are:

  • Sent automatically (no manual action required)
  • Only sent if user has push notifications enabled
  • Delivered immediately upon prize claim
  • Tracked in notification history
  • Include order and prize reference for tracking

Viewing Automatic Notifications

All automatic instant win notifications appear in:

  1. Push Notification History
  2. Marked with "Instant Win" tag
  3. Include prize and order details
  4. Show delivery status

Benefits

  • Immediate Engagement - Users know instantly they've won
  • Increased Excitement - Real-time prize notification
  • Better Communication - Automated, consistent messaging
  • Reduced Support - Winners don't need to check manually
  • Improved Experience - Seamless winner notification flow

User Control

Users can:

  • Enable/disable push notifications in their settings
  • Continue to see prizes in their account regardless of notification settings
  • Receive email confirmation as a fallback

Note: Instant win notifications are sent in addition to the standard order confirmation email, which also includes prize details.

Audience Segments

Route

/admin/marketing/segments

Overview

Create and manage saved audience segments for targeted marketing campaigns. Each saved segment becomes a reusable target you can pick from the email campaign composer.

When you save a segment, the platform builds a matching list in Resend in the background. Sends are always instant — they ship to whoever was on that list at the segment's last refresh.

Audience Segments

When you can use saved segments

Saved segments are for sites sending email through the platform's built-in Resend integration. If your site has Klaviyo connected, saved segments are managed in Klaviyo instead — the Audience Segments tab disappears, and the email composer collapses the audience picker to "All opted-in subscribers" (Klaviyo handles the rest from its end).

Disconnect Klaviyo and the segments tab reappears with whatever you had saved.

Creating a segment

Create Segment

  1. Navigate to /admin/marketing/segments
  2. Click "Create Segment"
  3. Enter a segment name and optional description
  4. Pick one or more criteria — combine with AND or OR

Available Criteria

  • Purchase History — Has purchased / Never purchased / Purchased a specific competition
  • Last Activity — Active in the last N days / Inactive for N days
  • Account Age — Created in the last N days / Older than N days
  • Campaign Engagement — Has received past campaigns / Never received a campaign

Logic Operators

  • AND — User must match all criteria
  • OR — User must match any criteria

Status states

After save (and after any criteria change), the segment goes through a short preparation phase while the Resend list is rebuilt:

  • Preparing… (amber) — the Resend list is being built. For larger audiences this can take from a few seconds up to an hour or so. You can leave the page; status updates on next refresh.
  • Ready (green) — the Resend list matches your criteria. The segment is selectable in the campaign composer.
  • Couldn't prepare (red) — the last refresh failed. Hover the chip for the reason. Click Refresh now to retry; if the underlying Resend segment was deleted in the Resend dashboard, delete the local segment and recreate it.

The segment automatically refreshes itself overnight (around 03:00 UTC) so day-to-day drift stays small. Hit Refresh now before a time-sensitive send if you want to bring drift to zero on demand.

Recipient counts

  • Ready segments show the authoritative count from Resend.
  • Preparing… and Couldn't prepare segments show an estimated ~N count from the last criteria preview — useful for sizing while the list rebuilds.

If a segment shows an "N unreachable" warning chip, those users match your criteria but aren't yet contactable through Resend (typically because they signed up before email-list sync was enabled). They're skipped from the broadcast. The number usually goes down as overnight contact-syncs run.

Editing & renaming

  • Name or description only — saves immediately, no preparation phase. Note: the segment's name in the Resend dashboard keeps its original wording (Resend doesn't currently allow segment renames). The platform shows your latest name everywhere it matters.
  • Criteria changed — segment goes back to Preparing… while Resend rebuilds the list.

Using segments in campaigns

In the email campaign composer, pick a segment from the Target Audience dropdown. Only Ready segments are selectable; preparing or failed ones appear greyed out with a status suffix so you know why.

If you try to send to a segment that's not ready (e.g. via the API), the send is rejected with a clear "Refresh and retry" message — no broadcast leaves the platform until the recipient list is current.

Best Practices

  • Name segments for the audience, not the rule (e.g. "VIP buyers" rather than "HAS_PURCHASED + ACTIVE 30d")
  • Hit Refresh now before sending a time-sensitive campaign to a segment that hasn't been touched recently
  • Investigate the unreachable count when it shows up — it usually points to users who never finished email setup

Klaviyo

Onsite tracking

When you connect Klaviyo on the Klaviyo settings card, the platform automatically loads Klaviyo's onsite tools on every customer-facing page once the visitor has accepted marketing cookies. Forms, popups, the Active-on-Site segment, and product recommendation blocks all start working without you pasting any code into Custom Scripts.

Onsite tracking is gated by the same marketing-cookie consent banner that controls Meta Pixel and TikTok Pixel — visitors who reject marketing cookies don't get any Klaviyo browser tracking, in line with UK PECR / EU ePrivacy. When a visitor clicks Accept on the banner, Klaviyo loads at that moment; no page reload needed.

The Klaviyo settings card shows the current state under Onsite tracking:

  • Active — Klaviyo is configured to load on your customer-facing pages for visitors who accept marketing cookies.
  • Reconnect to enable — your Klaviyo connection predates this feature and is missing the account ID needed for onsite tools. Click Reconnect Klaviyo to refresh it; nothing else changes.

If you previously pasted Klaviyo into Custom Scripts

If you set up Klaviyo manually before this feature shipped, the platform will detect the paste and show a banner on the Klaviyo card. Remove the manual paste from Settings > Advanced > Custom Scripts so Klaviyo doesn't load twice (which causes duplicate page-view events). Once the paste is gone, the platform's auto-loaded version takes over with no further setup.

If your manual paste is gated by a cookie-consent banner (Cookiebot, OneTrust, etc.), keep it where it is — the platform will see your paste and skip auto-loading. The banner stays visible until the paste is removed; you can ignore it if you've made a deliberate choice to keep your consent-gated version.

SMS Campaigns

Route

/admin/marketing/sms

Overview

Send SMS marketing messages to users who have opted in to SMS communications.

SMS Campaigns

Creating an SMS Campaign

  1. Navigate to /admin/marketing/sms
  2. Compose your message:
    • Message Content - SMS text (keep under 160 characters for single SMS)
    • Recipients - Select audience segment
  3. Preview message and recipient count
  4. Schedule or send immediately
  5. Click "Send Campaign"

SMS Best Practices

  • Keep it short - SMS charges by message; stay under 160 characters
  • Clear CTA - Include a clear call to action
  • Identify sender - Start with your brand name
  • Include opt-out - Always provide unsubscribe option
  • Timing matters - Avoid early morning or late night sends
  • Compliance - Only send to users who have opted in

SMS History

View past SMS campaigns:

  • Campaign message
  • Send date and time
  • Recipients count
  • Delivery status
  • Opt-out count

SMS Queue

Monitor pending SMS deliveries:

  • View messages in queue
  • Track delivery status
  • Identify failed deliveries

Unsubscribe Handling

  • Users can unsubscribe via reply or web link
  • Unsubscribes are processed automatically
  • Suppressed numbers are excluded from future campaigns

Wheel Spin Popup

Pilot feature. The spin-to-win popup is in measured rollout — enable it only on the pilot tenants nominated by product, and watch for the 4-week validation review before wider rollout.

The wheel popup is a gamified replacement for the standard email sign-up popup. Visitors enter their email, the server picks a wedge using a server-side weighted random draw, the wheel animates to that wedge, and the visitor gets the resulting discount code in the popup and by email.

When the wheel shows

  • Manage at Admin → Marketing → Sign-up Popup (/admin/marketing/popup) with Style: Wheel spin selected. The wheel is a display mode of the same popup config — only one popup style renders at a time.
  • Only shows for non-Klaviyo tenants. Klaviyo tenants use Klaviyo's own sign-up forms.
  • Operators set a master toggle, the display style (Standard / Wheel spin), the delay before the popup appears, how long a dismissal suppresses it, and (Wheel only) the re-spin window after a loss.

Wedges

  • Up to 12 wedges. Each wedge has a label, an integer weight, and an optional promotion code reference.
  • Leave the promotion code blank for a no-win wedge (e.g. "Better luck next time").
  • Operators do not create discount codes from this page — wire pre-existing codes from Admin → Promo Codes.
  • Weights are integers; the server normalises by the sum at pick time. The admin page shows the implied probability next to each wedge.
  • A wedge that references an inactive, expired, or exhausted code is flagged inline. The wheel will silently degrade it to a no-win at spin time and refuse to activate while a winning wedge is broken.

Visitor experience

  • Visitor enters email + optional first name and clicks Spin. The wheel animates and the winning code (or no-win message) is revealed.
  • Spinning is the marketing opt-in: every visitor who spins (win or lose) is added to the marketing list. The popup discloses this under the Spin button ("By spinning, you'll join our marketing list. Unsubscribe any time.").
  • Wins also trigger a transactional email with the discount code.
  • A given email can only win once. Losing visitors can re-spin after the re-spin window (default 30 days).

Reporting

  • Each spin attempt is recorded in the wheel_spins table for audit. Code redemptions are reported via the existing Promo Codes admin pages.
  • Customer support questions about "what did I win?" can be answered from the audit row (the wedge label is captured at spin time, so it survives later edits to the wedge set).

Compliance

GDPR & Privacy

  • All marketing requires user opt-in
  • Unsubscribe link in every email
  • Honor opt-outs immediately
  • Keep records of consent
  • Allow users to manage preferences

Email Regulations

  • Include physical address
  • Provide clear sender identity
  • Honor suppression lists
  • Follow CAN-SPAM Act guidelines
  • Respect time zones for scheduling

Tips

  • Test emails before sending to all users
  • A/B test subject lines for better open rates
  • Segment for more relevant messaging
  • Monitor unsubscribe rates
  • Analyze performance to improve
  • Use push sparingly for best impact
  • Provide value in every communication
  • Respect user preferences and opt-outs