Matthew Meszaros
aba0878833
feat: replace the per-node amber if-dot with a single output dot that opens a drag-drop create menu (email, action, or condition) on release, and add a Condition router node (kind wait) you can chain into nested decision trees
2026-06-12 09:51:11 +02:00
Matthew Meszaros
a7a43e0c4c
feat: rename the campaign sequences resource to steps across the API and URL (/campaigns/:id/steps), the JSON fields (target_step_id, step_id/step_name/step_index, analytics steps[], create body steps), the web client/models/route segment/labels, the audit step entity type, and the wire-contract docs; internal Go type names and the Kafka avro schema stay
2026-06-12 09:38:11 +02:00
Matthew Meszaros
a69bf78b2c
feat: move the full email toolset (template picker, save as template, write with AI, content score) into the shared EmailContentEditor and have the original step composer use it too, so every A/B variant has the identical tools as the main email
2026-06-12 09:09:34 +02:00
Matthew Meszaros
e7977d7bdf
feat: edit a step's email and its A/B variants in one horizontal tab bar (Original as the first tab plus a tab per variant, each showing its split share), with an embedded SequenceView for the original arm
2026-06-12 08:39:12 +02:00
Matthew Meszaros
2c4b0a07df
feat: give A/B variants the same composer as the main email via a shared EmailContentEditor (subject + body + Edit/Preview render + template validation), so a variant is edited and content-checked exactly like the step's own email
2026-06-12 08:32:56 +02:00
Matthew Meszaros
8de7e32857
feat: treat a campaign step's own email as the A/B control arm so contacts split across the original plus active variants by weight, and redesign the step variants editor to show the original and variants as one weighted set with live split percentages
2026-06-12 08:04:03 +02:00
Matthew Meszaros
81f81fbe20
feat: normalize automation updated_at to a primitive before comparing it (the API client revives it into a Date, so === compared by reference and the editor always flagged its own save as a teammate change)
2026-06-12 04:58:46 +02:00
Matthew Meszaros
21f25a5361
feat: use automation updated_at as the remote-version token in AutomationFlow so the editor stops falsely toasting its own save as a teammate change
2026-06-12 04:34:13 +02:00
Matthew Meszaros
48ce9074eb
feat: automation presence reflects intent — editors claim 'editing', view-only members claim 'viewing', so the resource viewers stack and online dropdown show accurate activity
2026-06-11 19:55:01 +02:00
Matthew Meszaros
c2215a62c1
feat: richer online-presence dropdown — click to pin, profile pictures, a live online + editing count, and clear per-person activity ('Editing an automation', 'Viewing a conversation', 'Replying to a message') with color-coded icons instead of a bare 'editing'
2026-06-11 19:54:44 +02:00
Matthew Meszaros
9731083ae2
feat: live-collaborate on automations — the builder canvas now reflects a teammate's save in real time instead of only after a reload (re-seeds when you have no unsaved edits, shows a non-destructive 'load their version / keep mine' banner when you do), fixing the seed-once canvas that never reacted to remote changes
2026-06-11 19:51:05 +02:00
Matthew Meszaros
393b683fa2
feat: lock the campaign sequence flow for members without manage-sequences — view-only members can't drag steps, draw branches, or add a step (each attempt pops the permission popup and the Add-step button shows a lock), while pan/zoom/inspect still work
2026-06-11 19:17:20 +02:00
Matthew Meszaros
605583c301
feat: proactively lock the automation builder Save button for members without the integration permission, with a lock icon and permission popup
2026-06-11 19:00:45 +02:00
Matthew Meszaros
384579a36b
feat: proactively lock the campaign Start/Pause, settings Save and schedule Save buttons for members without send/manage-campaign permission (lock icon + permission popup before any request)
2026-06-11 19:00:09 +02:00
Matthew Meszaros
9024d6bc21
feat: add proactive write-permission primitives — useWriteGuard (blocks a denied action before any request and pops the permission dialog) and PermissionButton (auto-locks with a lock icon when the member lacks the permission)
2026-06-11 18:51:59 +02:00
Matthew Meszaros
fd440627fe
fix: portal the sidebar access-locked popup to document.body so it covers the whole screen instead of clipping inside the transformed sidebar aside
2026-06-11 18:49:15 +02:00
Matthew Meszaros
a0221dd312
feat: show one clear, app-wide 'you don't have permission' popup whenever a write action (edit/save/delete) is denied with 403, naming the missing permission or plan, instead of silent failures and generic error toasts across the dashboard
2026-06-11 18:30:53 +02:00
Matthew Meszaros
21b4ba4ea0
fix: let members with the integration permission save automations (write was gated on manage-settings while read used use-integrations, so a manager could open the builder but 403 on save) and surface the backend's real error in the save toast instead of a generic message
2026-06-11 18:15:55 +02:00
Matthew Meszaros
4440613d94
feat: sidebar shows a lock on features the member can't access and pops an explanatory access dialog on click, so a locked feature reads as unavailable instead of an empty page mistaken for 'no data'; align Accounts gate on Manage mailboxes
2026-06-11 17:17:48 +02:00
Matthew Meszaros
b07d21b907
feat: add usePermission hook + a NoAccess surface that explains which permission a member is missing instead of rendering a blank page
2026-06-11 13:19:24 +02:00
Matthew Meszaros
a06a525cf9
feat: live team presence across the dashboard (online avatar stack in header, viewing/replying indicators on unibox threads and rows, editing collaborators in the automation builder, campaign and contact viewers) plus audit-spine query invalidation
2026-06-11 08:04:11 +02:00
Matthew Meszaros
81c6c730de
feat: animate the automation builder side panels
...
The node editor (trigger/condition/action) and the test-run/history panel
used to pop in and out with no transition. They now slide in from the
right with the same spring the app's other sheets use (AnimatePresence,
stiffness 300 / damping 32), the editor body fades when switching nodes,
the action config fields cross-fade when picking a different action or
target, and the insights panel body fades when toggling test vs history.
2026-06-10 11:52:26 +02:00
Matthew Meszaros
252be0911b
feat: make the dashboard fully mobile compatible
...
Sweep every dashboard area for phone-width (360-430px) usability while
keeping desktop rendering identical behind md:/lg: prefixes:
- stack side-by-side panes and wide form grids below md; one-pane-at-a-time
overlays with back affordances for list+detail layouts (unibox thread,
contact context panel)
- full-width drawers and width-guarded dialogs (max-w vs 100vw, scrolling
bodies, reachable footers) across settings, campaigns, contacts, CRM,
integrations, api-keys, admin
- wide tables get overflow-x-auto wrappers or hidden md:table-cell for
secondary columns; row actions stay touch-reachable
- viewport-clamped popovers/pickers via the PopoverMenu primitive
- prevent iOS Safari focus auto-zoom with a mobile-only 16px form-control
rule in global.css
- responsive React Flow canvases (campaign sequences, automations) and
recharts containers
- delete dead legacy components surfaced by the audit (old base/head
scaffolds, duplicate Tags/Folders modals, unused colors picker,
ContactEntry, contacts filter leftovers)
2026-06-10 11:37:15 +02:00
Matthew Meszaros
599e359381
feat: improve automation builder actions
...
Add the run-another-automation native action to the builder, richer action visuals, task assignment fields, disabled-target warnings, and unsaved-change tracking for the automation editor.
2026-06-09 10:57:16 +02:00
Matthew Meszaros
9f90259a80
feat: add icons to select menus
...
Allow select options to render leading glyphs and let full-width selects match their trigger width through the popover menu.
2026-06-09 10:57:11 +02:00
Matthew Meszaros
0ee199e6ce
feat: support team task assignment in campaigns
...
Use the shared assignee/team picker in campaign action steps, persist task_assigned_team_id, and make run-automation campaign steps surface disabled and trigger-mismatch warnings.
2026-06-09 10:57:07 +02:00
Matthew Meszaros
b19a87c235
feat: add task assignee team picker
...
Introduce a shared dashboard picker that can target the fallback owner, a member, or an entire team while emitting user and team ids separately.
2026-06-09 10:57:03 +02:00
Matthew Meszaros
3236ffc459
feat: expand product docs and automation references
...
Restructure the docs navigation into product-focused pages, add automation expression reference content, and refresh related template and personalization surfaces.
2026-06-09 09:07:56 +02:00
Matthew Meszaros
b83dc8ac14
feat: edit automation expressions
...
Adds frontend model support and builder controls for free-form automation condition expressions.
2026-06-08 15:05:43 +02:00
Matthew Meszaros
b909f238ad
feat: preview rendered sequences
...
Connects sequence preview to the server render path and surfaces template parse or unresolved-token issues in the composer.
2026-06-08 15:05:39 +02:00
Matthew Meszaros
defeacee5d
feat: show realtime notifications
...
Adds the dashboard notification bell, marks feed items read, and refreshes the feed from realtime notification events.
2026-06-08 15:05:13 +02:00
Matthew Meszaros
ce406079bc
feat: add deliverability dashboard
2026-06-08 12:04:08 +02:00
Matthew Meszaros
3bc8193139
feat: show campaign ab winners
2026-06-08 12:04:03 +02:00
Matthew Meszaros
99ce8dd223
feat: launch automations from campaigns
2026-06-08 12:03:58 +02:00
Matthew Meszaros
e0d8041fbc
feat: build branching automation flows
2026-06-08 12:03:47 +02:00
Matthew Meszaros
0d0da7b94f
feat: route automation dashboard
2026-06-08 06:55:33 +02:00
Matthew Meszaros
478743ed09
feat: add automation flow builder
2026-06-08 06:55:28 +02:00
Matthew Meszaros
82e753735c
feat: add integration and meetings dashboard
2026-06-08 06:25:44 +02:00
Matthew Meszaros
edce3f5e8d
feat: add sidebar activity counts
2026-06-07 19:35:27 +02:00
Matthew Meszaros
e0a3ee13a4
feat: polish CRM task type colors
2026-06-07 19:35:05 +02:00
Matthew Meszaros
81c4539b20
feat: warn when stop on reply is off
2026-06-07 17:27:00 +02:00
Matthew Meszaros
bb91e6d3e2
feat: add instant branch controls
2026-06-07 17:26:50 +02:00
Matthew Meszaros
ac269a29a7
feat: use themed select in campaign flow
2026-06-07 12:46:46 +02:00
Matthew Meszaros
813b655d13
feat: explain reply branch matching
2026-06-07 12:46:39 +02:00
Matthew Meszaros
95c37efaa1
feat: clarify branch disconnect action
2026-06-07 12:46:08 +02:00
Matthew Meszaros
5ca9a9d944
feat: show instant reply branch guidance
2026-06-07 12:45:33 +02:00
Matthew Meszaros
5e54f37154
feat: fan converging campaign flow edges
2026-06-07 12:44:42 +02:00
Matthew Meszaros
3bcfe7674e
feat: label reply branches as instant
2026-06-07 12:43:57 +02:00
Matthew Meszaros
17351f0806
feat: add instant reply step shortcut
2026-06-07 12:43:07 +02:00
Matthew Meszaros
f9d667ed6d
feat: add themed select menu
2026-06-07 12:39:33 +02:00