Project plan
Phased rollout from empty repo to first production send. Anyone on the team can use this page to see what is done, what is in flight, and what comes next.
Foundation
Sync the Lovable scaffold locally, set up the Supabase environment, and commit the planning docs alongside the code.
- Clone the repo locally and run bun install.
- Verify the Lovable scaffold loads with bun run dev.
- Confirm the Supabase project is provisioned and keys are in .env.
- .env.example and .dev.vars.example committed as templates.
- data/ added to .gitignore for the upcoming HubSpot CSV.
- Project plan, README, and HubSpot export checklist committed to the repo.
Database and dry-run import
Validate the Supabase schema, build the HubSpot importer with a dry-run default, write to the database only after the dry-run report looks clean.
- Added
last_engaged_at timestamptzcolumn tosubscribersin the Phase 0 closeout migration. - Build
scripts/import-hubspot.tswith a--dry-rundefault and explicit--committo write. - Stream-parse the CSV via papaparse, validate each row with Zod.
- Export contacts from HubSpot and save to data/hubspot-export-{date}.csv.
- Generate data/dry-run-report.json with totals, invalid emails, duplicates, opt-outs, bounces, engagement breakdown.
- Review the report, then proceed to Phase 2.
List hygiene
Run the CSV through email verification, segment by engagement, import only the verified warm segment to Supabase first.
- Choose a verification provider (ZeroBounce, NeverBounce, or Bouncer). Roughly $600 for 120k.
- Upload the CSV, download the verified result.
- Drop invalid, catch-all, disposable, and role-based addresses.
- Segment: warm is engaged in the last 6 months, cold is older or never engaged.
- Run the importer with --commit --segment=warm to write the warm segment.
- Tag everyone with migrated:hubspot-2026-05 for traceability.
First send infrastructure
Set up Resend, authenticate news.adway.ai, build the first React Email template, send a test to 5 to 10 colleagues.
- Create Resend account, start on the free tier.
- Authenticate news.adway.ai with MX, SPF, DKIM, and DMARC records.
- Install resend and @react-email/components.
- Build
emails/templates/base-layout.tsxandtest-send.tsx. - Build
scripts/send.tsand thesupabase/functions/resend-webhookedge function. - Send the test newsletter to a hardcoded internal list of 5 to 10 colleagues.
Domain warm-up
Build sender reputation on news.adway.ai by ramping the send volume gradually. Pause immediately if bounce or complaint rates spike.
- Day 1: send to the 500 most recently engaged warm contacts.
- Day 3: 1,000. Day 5: 2,500. Day 8: 5,000.
- Day 12: 10,000. Day 16: 20,000.
- Day 20 onward: full warm segment at normal cadence.
- Bounce rate target under 2%, spam complaint rate under 0.1%, warm open rate 20 to 40%.
- Pause sends if bounce passes 5% or complaints pass 0.3%.
Cold segment re-permission
Decide what to do with the older 40 to 60k cold contacts once the warm segment is sending cleanly. Plan recommends a single re-permission campaign.
- Option A: archive cold contacts and never email them. Safest for deliverability and GDPR.
- Option B (recommended): one re-permission campaign tied to a specific recent Adway shipment. Active equals those who opt back in.
- Option C: a slow re-engagement series of 3 pieces over 6 weeks. Higher reach recovery, higher reputation risk.
- Frame the re-permission email around something specific Adway has shipped, not a generic 'we miss you'.
Budget
For comparison: HubSpot Marketing Hub Pro at this volume runs roughly $890 per month.
- Email verification (ZeroBounce)~$600
- Total~$600
- Resend Scale (100k to 250k emails)$90 to $190
- Supabase Pro$25
- Lovable (optional)$20+
- Total~$115 to $235