DataTalksClub / DataTalksClub/relay

R6.3 Campaign parity for AISL

Open
#22 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

community-base
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-lists API already exists).
  • Recount endpoint for a filtered audience.
  • Campaign detail with per-recipient disposition as AISL shows today.
  • Retry a failed delivery; assume sent operator action.
  • Tags sync: AISL pushes tier:<slug>, newsletter, and Studio user tags as contact tags on change (subscription.changed callback 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:main with 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

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.