Features
Campaigns
Campaigns
Campaigns let you display promotional banners across multiple surfaces within a location (project). Banners rotate automatically based on priority and weight, and every impression and click is tracked for analytics.
Overview
- 25 placement slots across 6 surfaces: asset profiles, adoption wizard, mobile public profiles, map app, email certificates, and email marketing.
- State machine: Draft → Scheduled → Active → Paused → Expired → Archived.
- Weighted rotation: among campaigns sharing a slot, higher weight means more frequent display. Priority tiers override weight (highest priority always wins).
- Targeting: restrict by locale, device type, or asset category — or leave empty to show everywhere.
- Analytics: inline impression/click counters + a detailed event log for drill-down.
Creating a Campaign
- Navigate to your location, then open the Campaigns tab (Marketing section).
- Click Create Campaign.
- Fill in the form sections:
- Basics — name, description, destination URL.
- Creative — upload a banner image (1200×628 px recommended, up to 2 MB).
- Lifecycle — start date, end date (optional).
- Rotation — weight (1–100) and priority.
- Placements — choose which slots to occupy.
- Targeting — optionally filter by language, device, or asset category.
- Save. The campaign starts in Draft until the start date arrives (then auto-transitions to Active).
Campaign States
| State | Description |
|---|---|
| Draft | Not yet visible. Edit freely. |
| Scheduled | Start date is in the future. Will auto-activate. |
| Active | Currently serving impressions. |
| Paused | Temporarily halted (resume anytime). |
| Expired | End date passed. No longer serving. |
| Archived | Soft-deleted. Can be restored to Draft. |
Placements
Placements define where a banner appears. A campaign can occupy multiple slots simultaneously.
Surfaces
| Surface | Slots |
|---|---|
| Asset profile | Header, Sidebar top, Sidebar bottom, Inline (mid), Footer |
| Adoption wizard | Intro, Personal, Photo, Message, Map, Celebration |
| Mobile public profile | Cover, Map, Catalog info, Team & location, Inspections |
| Map app | Overlay top-right, Overlay bottom-left, Sidebar top, Drawer bottom |
| Email certificate | Header, Inline, Footer |
| Email marketing | Adoption confirmation, Welcome (post sign-up) |
Rotation Logic
When multiple active campaigns target the same slot:
- The system resolves priority tiers — only the highest-priority campaigns compete.
- Among equal-priority campaigns, one is chosen via weighted random selection (weight / sum of weights).
- Targeting filters (locale, device, asset category) narrow the pool before selection.
Analytics
Each campaign tracks:
- Impressions — how many times the banner was served.
- Clicks — how many times users clicked through.
- CTR — clicks ÷ impressions (computed client-side).
Raw events (with slot, device, locale, session hash) are stored for deeper analysis.
Permissions
| Permission | Description |
|---|---|
campaigns.read | View campaigns list and analytics |
campaigns.create | Create new campaigns |
campaigns.edit | Edit existing campaigns |
campaigns.delete | Soft-delete campaigns |
campaigns.view_analytics | Access detailed event data |
Feature Flag
Campaigns are gated by NEXT_PUBLIC_ENABLE_CAMPAIGNS. Set to true in your environment to enable the module.