2026-08-28 21:54:29 -07:00
..
2026-07-30 17:15:09 +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
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-06-14 09:52:49 +02:00
2026-07-22 10:58:35 +02:00
2026-05-23 16:04:24 +00:00
2026-08-28 21:54:29 -07:00
2026-08-28 11:50:48 -07:00
2026-06-14 09:52:49 +02:00
2026-08-28 12:08:52 -07:00
2026-01-30 08:47:26 +01:00
2026-06-10 11:37:15 +02:00
2026-06-14 09:52:49 +02:00
2026-08-16 07:45:57 +02:00
2026-05-23 10:31:38 +00:00
2026-06-10 11:37:15 +02:00
2026-07-02 20:33:44 +02:00
2026-06-10 11:37:15 +02:00
2026-02-10 19:30:47 +01:00
2026-08-21 18:45:09 +02:00
2026-06-10 11:37:15 +02:00
feat: unbox campaign start dates and make follow-up pacing real: accept today as "start now" and let an explicit null clear start/end dates on PATCH /campaigns (models.NullableTime distinguishes absent from null, which used to silently no-op while the error message told users to send null), reschedule an active campaign's parked wakeup when any schedule field changes so clearing a future start date takes effect immediately instead of at the old slot, let a completed campaign be started again and turn the past-end-date start 500 into a clear 400, gate the campaign task on the step's hard-constraint floor (wait_after, start date, windows, day capacity, mailbox min-gap) via ErrCampaignDeferred so an early successor tick can no longer send a wait-3-days follow-up seconds after step one (live-tested in TestLiveFollowUpWaitIsHonored), disable past days in the schedule date picker, and fix the sandbox seed leaving worker 1a01 free-tier after make seed which unassigned the paid org's mailboxes and failed every send
2026-08-24 05:20:26 -07:00
2026-01-30 08:47:26 +01:00
2026-06-10 11:37:15 +02:00
2026-05-29 16:42:05 +00:00
2026-01-30 08:47:26 +01:00
2026-01-30 08:47:26 +01:00
2026-04-03 06:08:52 +00:00
2026-01-30 08:47:26 +01:00