Commit Graph
146 Commits
Author SHA1 Message Date
Matthew Meszaros 977daf8a01 feat: surface the inbound webhook trigger in the automations builder with a copyable per-automation webhook URL and caller-defined payload conditions 2026-06-13 13:08:04 +02:00
Matthew Meszaros 534928cfdd feat: add a safe Set-variables (transform) automation node — computes named values from Go templates against the event + prior step output and writes them back for later steps to reuse, running the same sandboxed text/template engine as every other action value (no I/O, no arbitrary code execution) 2026-06-13 12:18:45 +02:00
Matthew Meszaros dfdb304033 feat: add the HTTP request / webhook node to the automation builder — method/url/headers/body/output-key editor, registered in the action picker with a globe glyph, surfacing how to read the response in later steps and branch on {{.response.ok}} 2026-06-13 12:07:04 +02:00
Matthew Meszaros 71abb12a38 feat: stop campaigns silently stalling on a transient scheduler error by retrying instead of completing the task, end past-end-date campaigns cleanly, record scheduler failures to the campaign log, add a campaign-chain reconciler, and surface failures live in the dashboard activity panel 2026-06-13 06:27:01 +02:00
Matthew Meszaros 969d53af6d feat: animate the top-left Add-step dropdown the same as the drag-create menu (AnimatePresence scale + fade growing from the top-left) instead of appearing instantly 2026-06-12 17:47:05 +02:00
Matthew Meszaros e321d582dc feat: smoother campaign steps canvas — position-preserving layout (no jump on connect/disconnect), an animated drag-create dropdown, Condition adds the if-branch directly instead of a router you drag from, an open then dot instead of an auto-STOP, then-targets placed to the right for clean branch lanes, and the label-email action 2026-06-12 16:44:29 +02:00
Matthew Meszaros c41205ec9a feat: rework the automation canvas — drag a node's dot to empty for an animated create dropdown (reliable react-flow pane detection), unified dagre spacing for smoother branch lines, and the label-email built-in action gated to reply triggers 2026-06-12 16:44:29 +02:00
Matthew Meszaros 5c7045d742 fix: open the drag-create dropdown reliably by detecting drops on the react-flow pane (via onConnectStart ref + pane-class check) instead of connectionState.toNode, and route IF-block drags through the menu too so you can chain another condition 2026-06-12 12:55:54 +02:00
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 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 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 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 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 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 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
Matthew Meszaros 6b1322ff17 feat: polish CRM deals table filters 2026-06-07 11:50:05 +02:00
Matthew Meszaros 650b7d6400 feat: add CRM deal sequence editor actions 2026-06-07 11:50:00 +02:00