Commit Graph
1681 Commits
Author SHA1 Message Date
Matthew Meszaros 021a81b73d feat: polish campaign settings controls
Refresh campaign ordering, ramp, lead-flow, CC/BCC, and ESP matching settings with shared controls, clearer labels, and a more accurate provider coverage view.
2026-06-05 15:42:48 +02:00
Matthew Meszaros 293842c842 feat: expose campaign lead order service contract
Add campaign service method declarations for listing and replacing manual campaign lead order.
2026-06-05 15:42:40 +02:00
Matthew Meszaros c4c27fcc19 feat: add campaign lead ordering backend
Add campaign lead ordering repository methods for manual send order and tighten strict ESP matching so SMTP/IMAP is only a fallback outside strict mode.
2026-06-05 15:42:12 +02:00
Matthew Meszaros 3987e4db64 feat: polish campaign flow interactions
Render branch conditions as explicit IF blocks, improve flow layout and connected-component handling, add touch-safe schedule window creation, and animate flow node layout changes.
2026-06-05 14:36:26 +02:00
Matthew Meszaros 2b758113d6 feat: redesign campaign preferences
Replace tabbed campaign settings with a scrollspy settings page, add a unified tag and mailbox sender picker, and show ESP matching coverage for the resolved sender pool.
2026-06-05 14:36:12 +02:00
Matthew Meszaros 77de336d78 feat: unify campaign sender pools
Resolve campaign senders as the union of explicit accounts and tag-selected mailboxes, with all active mailboxes as the empty-selection fallback. Update readiness checks, active-campaign counts, and rotation cursor handling for the unified pool.
2026-06-05 14:35:52 +02:00
Matthew Meszaros 929a779ae5 feat: simplify campaign flow editor
Move sequence editing fully into the explicit flow canvas, support negative branch conditions and connection waits, and remove the obsolete rail and standalone branch panel components.
2026-06-05 09:11:24 +02:00
Matthew Meszaros 0e26b9cd00 feat: refine campaign branch scheduling
Evaluate branch conditions relative to the previous send, defer while windows are still undecided, and let the routed pair finder handle deleted targets and loops at schedule time.
2026-06-05 09:10:57 +02:00
Matthew Meszaros 9ad3d8de53 feat: add campaign step configuration panels
Add reusable step panels for branch editing, per-step A/B variants, and per-step file attachments backed by the new sequence APIs.
2026-06-05 06:04:35 +02:00
Matthew Meszaros e4cd88d491 feat: upgrade campaign step composer
Replace the legacy email body editor with the rich step composer, add preview/template controls, expose AI writing in campaigns and unibox replies, and close confirms after successful actions.
2026-06-05 06:04:31 +02:00
Matthew Meszaros b9d83f1b2c feat: add campaign flow canvas
Replace the sequence step list with a React Flow canvas for branching outreach flows, including auto-layout, edge editing, and inline step editing.
2026-06-05 06:04:14 +02:00
Matthew Meszaros 161d668a8f feat: add campaign sequence api clients
Add frontend models, clients, and React Query hooks for step A/B variants, attachments, branching conditions, and AI writing generation.
2026-06-05 06:04:00 +02:00
Matthew Meszaros e92ec7c661 feat: add ai writing credit backend
Add an organization credit ledger with idempotent consumption, plan credit grants, Anthropic/OpenAI writing providers, and a gated generation endpoint for campaign writing assistance.
2026-06-05 06:03:32 +02:00
Matthew Meszaros b701e4efab feat: send campaign email attachments
Carry attachment references inside the stored email body blob, resolve bytes on workers, and encode attachments for Gmail API and SMTP sends without changing the Kafka send-email contract.
2026-06-05 06:03:21 +02:00
Matthew Meszaros 3c440a9f0c feat: add campaign attachment endpoints
Persist campaign attachment metadata, enforce attachment storage quotas, and expose list, upload, and delete routes backed by object storage.
2026-06-05 06:03:13 +02:00
Matthew Meszaros 630e69037a feat: add per-step campaign ab variants
Scope campaign A/B variants to individual sequence steps and select step variants deterministically per contact and step. Keep campaign-level variants on the existing assignment flow.
2026-06-05 06:03:00 +02:00
Matthew Meszaros 2a2e248ad9 feat: add campaign sequence branching backend
Store per-step branching conditions, validate branch targets, and select campaign contact steps by following the flow graph. Preserve linear progression for steps without branch conditions.
2026-06-05 06:02:55 +02:00
Matthew Meszaros 7c518a5722 feat: clean up campaign rich text editor
Remove the stale lint suppression from the TipTap editor now that the hook dependencies are valid.
2026-06-04 18:58:05 +02:00
Matthew Meszaros 2730de2bff feat: add campaign rich text editor
Add a TipTap-based campaign step editor with formatting controls, link editing, personalization variables, and spintax insertion.
2026-06-04 18:57:30 +02:00
Matthew Meszaros 25cf6d044f feat: polish campaign step controls
Persist wait-day edits only at commit points and use the shared in-app confirm flow for deleting campaign steps. Update sequence deletion cache handling so one mutation instance can remove any step.
2026-06-04 18:57:24 +02:00
Matthew Meszaros cdb2eaa229 feat: add analytics share preview
Add preview sizing, copy-to-clipboard, and improved PNG rendering for analytics share cards. Refresh the exported share card visuals and keep chart bars constrained for compact layouts.
2026-06-04 18:57:08 +02:00
Matthew Meszaros f72952803e feat: add explicit campaign sender picker
Load campaign senders for explicit sender strategy and persist the selected mailbox pool through the campaign sender endpoint. Add a reusable account selector in campaign preferences.
2026-06-04 18:57:02 +02:00
Matthew Meszaros 40413db071 feat: add weekly campaign schedule editor
Add the dashboard editor for per-day campaign sending windows and wire campaign models to the new schedule_windows API shape. Refresh the shared calendar/date controls used by the campaign schedule screen.
2026-06-04 18:56:57 +02:00
Matthew Meszaros 5b9029d2a8 feat: add campaign schedule windows backend
Store per-day schedule windows on campaigns and validate updates before persistence. Use the schedule windows in campaign scheduling, including legacy day/time derivation for existing campaigns.
2026-06-04 18:56:43 +02:00
Matthew Meszaros 203a3e0471 feat: add contacts sheet sync UI 2026-06-04 11:50:14 +02:00
Matthew Meszaros 7fe63a98eb feat: add lead sync frontend clients 2026-06-04 11:50:09 +02:00
Matthew Meszaros 6a4c370152 feat: share contact import mapping utilities 2026-06-04 11:50:04 +02:00
Matthew Meszaros e598b3bd5c feat: remove sheets from integrations UI 2026-06-04 11:50:00 +02:00
Matthew Meszaros d6f055da19 feat: add lead sync backend 2026-06-04 11:49:55 +02:00
Matthew Meszaros b2c885dda2 feat: hide sheets automation integration 2026-06-04 11:49:49 +02:00
Matthew Meszaros 379e056a24 feat: fix organization sync query handling 2026-06-04 09:30:36 +02:00
Matthew Meszaros a1c9a898b5 feat: refresh app favicon assets 2026-06-04 08:55:31 +02:00
Matthew Meszaros 0c49d3c607 feat: improve app routing and browser chrome 2026-06-04 08:55:26 +02:00
Matthew Meszaros f15753dc76 feat: polish dashboard menus and actions 2026-06-04 08:55:13 +02:00
Matthew Meszaros 276758e8b8 feat: improve contact drawer interactions 2026-06-04 08:54:48 +02:00
Matthew Meszaros 981ab01c8c feat: add bulk mailbox warmup controls 2026-06-04 08:54:42 +02:00
Matthew Meszaros ca310748fe feat: polish campaign schedule controls 2026-06-04 08:54:33 +02:00
Matthew Meszaros d630619a30 feat: redesign campaign sequence builder 2026-06-04 08:54:25 +02:00
Matthew Meszaros 33ccb99e7b feat: refresh campaign detail overview 2026-06-04 08:54:17 +02:00
Matthew Meszaros ef58d64988 feat: add campaign send control settings 2026-06-04 08:53:56 +02:00
Matthew Meszaros 2ad67762d4 feat: add dashboard analytics visuals 2026-06-04 08:53:42 +02:00
Matthew Meszaros e1e02c5c18 feat: add campaign send controls backend 2026-06-04 08:53:23 +02:00
Matthew Meszaros 78decdb0f5 feat: document dashboard interaction rules 2026-06-04 08:52:57 +02:00
Matthew Meszaros 558dfeda4e Merge pull request #26 from warmbly/feature/warmup-messages
feat: add warmup deliverability controls
2026-06-03 16:51:51 +02:00
Matthew Meszaros 1afe453eb0 feat: add deliverability controls
Add seed inbox-placement testing with admin management, placement result polling, and seed mailbox persistence.

