DataTalksClub / DataTalksClub/relay
R6.3 Campaign parity for AISL
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 0
- Forks
- 0
- Avg merge
- 16m
- Merged PRs (30d)
- 5
Description
Plan issue R6.3 (community-base plan phase 6, docs/plan/phase-6.md). Depends on R1.5 (done, #19).
Goal: bring Relay campaign management to parity with what AISL runs today, so the phase 6 cutover (A6.x) can move campaigns, contacts and preferences onto Relay without losing studio capability.
Scope:
- Audience filters by tag set, category subscription and a client-provided recipient list (the
recipient-listsAPI already exists). - Recount endpoint for a filtered audience.
- Campaign detail with per-recipient disposition as AISL shows today.
- Retry a failed delivery;
assume sentoperator action. - Tags sync: AISL pushes
tier:<slug>,newsletter, and Studio user tags as contact tags on change (subscription.changedcallback closes the loop). The AISL-side push lands with A6.2; Relay accepts and stores contact tags in this issue.
Non-goals:
- No SES sending changes beyond disposition recording.
- No tenant provisioning changes (R6.1 owns production tenancy).
Verification:
- Sandbox: create a campaign for tag
tier:mainwith 3 contacts -> recount 3 -> send -> 3 recipient rows with dispositions.
Read first:
~/git/ai-shipping-labs/email_app/services/campaign_audience.py,campaign_recipients.py,studio/views/campaigns.py,specs/10-email.md.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with docs/plan/phase-6.md, then read services/campaign_audience.py, campaign_recipients.py, studio/views/campaigns.py, and specs/10-email.md. Trace the existing recipient-lists API and campaign flow before addressing filters, recounting, dispositions, retries, operator actions, and contact-tag storage. Done when the sandbox scenario creates a tag-filtered campaign for three contacts, recounts three, and records three recipient dispositions.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- api, backend
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 42/100