Skip to content

Roadmap: from spec to v0.1 #1

Description

@longevityboris

This is the live roadmap for mailing-list-cli. Comment with feedback, vote with reactions, or open a Discussion to shape a section.

Status legend: ⬜ todo · 🟦 in progress · ✅ done


Architecture (locked)

mailing-list-cli shells out to email-cli for every send, audience operation, and webhook event. It does not talk to Resend directly. email-cli is a hard dependency.

Phase 0 — Spec & research

  • ✅ Research swarm: five dossiers on competitors, Resend native capabilities, deliverability, and email templates (/research)
  • ✅ Architecture decision: independent CLI on top of email-cli, follows agent-cli-framework patterns
  • ✅ Public repo + README + LICENSE + AGENTS.md
  • 🟦 Design spec → docs/specs/2026-04-07-mailing-list-cli-design.md
  • ⬜ Implementation plan → docs/plans/

Phase 1 — Foundations (v0.0.x)

  • ⬜ Cargo project scaffold
  • ⬜ Config (~/.config/mailing-list-cli/config.toml)
  • ⬜ Local SQLite store with migrations
  • ⬜ JSON envelope output + TTY auto-detection
  • ⬜ Semantic exit codes (0/1/2/3/4)
  • ⬜ Self-describing agent-info command
  • ⬜ Dependency check on first run: email-cli must be on \$PATH and email-cli agent-info must succeed
  • update self-update from GitHub Releases
  • skill install to drop the embedded skill into Claude / Codex / Gemini paths
  • ⬜ CI: build, test, clippy, release-binary on tag

Phase 2 — Lists, contacts, segments (v0.1.0)

  • list create → wraps email-cli audience create
  • list ls → wraps email-cli audience list
  • contact add, contact tag, contact ls --filter, contact erase → all via email-cli contact …
  • contact import <file.csv> with rate-limit-aware chunking via email-cli contact create loops
  • segment create --filter, segment ls, segment members (segments are local — resolved at send time by querying email-cli)
  • ⬜ Filter expression parser (tag:vip AND opened_last:30d AND NOT bounced)

Phase 3 — Templates (v0.2.0)

  • ⬜ Local template SQLite store (own to mailing-list-cli)
  • ⬜ MJML compilation in-process via mrml — no Node dependency
  • ⬜ Handlebars merge tags {{ snake_case }} rendered locally
  • template create, template ls, template show, template lint
  • template guidelines — embedded agent authoring guide
  • ⬜ Auto plain-text alternative via html2text

Phase 4 — Broadcasts & A/B testing (v0.3.0)

  • broadcast create — stages campaign metadata locally
  • broadcast preview — sends a single test via email-cli send
  • broadcast send — resolves segment → filters suppression → renders template per recipient → writes batch JSON → calls email-cli batch send --file …
  • broadcast schedule — local cron-style scheduler that triggers broadcast send at the right time
  • broadcast cancel — only works on scheduled broadcasts
  • broadcast ab — subject A/B with sample percentage and winner promotion
  • ⬜ Pre-send invariant checks: suppression filter, RFC 8058 headers, physical address footer, complaint rate kill switch

Phase 5 — Webhooks, analytics, deliverability (v0.4.0)

  • event poll — pull recent events from email-cli events ls --json --since … and mirror into local DB
  • event listen — long-running daemon that polls on an interval
  • report show, report links, report engagement, report deliverability
  • ⬜ Engagement scoring + auto-segments (engaged vs sunset)

Phase 6 — Compliance & opt-in (v0.5.0)

  • optin start / optin verify (double opt-in, signed HMAC tokens, 7-day expiry; optin start shells out to email-cli send for the confirmation email)
  • ⬜ Global suppression list with typed reasons (unsubscribed, hard_bounced, soft_bounced_repeat, complained, manually_blocked, spam_trap_hit, gdpr_erasure)
  • suppression ls, suppression import
  • dnscheck — SPF / DKIM / DMARC / FCrDNS validation
  • ⬜ GDPR contact erase, DSAR export
  • ⬜ Per-jurisdiction consent tracking (CAN-SPAM, GDPR, CASL, PECR)
  • ⬜ Warmup mode for new domains/IPs

Phase 7 — Polish (v1.0.0)

  • ⬜ Homebrew tap entry
  • ⬜ Pre-built binaries for macOS (arm64 / x86_64) and Linux
  • ⬜ Shell completions (bash, zsh, fish)
  • ⬜ End-to-end fixture tests with a stub email-cli binary
  • ⬜ Full agent-info contract test

Star the repo if you want this to exist. Open a Discussion if you want to shape it.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions