email-campaigns

Operates the ATFX CampaignSender email pipeline for importing leads, scheduling campaigns, and managing unsubscribes.

Updated Sep 17, 2026
One-click install
npx skills add https://github.com/karenrebecag/spec-driven-standards --skill email-campaigns-karenrebecag
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: email-campaigns
Source: https://github.com/karenrebecag/spec-driven-standards/tree/main/plugins/martech/skills/email-campaigns
Command: npx skills add https://github.com/karenrebecag/spec-driven-standards --skill email-campaigns-karenrebecag

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve? Running marketing email campaigns at ATFX requires coordinating lead imports, Postgres state in Supabase, paced sending through Microsoft Graph, and a dispatcher on an Azure VPS. This Skill gives the AI the operational knowledge to perform those tasks correctly without re-discovering the architecture each time. ## Core Features & Use Cases - Lead Import: Import CSV lead lists into Supabase with dry-run validation, upsert idempotency, and automatic suppression of Do-Not-Email contacts. - Campaign Scheduling: Create campaigns with templates, schedule them in America/Mexico_City time, and let the VPS systemd dispatcher fire them automatically. - Unsubscribe & Status Management: Handle per-campaign unsubscribes via a Supabase Edge Function and query campaign status, recipients, and send logs. - Use Case: You receive a new CSV of 4,000 Salesforce leads and need a campaign sent next Tuesday at 1 PM CDMX. The Skill walks you through dry-run import, template creation with an unsubscribe footer, scheduling with explicit timezone offset, and verifying recipient counts. ## Quick Start Ask the assistant to import a leads CSV and schedule a new email campaign in CampaignSender, and it will consult Supabase and the playbooks to execute each step.

Frequently Asked Questions about email-campaigns

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I import leads from a CSV into an email campaign?

Run pnpm import leads.csv --campaign <campaign-id> from the CampaignSender project, always with --dry-run first to verify column mapping. The import is an upsert, so reimporting the same file is safe and never duplicates contacts.

How do I schedule an email campaign for a future time?

Create the campaign with status='scheduled' and a scheduled_at timestamptz with explicit offset such as '2026-08-24 13:00:00-06' for CDMX. The dispatcher on the Azure VPS fires it automatically at that time via a systemd timer running every 10 minutes.

What is the daily sending limit for Microsoft Graph email campaigns?

The practical limit is about 9000 emails per day with a 25-per-minute pace, based on Exchange constraints. Campaigns larger than 9000 recipients are split across days, and a ramp-up of 200-300 sends is recommended before high volume.

Does the pipeline prevent duplicate emails to the same contact?

Yes, duplicate sends are impossible by construction. A unique index send_log_sent_once on (campaign_id, email) where result='sent' blocks any second send, and the contacts table has a unique citext index on email.

How are unsubscribes handled in CampaignSender?

Unsubscribes are per-campaign via a Supabase Edge Function that validates an HMAC token and writes to campaign_unsubscribes. The pending-recipients query automatically excludes both global suppression_list entries and per-campaign unsubscribes.

Why does pnpm run fail with a campaign UUID?

The UUID collides with pnpm script name resolution. Use node_modules/.bin/tsx scripts/run-campaign.ts <uuid> directly instead of pnpm run when this happens.