Commit Graph

  • b83aa51921 feat: make CUSTOM_EVENT fire-event signals an explicit allow on the org channel and return structured {code, reason} errors on a failed channel join Matthew Meszaros 2026-06-14 11:02:12 +02:00
  • 799e5f10ef feat: surface WebSocket connection-rejection reasons to the client as a structured {code, reason, retry_after_ms} payload (Discord-style 4003/4004/4007/4009/4010) instead of a bare 403, and fix the rate-limit 3-tuple match Matthew Meszaros 2026-06-14 11:02:12 +02:00
  • 34e579fc0f feat: authenticate the realtime WebSocket with OAuth access tokens (wmat_ with the realtime scope), validated against oauth_access_grants alongside wmbly_ API keys and JWTs, and map not-a-member/forbidden rejections to close code 4010 Matthew Meszaros 2026-06-14 11:02:12 +02:00
  • fcafac4195 refactor: remove the campaign 'notify (webhook)' step type now that the HTTP request step covers outbound calls and there is no webhook setup surface Matthew Meszaros 2026-06-14 10:48:06 +02:00
  • 5cee0375f9 fix: let portaled pickers/menus nest inside capture-phase and popover containers via a shared data-floating marker, and migrate the last native date/time inputs (contact activity range, unibox snooze + send-later) to the themed pickers Matthew Meszaros 2026-06-14 10:48:06 +02:00
  • ab24d8bbc8 feat: add a 'Fire event' action and campaign step that publish custom events to the realtime gateway (no public URL), an HTTP-request campaign step, a configurable automation dry-run test with per-step toggles, and fix the false 'updated by a teammate' toast on your own save Matthew Meszaros 2026-06-14 09:52:49 +02:00
  • b94a053ac9 feat: replace native date/time inputs with the themed pickers across the dashboard (audit log, admin audit, CRM tasks/deals, contacts and unibox filters, new meeting, campaign schedule) Matthew Meszaros 2026-06-14 09:52:49 +02:00
  • 736bb3d0c0 feat: add themed DatePicker, TimePicker, and DateTimePicker primitives so the dashboard never falls back to native browser date/time controls Matthew Meszaros 2026-06-14 09:52:49 +02:00
  • e24c75a7db feat: render Pipedrive's real monogram in white on a Green Haze tile in integrations, via a full-bleed brand-logo option Matthew Meszaros 2026-06-14 09:52:49 +02:00
  • 9cf56ee0af feat: match the analytics tab's range/metric controls to the deliverability tab (slate-100 track with a white active pill) instead of the dark slate-900 blocks Matthew Meszaros 2026-06-14 09:52:49 +02:00
  • fc5e014766 fix: remove dead admin Roles/Users/Plans tabs, point the deliverability 'all mailboxes' link at /app/emails, and add the missing document titles so those dashboard tabs no longer read 'Page not found' Matthew Meszaros 2026-06-14 09:52:49 +02:00
  • f598237348 feat: redesign the Settings tab into grouped sections with a framer-motion sliding active indicator and animated content transitions Matthew Meszaros 2026-06-14 09:52:49 +02:00
  • e3c49fe571 feat: move the OAuth apps developer portal into Settings with a multi-step registration onboarding wizard (stepper, animated modal, logo upload) and an animated apps/authorized tab switch Matthew Meszaros 2026-06-14 09:52:49 +02:00
  • fcdb31cda7 feat: OAuth apps always issue a client secret (drop the public/PKCE-only client type, secret required for the token exchange), add an app-logo upload endpoint, and align the docs to OAuth2 with optional PKCE Matthew Meszaros 2026-06-14 09:52:49 +02:00
  • 0fe1401f8b feat: document the OAuth 2.1 authorization server (new api/oauth.mdx flow guide, authentication + permissions + endpoints scope-map updates, meta registration) Matthew Meszaros 2026-06-13 14:10:11 +02:00
  • b06a11315f feat: add the OAuth 2.1 dashboard UI: an OAuth apps page (register apps with a scope picker, one-time client secret, rotate, delete, authorized-apps tab with revoke) and a standalone consent screen at /oauth/authorize, plus the API client, hooks, and sidebar entry Matthew Meszaros 2026-06-13 14:07:21 +02:00
  • 8c175d4221 feat: add an OAuth 2.1 authorization server (migration 000047 apps/codes/grants, app registration CRUD, authorization-code-with-PKCE authorize+token+refresh-rotation+revoke endpoints, RFC 8414 discovery, bearer-token validation wired into the auth middleware reusing the API-permission gates, scopes mapped to API permission bits) Matthew Meszaros 2026-06-13 13:56:39 +02:00
  • 20935ef061 feat: add a nil-safe per-org daily outbound-action quota (Redis daily counter, anti-abuse ceiling on the HTTP-request automation node, wired in both backend and consumer, fail-open) to bound webhook relay abuse Matthew Meszaros 2026-06-13 13:41:20 +02:00
  • 1fa9c65ada fix: harden every user-supplied-URL outbound path against SSRF with a shared dial-time guard (resolves the host, blocks private/loopback/link-local/metadata IPs, pins the validated IP to defeat DNS rebinding, re-validates redirects) and log automation HTTP requests + blocked attempts with org attribution Matthew Meszaros 2026-06-13 13:34:19 +02:00
  • c5226147ac fix: use Pipedrive's Green Haze (#08A742) for the provider glyph background instead of the darker favicon green Matthew Meszaros 2026-06-13 13:28:35 +02:00
  • a7fc7263a8 fix: make HTTP request headers/body placeholders visible with normal input colors and fix the Set variables Add variable button (stop filtering the blank row on edit) Matthew Meszaros 2026-06-13 13:27:29 +02:00
  • 501b5009b4 feat: add an on-error branch to automation action nodes (try/catch routing, rose on-error handle, executor follows the error edge and treats the failure as handled instead of failing the run) Matthew Meszaros 2026-06-13 13:15:41 +02:00
  • 9aa3300f46 feat: capture per-action output in automation run history (HTTP status/ok, set-variables values, rendered channel/url/message) and render it under each action in the builder History panel Matthew Meszaros 2026-06-13 13:11:58 +02:00
  • 6f5f05c5a2 feat: document the inbound webhook automation trigger (unique per-automation URL, JSON body as event payload, token security and limits) in the automations guide Matthew Meszaros 2026-06-13 13:08:37 +02:00
  • 977daf8a01 feat: surface the inbound webhook trigger in the automations builder with a copyable per-automation webhook URL and caller-defined payload conditions Matthew Meszaros 2026-06-13 13:08:04 +02:00
  • 331745ecc5 feat: add a generic per-automation inbound webhook trigger (inbound.webhook event, token-gated POST /api/v1/integrations/inbound/automation/:token, migration 000046 inbound_token, background graph run with the JSON body as event payload) Matthew Meszaros 2026-06-13 13:04:10 +02:00
  • 9904919ae3 feat: replace the Pipedrive provider glyph with its real mark, a Green Haze circle and white blocky lowercase p, instead of a generic letter tile Matthew Meszaros 2026-06-13 12:55:57 +02:00
  • f1cf470121 feat: render Discord notifications as sky-themed rich embeds and Slack notifications as sky-accented attachment cards with contact and subject fields instead of plain text lines Matthew Meszaros 2026-06-13 12:41:26 +02:00
  • 2d41cb541e feat: use Slack's real four-color hash and Close's colored orb mark, fix Calendly, and give Pipedrive a branded Green Haze tile in the integrations provider glyph Matthew Meszaros 2026-06-13 12:37:49 +02:00
  • 96f19919ac feat: document the HTTP request / webhook and Set variables automation actions in the automations guide Matthew Meszaros 2026-06-13 12:20:20 +02:00
  • 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) Matthew Meszaros 2026-06-13 12:18:45 +02:00
  • 5118033389 feat: render real brand logos in the integrations tab — ProviderGlyph now draws the official simple-icons (CC0) SVG marks for Slack, Discord, HubSpot, Salesforce, Zapier, n8n, Calendly, Make, and Cal.com in each brand's color on a neutral tile, falling back to a tinted initial for providers without a bundled mark Matthew Meszaros 2026-06-13 12:15:06 +02:00
  • 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}} Matthew Meszaros 2026-06-13 12:07:04 +02:00
  • f4a2b87c50 feat: add a configurable warmbly.http_request automation action (the generic send-a-webhook/call-any-API node) — templated method/url/headers/query/body, SSRF-guarded + bounded retry, captures the response back into the event data under an output key so downstream nodes use {{.response.body...}} and conditions branch on {{.response.ok}} Matthew Meszaros 2026-06-13 12:02:11 +02:00
  • f2fa0d756c feat: guarantee in-order gateway delivery via a per-org sequencer pool — serialize each org's events (partitioned by org id) so seq order always equals broadcast order even under concurrent ingest, closing the resume race where a higher seq could arrive first and a disconnect would skip the lower one Matthew Meszaros 2026-06-13 11:31:07 +02:00
  • 4e2fdec482 feat: document the resumable gateway (resume/replay, seq, resume_failed) in realtime.mdx and publish a machine-readable AsyncAPI 3.1 spec at docs/asyncapi.json describing the org channel, join/resume, HELLO, events, intents, and presence Matthew Meszaros 2026-06-13 11:29:12 +02:00
  • 4552ab4e31 feat: make the org realtime channel a resumable gateway — assign a monotonic per-org sequence + buffer each event in a capped Redis stream (Realtime.EventLog) before broadcast, advertise the current seq in the HELLO and stamp it on every event, and replay the missed gap (re-filtered) on reconnect via resume.last_seq or signal a full resync when the buffer no longer covers the client Matthew Meszaros 2026-06-13 11:23:07 +02:00
  • 3c7c0b6411 fix: finish the opaque-cursor doc sweep — change the offset query params to cursor on the CRM search operations in the OpenAPI spec, and drop the dead SearchContacts.Offset field and its docs (clamped but never used in SQL) Matthew Meszaros 2026-06-13 11:00:59 +02:00
  • aed4a06190 feat: unify pagination by making the offset-based CRM deals/tasks search and meetings endpoints expose the same opaque next_cursor and {total, next_cursor, has_more} envelope as every keyset list (offset hidden inside the token), updating web clients, the OpenAPI spec, and the reference docs Matthew Meszaros 2026-06-13 10:47:17 +02:00
  • 3b987f38d0 feat: replace the fabricated SDK code samples and First-class SDKs claims on the developers page with honest plain-HTTP examples and an accurate OpenAPI-and-generate-your-own-client story Matthew Meszaros 2026-06-13 07:29:17 +02:00
  • 013a73b9be feat: publish a machine-readable OpenAPI 3.1 spec at docs/openapi.json covering 204 operations across the public API, with an OpenAPI docs page describing how to generate clients from it Matthew Meszaros 2026-06-13 07:29:17 +02:00
  • 57e8705a82 feat: make public API list cursors opaque base64 tokens (internal/utils/paging) instead of raw record UUIDs, decoding on input with a 400 on a bad cursor; admin endpoints keep transparent UUID cursors Matthew Meszaros 2026-06-13 07:18:23 +02:00
  • 587eae774e feat: serve the entire customer API (auth + resources) only under /v1 with no unversioned alias, and repoint the web and admin clients to the versioned base accordingly Matthew Meszaros 2026-06-13 07:18:23 +02:00
  • 7901e9a92c feat: wire the Pub/Sub realtime provisioning, the instant-branch automation runner, and the campaign-chain reconciler into the backend and consumer binaries Matthew Meszaros 2026-06-13 06:27:06 +02:00
  • 49b01c6b67 feat: version the public API under /v1 by mounting the customer surface under both /v1 and the bare paths, adding an API-Version response header and Deprecation/Sunset headers nudging API-key callers off the unversioned aliases Matthew Meszaros 2026-06-13 06:27:01 +02:00
  • 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 Matthew Meszaros 2026-06-13 06:27:01 +02:00
  • 919af47d29 feat: select the realtime transport by PUBSUB_ENABLED in backend/consumer and auto-provision the Pub/Sub topics and per-topic subscriptions on boot so prod never publishes to a subscription the Elixir fanout never created Matthew Meszaros 2026-06-13 06:26:48 +02:00
  • c5911fe37a feat: fire run_automation on campaign instant branches (reply/open/click) through a wired AutomationRunner instead of stamping the action node sent without ever running the flow Matthew Meszaros 2026-06-13 06:26:48 +02:00
  • 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 Matthew Meszaros 2026-06-12 17:47:05 +02:00
  • cc52878966 fix: apply cargo fmt to the tracking service (line wrapping in abuse.rs, config.rs, links.rs) so the Rust CI format check passes Matthew Meszaros 2026-06-12 17:45:32 +02:00
  • c5ced50868 fix: apply mix format to the realtime service (supervisor child-list indentation in application.ex + org_channel.ex) so the Elixir CI format check passes Matthew Meszaros 2026-06-12 17:45:32 +02:00
  • 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 Matthew Meszaros 2026-06-12 16:44:29 +02:00
  • 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 Matthew Meszaros 2026-06-12 16:44:29 +02:00
  • 13e7663b03 feat: add the label_email action to the web action models — the campaign label_ids field plus the automation NATIVE_ACTIONS/labels/needs entries and a triggerCarriesThread reply-trigger gate Matthew Meszaros 2026-06-12 16:44:29 +02:00
  • 92a74d9364 feat: document the label-email action in the steps and automations guides — reply-only, applies the shared category labels to the conversation the contact replied on, gated to the reply trigger Matthew Meszaros 2026-06-12 16:44:29 +02:00
  • ba89a932cd feat: run the label_email action on reply — campaign instant and scheduled paths via advanced LabelThread/LabelLatestThreadForContact, automations via execNativeAction reading thread_id and _user_id from the reply payload — and move the native-actions adapter to a shared package wired into the consumer too so reply/bounce/warmup automation actions stop silently failing Matthew Meszaros 2026-06-12 16:44:16 +02:00
  • 4762256c49 feat: add the warmbly.label_email native action type and the label_ids action config field across the campaign ActionConfig and the IntegrationAction enum + IsNativeAction Matthew Meszaros 2026-06-12 16:44:07 +02:00
  • 496e474756 feat: add additive unibox thread-label repo methods — AddThreadLabels (insert-only, category-ownership guarded) and LatestThreadIDForContact (exact from_addr address match, never an ILIKE substring) — to back a reply-only label-email action Matthew Meszaros 2026-06-12 16:44:07 +02:00
  • 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 Matthew Meszaros 2026-06-12 12:55:54 +02:00
  • eb74b7dafb feat: fix the Steps tab still pointing at /sequences and replace remaining user-facing Sequences with Steps (route page + folder renamed to steps, document title regex, permission labels, not-found hint, campaign count) Matthew Meszaros 2026-06-12 10:03:02 +02:00
  • 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 Matthew Meszaros 2026-06-12 09:51:11 +02:00
  • 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 Matthew Meszaros 2026-06-12 09:38:11 +02:00
  • 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 Matthew Meszaros 2026-06-12 09:09:34 +02:00
  • 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 Matthew Meszaros 2026-06-12 08:39:12 +02:00
  • 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 Matthew Meszaros 2026-06-12 08:32:56 +02:00
  • 85d5d04afe feat: clarify in the sequences guide that the A/B original is a control arm in the weighted split with a live per-arm share shown in the editor Matthew Meszaros 2026-06-12 08:04:44 +02:00
  • 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 Matthew Meszaros 2026-06-12 08:04:03 +02:00
  • 7b34b96b37 feat: keep the per-user realtime connection cap at 10 but reap dead connections via a periodic liveness sweep and process pids, so the count reflects real presence and stale sockets never hold a slot Matthew Meszaros 2026-06-12 07:46:13 +02:00
  • 5d2882ccf8 feat: strip leaked agent reasoning and select the corrected final draft for campaigns and deliverability reference pages, removing duplicate frontmatter, an em dash, and a Cyrillic placeholder char Matthew Meszaros 2026-06-12 07:39:57 +02:00
  • bfd67bfa2a feat: correct API key prefix examples to the real wmbly_ format and link the endpoint reference from the API docs index Matthew Meszaros 2026-06-12 07:29:45 +02:00
  • 54a1aee753 feat: add full per-resource API endpoint reference under docs/api/reference (mailboxes, campaigns, contacts, unibox, crm, analytics, api-keys, webhooks, integrations, deliverability/ops, account/org) with request and response structures Matthew Meszaros 2026-06-12 07:28:19 +02:00
  • 3cbfc06bc4 feat: add WebSocket intents (selective event-family subscription) and a HELLO-style org join reply advertising heartbeat cadence, and correct realtime docs on connection rejections and at-most-once delivery Matthew Meszaros 2026-06-12 07:17:09 +02:00
  • 50a134c827 feat: document org team-presence privacy controls in the collaboration guide and realtime API reference Matthew Meszaros 2026-06-12 05:59:02 +02:00
  • 6e9f2b4807 feat: add a Team presence section to workspace settings with admin-gated Show who's online and Show activity toggles, and make ToggleRow support a controlled persisted mode Matthew Meszaros 2026-06-12 05:59:01 +02:00
  • 4f1ac8c273 feat: enforce org team-presence privacy in the realtime OrgChannel — gate Presence.track on show_online, strip viewing/editing detail when show_activity is off, and re-track/untrack live on PRESENCE_POLICY_UPDATED Matthew Meszaros 2026-06-12 05:59:01 +02:00
  • 0fd3d03f55 feat: add org-wide team presence privacy columns (presence_show_online, presence_show_activity) with update plumbing and a PRESENCE_POLICY_UPDATED realtime event so a settings change re-gates connected sockets live Matthew Meszaros 2026-06-12 05:59:01 +02:00
  • 8547fe97eb feat: scope unibox MarkSeenBulk by organization so a non-owner member opening a thread clears the shared org-wide unread state instead of updating zero rows Matthew Meszaros 2026-06-12 05:14:50 +02:00
  • 4db027a342 feat: scope unibox GetByThread by organization instead of user_id so non-owner members see the full conversation they already see in the org-scoped inbox list, not an empty thread Matthew Meszaros 2026-06-12 05:10:00 +02:00
  • 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) Matthew Meszaros 2026-06-12 04:58:37 +02:00
  • ba3ab98e1e feat: bridge realtime events over Redis pub/sub when Google Pub/Sub is unconfigured (RedisBus publisher in backend/consumer plus Realtime.Redis.EventSubscriber and a shared EventBroadcaster) so dashboard live updates and presence-driven collaboration actually fire in local dev Matthew Meszaros 2026-06-12 04:49:58 +02:00
  • 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 Matthew Meszaros 2026-06-12 04:34:13 +02:00
  • f6540d9f2f feat: rejoin org/user channels and force isConnected toggle on zombie-socket wake so a backgrounded dashboard tab resumes realtime events and presence without a reload Matthew Meszaros 2026-06-12 04:34:13 +02:00
  • 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 Matthew Meszaros 2026-06-11 19:55:01 +02:00
  • 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' Matthew Meszaros 2026-06-11 19:54:44 +02:00
  • 801c6b8619 fix: faster, research-backed websocket reconnect — replace the slow 1s/2s/4s exponential backoff with a fast-start schedule (first retry ~120ms) plus jitter, lower the heartbeat to 25s/8s for quicker dead-connection detection, retry token-fetch failures on the same fast backoff, and clear a Safari-suspended CONNECTING zombie socket on tab refocus so it reconnects instantly instead of hanging Matthew Meszaros 2026-06-11 19:52:55 +02:00
  • 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 Matthew Meszaros 2026-06-11 19:51:05 +02:00
  • 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 Matthew Meszaros 2026-06-11 19:17:20 +02:00
  • 605583c301 feat: proactively lock the automation builder Save button for members without the integration permission, with a lock icon and permission popup Matthew Meszaros 2026-06-11 19:00:45 +02:00
  • 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) Matthew Meszaros 2026-06-11 19:00:09 +02:00
  • 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) Matthew Meszaros 2026-06-11 18:51:59 +02:00
  • 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 Matthew Meszaros 2026-06-11 18:49:15 +02:00
  • 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 Matthew Meszaros 2026-06-11 18:30:53 +02:00
  • 44d7c2a0c1 fix: make the realtime websocket reconnect reliably — reconnect on every unintended close (not just unclean ones), detect silently-dropped connections via a heartbeat watchdog that force-closes to trigger reconnect, and reconnect immediately when the network returns or the tab is refocused Matthew Meszaros 2026-06-11 18:18:24 +02:00
  • 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 Matthew Meszaros 2026-06-11 18:15:55 +02:00
  • 6a3b8ac0eb fix: scope the unibox unread-count endpoint by organization_id so the sidebar Inbox badge counts the workspace's unread mail instead of always showing 0 for non-owner members Matthew Meszaros 2026-06-11 18:05:18 +02:00
  • 594c696bf6 fix: scope the unibox inbox list and overview by organization_id (via the workspace's email accounts) instead of the logged-in user_id, so every member sees the org's incoming mail; per-user thread labels and snoozes stay personal Matthew Meszaros 2026-06-11 17:57:52 +02:00
  • 21032a8fce fix: scope the contacts list by organization_id instead of user_id so all members see the workspace's contacts (and per-contact campaign badges); categories badge still user-scoped pending an organization_id column on categories Matthew Meszaros 2026-06-11 17:52:36 +02:00
  • 88e241d536 fix: scope the analytics dashboard (overall stats, recent activity, top campaigns, daily trend, account health) by organization_id instead of user_id, so every workspace member sees the org's analytics rather than an empty dashboard Matthew Meszaros 2026-06-11 17:49:39 +02:00
  • a21dc57e07 fix: scope campaign list/detail/count queries by organization_id instead of user_id, so all workspace members see the org's campaigns rather than only the creator Matthew Meszaros 2026-06-11 17:47:04 +02:00
  • 6ae5e52c4e fix: scope email-account list/detail queries by organization_id instead of the logged-in user_id, so every member of a workspace sees the org's mailboxes (not just the owner who connected them) Matthew Meszaros 2026-06-11 17:43:56 +02:00