2026-08-26 21:14:34 -07:00
..
2026-08-27 03:05:15 +00:00
2026-01-30 08:47:26 +01:00
2026-01-30 08:47:26 +01:00
2026-06-05 06:04:31 +02:00
2026-05-23 16:37:53 +00:00
2026-07-19 10:02:43 +02:00
2026-01-30 08:47:26 +01:00
2026-01-30 08:47:26 +01:00
2026-06-04 09:30:36 +02:00
2026-06-11 08:04:11 +02:00
2026-07-19 09:16:55 +02:00
2026-01-30 08:47:26 +01:00
2026-08-26 21:14:34 -07:00
2026-08-26 21:14:34 -07:00
2026-08-26 21:14:34 -07:00
2026-06-13 07:18:23 +02:00
2026-01-30 08:47:26 +01:00
feat: rebuild the new-campaign wizard with animated step transitions, a numbered stepper, the shared Toggle instead of a broken hand-rolled switch, per-step validation that explains itself and a discard guard, register PopoverMenu's click-outside in the capture phase so dropdowns inside dialogs close on click-away, add a Campaigns back link and clickable breadcrumb crumbs, add a From contacts leads picker with category filter and select-all-matching backed by the bulk add_campaigns path whose SQL now scopes campaigns by organization instead of the caller, and stop self-hosted no-billing deployments presenting as a free trial or plan-metered by exposing billing_enabled on GET /auth/config, showing a Self-hosted badge, hiding Billing and Refer & earn, and reporting AI credits as unlimited with the header gauge and cost copy hidden
2026-08-18 07:48:58 -07:00
2026-07-22 17:04:51 +02:00
2026-07-20 08:17:50 +02:00
2026-06-12 09:38:11 +02:00
2026-06-14 10:48:06 +02:00
2026-07-19 08:52:56 +02:00
2026-07-19 18:36:31 +02:00
2026-08-13 09:47:46 +02:00
2026-06-05 16:36:34 +02:00
feat: rebuild the new-campaign wizard with animated step transitions, a numbered stepper, the shared Toggle instead of a broken hand-rolled switch, per-step validation that explains itself and a discard guard, register PopoverMenu's click-outside in the capture phase so dropdowns inside dialogs close on click-away, add a Campaigns back link and clickable breadcrumb crumbs, add a From contacts leads picker with category filter and select-all-matching backed by the bulk add_campaigns path whose SQL now scopes campaigns by organization instead of the caller, and stop self-hosted no-billing deployments presenting as a free trial or plan-metered by exposing billing_enabled on GET /auth/config, showing a Self-hosted badge, hiding Billing and Refer & earn, and reporting AI credits as unlimited with the header gauge and cost copy hidden
2026-08-18 07:48:58 -07:00
2026-05-25 05:43:58 +00:00
2026-07-19 11:04:58 +02:00
2026-07-02 20:33:44 +02:00
2026-07-02 20:33:44 +02:00
2026-06-30 19:20:08 +02:00
2026-07-19 18:56:55 +02:00
2026-05-23 16:37:53 +00:00
2026-07-19 11:04:58 +02:00
feat: add Delete and Duplicate campaign actions to the dashboard (issue #185): every campaign row and the detail header get a ⋯ menu (Edit, Duplicate, Start/Pause, Delete) plus a Delete card at the bottom of Settings, all permission-gated with a confirm that spells out what goes; DELETE /campaigns/:id is now organization-scoped instead of user_id-scoped so teammates can delete, runs in one transaction that also deletes the campaign's pending tasks and cancels a wakeup tick claimed at that moment (campaign_tasks only nulls its link, so those rows kept firing), removes attachment objects and publishes CAMPAIGN_DELETED so a teammate's open detail page is sent back to the list; new POST /campaigns/:id/duplicate copies the campaign row as a draft with steps and their branch graph rewired onto new step ids, tags, folders, senders with rotation reset, A/B variants, advanced settings and attachments (quota-checked, blobs undone if the copy fails) and none of the leads, progress, logs, counters, ramp level, guardrail trip or past dates, naming it (copy)/(copy N) inside the 50 byte cap without splitting runes; a claimed campaign tick whose campaign vanished now ends the chain instead of staying active forever; covered by TestLiveCampaignLifecycle* against real SQL, RemapBranchTargets and duplicateName unit tests and a react-query vitest for the list cache, with API reference, endpoint map and campaigns guide updated
2026-08-25 08:54:51 -07:00
2026-06-01 04:25:14 +02:00
2026-04-03 06:08:52 +00:00
2026-01-30 08:47:26 +01:00