Advocacy Campaigns¶
Help supporters contact their elected representatives through email campaigns.

How It Works¶
- An admin creates a campaign — writes the email subject and body, selects which government levels to target (federal, provincial, municipal, school board), and publishes it.
- A supporter visits the campaign page — enters their postal code to look up their representatives.
- The supporter sends the email — either directly through the platform ("Send Now") or by opening it in their own email app (Gmail, Outlook, etc.).
- Responses get tracked — supporters and admins can share representative responses on the Response Wall, with upvoting and moderation.
Key Features¶
- Postal code lookup — powered by the Represent API, returns representatives at all government levels
- Two send methods — server-sent SMTP (tracked) or mailto link (opens user's email app)
- Email editing — optionally let supporters personalize the email before sending
- Response Wall — public wall where people share how their representatives responded, with moderation and verification
- Campaign stats — track emails sent, responses received, and upvotes
- Featured campaigns — highlight important campaigns on the public listing page
User-Submitted Campaigns¶
Registered (non-temporary) users can create their own advocacy campaigns and submit them for admin review.
- Public submission route — users visit
/campaigns/createto draft a campaign through a guided wizard - 3-step wizard — the submission flow walks users through campaign details (title, description, government levels), email template (subject and body), and a final review step before submitting
- My campaigns dashboard — users can view and manage their submitted campaigns at
/campaigns/mine, including checking moderation status and editing campaigns that have been sent back for changes - Restricted fields — user-submitted campaigns have limited options compared to admin-created ones (no SMTP sending, no highlight, no custom recipients); only the mailto link fallback is enabled by default
- Auto-moderation status — newly submitted campaigns start in
PENDING_REVIEWstatus and remain inDRAFTuntil an admin approves them - Edit restrictions — users can only edit their own campaigns, and only when the moderation status is
PENDING_REVIEWorCHANGES_REQUESTED; editing automatically resets the status back toPENDING_REVIEW - Rate limiting — campaign submissions are rate-limited to 5 per hour per IP to prevent abuse
- XSS protection — all user-supplied text (title, description, email subject, email body) is HTML-escaped before storage
Campaign Moderation¶
Admins review user-submitted campaigns before they go live.
- Moderation queue — accessible at
/app/campaign-moderation, showing all user-generated campaigns filtered by moderation status (pending, approved, rejected, changes requested) - Moderation actions — for each campaign in the queue, admins can:
- Approve — sets the moderation status to
APPROVEDand the campaign status toACTIVE, making it publicly visible - Reject — marks the campaign as
REJECTEDwith an optional reason visible to the submitter - Request changes — sets the status to
CHANGES_REQUESTEDwith feedback, allowing the user to revise and resubmit
- Approve — sets the moderation status to
- Moderation stats — the queue page displays counters for total user-generated campaigns, pending reviews, approved, rejected, and changes-requested counts
- Reviewer tracking — each moderation action records the reviewer's user ID and timestamp
- Search and filter — the moderation queue supports searching by campaign title, submitter name, or email, and filtering by moderation status
Campaign Analytics¶
The Campaign Effectiveness dashboard provides cross-campaign performance analytics at /app/influence/effectiveness.
- Performance tab — per-campaign KPIs including total emails sent, email delivery status breakdown, response counts, response rates, and call counts; top campaigns visualized as a horizontal bar chart
- Representatives tab — tracks individual representative responsiveness across all campaigns; shows emails received, responses given, verified response count, and response rate per representative; sortable by response count, response rate, or name; includes government level distribution
- Geography tab — engagement breakdown by geographic area; group results by postal code, city, or province; enriched with city/province data from the postal code cache
- Funnel tab — conversion funnel visualization showing progression from emails sent to unique participants to responses received to verified responses, plus calls made; includes percentage-of-first and stage-to-stage dropoff rates
- Trends tab — time-series activity chart showing daily or weekly email and response volumes; default view covers the last 30 days; merged email and response series for side-by-side comparison
- Global filters — all tabs share campaign and date range filters; select a specific campaign or view aggregate data across all campaigns
Admin Routes¶
/app/campaigns— create, edit, and manage campaigns/app/campaign-moderation— review and moderate user-submitted campaigns/app/influence/effectiveness— campaign effectiveness analytics dashboard/app/responses— moderate submitted responses/app/email-queue— monitor outgoing email delivery
Public Routes¶
/campaigns— browse active campaigns/campaigns/create— submit a new user-generated campaign (requires login)/campaigns/mine— view and manage your submitted campaigns (requires login)/campaign/:slug— take action on a specific campaign/campaign/:slug/responses— view the response wall