Add pre-send email verification, invalid-recipient skipping, warmup-health campaign gating, and RFC 8058 one-click unsubscribe headers/endpoints.
2026-06-03 16:47:53 +02:00
Matthew Meszaros f96bdfd2c1 feat: improve warmup content safeguards
Use subject-specific humanization so short warmup subjects are not mangled by body-level opener stripping.

Add rDNS verification logging after provisioning and remove the unused public campaign breaker interface method.
2026-06-03 11:32:19 +02:00
Matthew Meszaros b0b712a43f feat: refine warmup content admin
Treat warmup content as a shared library in settings and admin tables, and realign the conversation pick index with segment-based selection.

Add generation job details and fix warmup placement displays so backend percentages and provider counts render correctly.
2026-06-03 11:32:09 +02:00
Matthew Meszaros ff7ae430f1 feat: simplify warmup worker actions
Remove the worker-side dwell timer now that delayed warmup engagement is scheduled durably by the consumer.

Keep DelaySeconds only for wire compatibility and run received warmup action batches immediately on the worker.
2026-06-03 11:31:41 +02:00
Matthew Meszaros 0b6dc6ddfd feat: split warmup content admin pages
Replace the monolithic warmup content admin page with routed overview, library, generate, jobs, and settings pages.

Add shared warmup content layout, tab navigation, and reusable presentation helpers for the section.
2026-06-03 11:14:47 +02:00
Matthew Meszaros 2009780beb feat: add warmup batch generation
Add OpenAI Batch API support for warmup content generation, including job metadata, polling, cancellation, and completed-batch ingestion.

Share the generation prompt between sync and batch modes and humanize/lint generated threads before storing them in the warmup content library.
2026-06-03 11:14:33 +02:00