Discount Campaigns Manage loyalty discounts, sales, and milestone campaigns
{#if loading}
{#each Array(3) as _, i (i)} {/each}
{:else if campaigns.length === 0}
No campaigns yet. Create one to get started.
{:else}
{#each campaigns as c (c.id)}
{c.name}
{@html statusBadge(c.status)}
Type: {typeLabel(c)}
Discount: {c.discount_percent}%
Redeemed: {redemptionDisplay(c)}
{#if c.status === 'draft'} {/if} {#if c.status === 'active'} {/if} {#if c.status !== 'cancelled'} {/if} {#if c.status === 'active' || c.status === 'completed'} {/if}
{/each}
{/if}
{editingCampaign ? 'Edit Campaign' : 'Create Campaign'} Configure discount rules and campaign parameters
Name * {#if errors.name}

{errors.name}

{/if}
Description
Campaign Type *
Discount Percent *
%
{#if errors.discount_percent}

{errors.discount_percent}

{/if}
{#if form.campaign_type === 'time_based'}

TIME-BASED SETTINGS

Scope
Start Date * {#if errors.start_date}

{errors.start_date}

{/if}
End Date * {#if errors.end_date}

{errors.end_date}

{/if}
{/if} {#if form.campaign_type === 'milestone'}

MILESTONE SETTINGS

Milestone Type *
Value * {#if errors.milestone_value}

{errors.milestone_value}

{/if}
Unit {#if form.milestone_type === 'anniversary'} {:else} {/if}

{#if form.milestone_type === 'per_user_booking_count'} Discount applies when a user completes their {form.milestone_value}th booking {:else if form.milestone_type === 'global_booking_count'} Discount applies on the {form.milestone_value}th completed booking across all users {:else} Discount applies on a user's first booking after {form.milestone_value} {form.milestone_unit} since their first visit {/if}

{/if}
Max Redemptions (campaign total)

0 = unlimited across all users

Campaign Stats {#if statsLoading}
{:else if statsData}

Total Discount Given

£{statsData.total_discount_amount.toFixed(2)}

Bookings Discounted

{statsData.booking_count}

{/if}