Commit Graph

  • 1d4357e4af feat: add a site-wide coming-soon launch banner (LaunchBanner) announcing Warmbly Cloud and the shared warmup pool with a waitlist CTA, rendered above the header in Layout Matthew Meszaros 2026-07-06 06:27:43 +02:00
  • 99dfd261d4 Merge pull request #62 from warmbly/feature/gmail-imap-sync-fixes Matthew Meszaros 2026-07-04 13:19:15 +02:00
  • 27487a3279 Merge pull request #59 from warmbly/feature/human-send-behavior Matthew Meszaros 2026-07-04 13:12:29 +02:00
  • f38a939f2e Merge pull request #60 from warmbly/feature/inbound-bounce-and-behavior Matthew Meszaros 2026-07-04 13:12:15 +02:00
  • 87a877bd95 Merge pull request #61 from warmbly/fix/realtime-multiarch-publish Matthew Meszaros 2026-07-04 12:09:32 +02:00
  • 4c714c471f Merge pull request #58 from warmbly/feature/gmail-imap-sync-fixes Matthew Meszaros 2026-07-04 12:09:30 +02:00
  • b11cf3fa27 Merge pull request #57 from warmbly/feature/mailbox-graph-api Matthew Meszaros 2026-07-04 12:02:05 +02:00
  • a2e35a1c02 fix: build the realtime image on native amd64 and arm64 runners and merge the digests into one manifest so the elixir release stops hanging for hours under qemu emulation Matthew Meszaros 2026-07-04 11:59:35 +02:00
  • ad1d40fd2b test: cover the gmail/graph message mapping (read-state inversion, spam/category labels, unpadded base64url bodies, warmup and classification header surfacing), the imap header-flag parser, the graph MIME builder, and the human-behavior timing (sub-minute randomisation, daily volume factor, night-deferred and heavy-tailed engagement) Matthew Meszaros 2026-07-04 11:45:01 +02:00
  • f9142345ca feat: occasionally skip all positive warmup engagement on a message so a mailbox files but never opens some mail, avoiding a perfect every-message-engagement pattern while keeping spam-rescue and foldering Matthew Meszaros 2026-07-04 11:38:23 +02:00
  • 4ea9611510 feat: vary each mailbox's daily warmup volume by a stable per-day factor with occasional lighter days so a mailbox never sends an identical count every day Matthew Meszaros 2026-07-04 11:36:47 +02:00
  • 8b0f08c08d feat: throttle the worker reconciler to republish each mailbox at most every five minutes so the safety-net loop stops re-shipping every account's credentials over Kafka each tick, while onboarding and reassignment still load immediately Matthew Meszaros 2026-07-04 11:36:47 +02:00
  • 041ae5afd5 feat: resolve inbound bounce events back to the original campaign send by message id and record them idempotently through the deliverability pipeline (suppression, campaign progress, breaker), and document permanent-only bounce detection Matthew Meszaros 2026-07-04 11:36:47 +02:00
  • ab3c925eca feat: detect permanent NDRs worker-side from the synced bounce body across gmail/graph/imap and emit an INBOUND_BOUNCE event, giving api-sent mail its only bounce signal without adding SQL or S3 to the worker Matthew Meszaros 2026-07-04 11:36:47 +02:00
  • 7abde17c26 feat: add a conservative DSN bounce parser that extracts permanence, failed recipient, and original message id from delivery-status reports, treating only 5.x.x/failed as permanent so transient 4.x.x failures never over-suppress Matthew Meszaros 2026-07-04 11:36:47 +02:00
  • 1e8236d685 feat: only reply to warmup messages received between 45 minutes and 7 days ago so replies follow a plausible read, and document the human-behavior timing model in the warmup guide Matthew Meszaros 2026-07-04 11:27:36 +02:00
  • 3738f17643 feat: make warmup read engagement heavy-tailed up to an hour instead of uniform within four minutes and defer read/star/important actions into the recipient's waking hours so no pool mailbox reads mail at 3am Matthew Meszaros 2026-07-04 11:27:36 +02:00
  • 2a76428ecf feat: randomise the sub-minute second of every scheduled send, drop the campaign 5-minute grid rounding, and vary send spacing multiplicatively into bursts and lulls so fleet timing has no metronome or round-mark fingerprint Matthew Meszaros 2026-07-04 11:27:36 +02:00
  • 0e60971e57 feat: flag Graph junk-folder arrivals as Junk during delta sync so warmup spam-placement detection and placement tests see where the message landed Matthew Meszaros 2026-07-04 09:30:27 +02:00
  • b8e4002adb feat: fetch the warmup verify token and machine-reply headers via BODY.PEEK on IMAP sync and surface them as flag pseudo-headers, and join replies to the parent's thread instead of forking a new thread at every reply depth Matthew Meszaros 2026-07-04 09:30:27 +02:00
  • 3e4c3e9655 feat: write the caller's Message-ID header on SMTP sends so the recorded id matches the wire message for reply and bounce correlation, classify refused recipients as recipient-rejected instead of server-unreachable, and use the resolved host for the SMTP client handshake Matthew Meszaros 2026-07-04 09:30:27 +02:00
  • 1d4212c725 feat: key the Gmail messageId map by the Gmail message id so remove and label lookups match the add entry, and translate Gmail label transitions into internal flag add/remove events with the UNREAD inversion Matthew Meszaros 2026-07-04 09:30:27 +02:00
  • 5a7d791202 feat: fix the inverted UNREAD-to-Seen mapping in the Gmail message mapper, surface SPAM and CATEGORY_ labels for spam-placement and promotions detection, populate the snippet, and extract bodies from single-part payloads with unpadded base64url decoding Matthew Meszaros 2026-07-04 09:30:27 +02:00
  • 700a35da8d feat: hydrate full Gmail messages during history sync instead of mapping the id-only history stubs, skip 404s for messages deleted in-flight, and map non-API transport errors to a retryable mail error instead of silently returning nil Matthew Meszaros 2026-07-04 09:30:27 +02:00
  • 4fe0689d50 feat: document the Graph-backed Outlook connection and the recipient-side warmup folder categorization in the mailboxes and warmup guides Matthew Meszaros 2026-07-04 08:07:50 +02:00
  • 599f144364 feat: surface warmup and machine-reply/DSN headers from Gmail sync into flags for the reply and bounce classifier and match internet header names case-insensitively Matthew Meszaros 2026-07-04 08:07:50 +02:00
  • 4c0da59763 feat: categorize Graph warmup mail by surfacing the verify token into flags and filing it into the Warmbly folder, re-resolving the live message id from the immutable RFC Message-ID so post-move engagement actions never act on a stale id Matthew Meszaros 2026-07-04 08:07:50 +02:00
  • cb13c65d5d feat: load active mailboxes onto their assigned workers via a backend reconciler and immediately on onboarding, decrypting each account's credentials into the AddWorkerEmail payload, fixing gmail/outlook/smtp accounts that were assigned but never loaded Matthew Meszaros 2026-07-04 08:07:49 +02:00
  • 52c5f224fa feat: rebuild the provider oauth2 config locally on the worker so delegated mailbox tokens refresh, and ship BOX_ google/outlook client credentials to provisioned workers through the orchestrator env Matthew Meszaros 2026-07-04 08:07:49 +02:00
  • eb0a5654fd feat: persist the opaque per-folder Graph delta cursor in a new email_delta_links table via a repository and a GRAPH_DELTA_UPDATE consumer handler wired into the consumer service Matthew Meszaros 2026-07-04 08:07:49 +02:00
  • 049d751a11 feat: route the outlook provider through Microsoft Graph in the wmail worker with nil-guarded send/sync/new-email dispatch and a delta-cursor event, request delegated Graph OAuth scopes instead of the legacy IMAP/SMTP scopes, and always sync Outlook mailboxes Matthew Meszaros 2026-07-04 08:07:49 +02:00
  • 955ad1fc0c feat: add the internal/client/msgraph Graph mail client (RAW MIME sendMail, delta sync of inbox/junk, warmup move/mark/flag actions, RFC-message-id resolution, throttling-aware error mapping) plus the shared inbound classification-header list Matthew Meszaros 2026-07-04 08:07:49 +02:00
  • 36bfaf2e71 Merge pull request #55 from warmbly/automation-realtime-editing Matthew Meszaros 2026-07-02 20:43:36 +02:00
  • 76d7e09c29 feat: document the cursor-chat permission gate and the live:select keep-alive and expiry semantics in the realtime API reference and the collaboration guide Matthew Meszaros 2026-07-02 20:33:44 +02:00
  • c311529576 feat: guard cursor chat against IME composition keys, keep a sent message lingering through an incidental blur, broadcast chat typed while the pointer is off the tracked surface, and close the input on page navigation Matthew Meszaros 2026-07-02 20:33:44 +02:00
  • 226e83683c feat: remount the automation and sequence canvases on param-only navigation and restrict jump-to-teammate to distinct in-app paths so a jump can never save one record's graph into another Matthew Meszaros 2026-07-02 20:33:44 +02:00
  • f804538ff5 feat: make canvas selections self-healing with a receiver-side TTL, a heartbeat that retries unsent deselects, and a clear frame for the old surface on in-place resource changes Matthew Meszaros 2026-07-02 20:33:44 +02:00
  • e190571696 feat: harden the live channel with an is_map payload guard, byte-bounded chat/id/resource strings, a per-surface permission gate that strips cursor-chat text, and a websocket max_frame_size cap Matthew Meszaros 2026-07-02 20:33:44 +02:00
  • 6d1944a19c feat: mention live selection outlines and the / cursor chat in the automation builder and sequence editor guides so the builder docs match the shared-canvas behavior Matthew Meszaros 2026-07-02 20:00:50 +02:00
  • 88cabf5cac feat: cap the live:select ids payload before traversal so an oversized selection list is never fully walked by the realtime channel Matthew Meszaros 2026-07-02 14:31:36 +02:00
  • b00e307d6a feat: document cursor chat, the live:select selection event, and jump-to-teammate in the realtime API reference and the collaboration guide Matthew Meszaros 2026-07-02 07:40:07 +02:00
  • 954759a6ce feat: make each teammate in the header presence dropdown clickable to jump straight to the page they are on Matthew Meszaros 2026-07-02 07:40:07 +02:00
  • 9f2b5d5586 feat: show each teammate's selected cards on the automation and sequence canvases as a name-tagged outline in their cursor color, with a selection heartbeat for late joiners and an unmount clear, plus cursor chat on both canvases Matthew Meszaros 2026-07-02 07:40:06 +02:00
  • b1e68b3048 feat: add cursor chat to every collaborative surface, press / to type a message that floats next to your live cursor for teammates, riding the existing cursor frames with Enter-to-send and a linger-then-fade Matthew Meszaros 2026-07-02 07:40:06 +02:00
  • 02b25724f4 feat: extend the ephemeral live channel with a sanitized chat field on live:cursor frames and a new live:select kind that broadcasts a capped node-id list for canvas selections Matthew Meszaros 2026-07-02 07:40:06 +02:00
  • 1086d1889d feat: document supported mailbox providers (Gmail/Google Workspace, Microsoft 365/Outlook, any SMTP+IMAP), the integrations catalog, and real-time collaboration in the README Matthew Meszaros 2026-07-01 06:51:36 +02:00
  • ffe823cfa8 feat: persist and surface per-mailbox SPF/DKIM/DMARC authentication state via an hourly observe-only consumer sweep, threaded through the mailbox list/detail API and documented in the deliverability guide and mailboxes API reference Matthew Meszaros 2026-07-01 02:32:23 +00:00
  • a104b1e220 feat: add warmup/abuse/cold-send deliverability research report with prioritized Now/Next/Later roadmap in resources/warmup-abuse-cold-research.md Matthew Meszaros 2026-07-01 02:11:57 +00:00
  • c21f170429 fix: ignore live:patch frames in useLivePatch when the subscriber has no resource yet, instead of receiving every org patch Matthew Meszaros 2026-06-30 19:20:08 +02:00
  • d87ada8b92 feat: document end-to-end live CRM collaboration (deal moves, task changes, pipeline edits, in-progress drag highlight) in the collaboration guide Matthew Meszaros 2026-06-30 19:18:55 +02:00
  • b85d2c8249 feat: refresh the deal board instantly when a teammate edits the pipeline's stages and show a live colored ring on a deal card while a teammate drags it Matthew Meszaros 2026-06-30 19:18:55 +02:00
  • 7f5cc010bb feat: broadcast CRM pipeline and stage edits over live:patch and refresh the pipelines view instantly for teammates Matthew Meszaros 2026-06-30 19:18:55 +02:00
  • a93868fc77 feat: broadcast CRM task create/update/delete over live:patch and refresh the tasks view instantly for teammates ahead of the audit refetch Matthew Meszaros 2026-06-30 19:18:55 +02:00
  • c1ad213dda feat: make useLivePatch send-only when given no onPatch so mutation hooks can broadcast a live:patch without opening a channel subscription Matthew Meszaros 2026-06-30 19:18:55 +02:00
  • 39e3accc4e Merge pull request #54 from warmbly/make-integration Matthew Meszaros 2026-06-30 17:36:56 +02:00
  • 49ffcec432 feat: document the live:patch event, cursor avatars, and live CRM deal-board moves in the realtime reference and collaboration guide Matthew Meszaros 2026-06-30 10:34:14 +02:00
  • 2e110814fc feat: make CRM deal-board stage moves land instantly for teammates on the same pipeline via a live:patch broadcast backed by the audit refetch Matthew Meszaros 2026-06-30 10:34:14 +02:00
  • cca4ea5817 feat: add a reusable useLivePatch hook over the live:patch transport for optimistic collaborative state updates scoped by resource Matthew Meszaros 2026-06-30 10:34:14 +02:00
  • 3ffd4416a2 feat: add a generic live:patch channel kind that fans out a small sanitized scalar map for ephemeral collaborative-state hints Matthew Meszaros 2026-06-30 10:34:14 +02:00
  • 18fd48bfcb feat: render teammate avatars with initials fallback on live cursors so it is always clear who each pointer belongs to Matthew Meszaros 2026-06-30 10:34:14 +02:00
  • 7237a7500c feat: document dashboard-wide live cursors, collaborative builder canvases, and sticky card positions across the collaboration, automations, and sequences guides Matthew Meszaros 2026-06-30 10:06:58 +02:00
  • 8ff5d173ba feat: document the live-collaboration channel events and the automation/sequence layout endpoints in the realtime and endpoints API reference Matthew Meszaros 2026-06-30 10:06:58 +02:00
  • dfe8b89730 feat: claim integration-connection presence via a new Drawer headerExtra slot in the connection details drawer Matthew Meszaros 2026-06-30 10:06:49 +02:00
  • 5f090287c8 feat: claim mailbox presence and show teammate viewers in the mailbox details drawer header Matthew Meszaros 2026-06-30 10:06:49 +02:00
  • aef7fdf6d5 feat: claim template presence and suppress the page cursor layer while the email template editor is open Matthew Meszaros 2026-06-30 10:06:49 +02:00
  • e1f9460520 feat: claim task presence and suppress the page cursor layer while the CRM task dialog is open Matthew Meszaros 2026-06-30 10:06:49 +02:00
  • 04ee4cb331 feat: claim deal presence and suppress the page cursor layer while the CRM deal dialog is open Matthew Meszaros 2026-06-30 10:06:49 +02:00
  • 06c7a3502b feat: wire live cursors, live step drag, and persisted step positions seeded from x/y into the campaign sequence builder canvas Matthew Meszaros 2026-06-30 10:06:49 +02:00
  • 03453cc069 feat: wire live cursors, live card drag, and debounced drag-to-stick layout persistence into the automation builder canvas Matthew Meszaros 2026-06-30 10:06:49 +02:00
  • 4111a1960b feat: skip ephemeral LIVE_ frames in useRealtimeEvents so cursor and drag traffic never triggers react-query invalidation Matthew Meszaros 2026-06-30 10:06:31 +02:00
  • ba6847e985 feat: add the global per-route multiplayer cursor layer with a suppression context and mount it in AppShell around the page scroll container Matthew Meszaros 2026-06-30 10:06:31 +02:00
  • 49988fb8bd feat: add shared Cursor and CanvasCursors presence components that render teammate pointers in screen space and @xyflow flow space Matthew Meszaros 2026-06-30 10:06:31 +02:00
  • 4ca46317a5 feat: add the reusable useLiveCursors transport (throttle, heartbeat, TTL prune, gone-on-leave, gone-on-resource-change) and a useLiveCanvas wrapper that adds the live node-drag stream Matthew Meszaros 2026-06-30 10:06:31 +02:00
  • 1f2b228ec6 feat: wire the automation and sequence layout routes (PATCH /automations/:id/layout and /campaigns/:id/step-layout) behind the existing campaign and integration write permissions Matthew Meszaros 2026-06-30 10:06:20 +02:00
  • d4ead05456 feat: persist campaign sequence canvas coordinates with x/y columns (migration 000053) plus a bulk sequence-layout service/repo path that scopes by campaign owner and never bumps updated_at Matthew Meszaros 2026-06-30 10:06:20 +02:00
  • 73838cecf5 feat: add an unaudited automation node-layout endpoint handler/service/repo backed by an atomic jsonb x/y merge that leaves edges, config, and updated_at untouched Matthew Meszaros 2026-06-30 10:06:19 +02:00
  • 248c886290 feat: add an ephemeral live:cursor/live:node channel path to the realtime org channel that bypasses the Redis ws limiters and the sequenced resume buffer via an in-process token bucket and broadcast_from fan-out Matthew Meszaros 2026-06-30 10:06:19 +02:00
  • 55b2c7f264 feat: revise the Make app README with public-repo credential guidance (client secret lives in Make Common Data, never committed) and a CI validation section Matthew Meszaros 2026-06-30 06:17:44 +02:00
  • c2a238b56d feat: gate the Make app in CI with a Make App CI job that runs the validator on changes under integrations/make, wired into the changes filter and ci-status check Matthew Meszaros 2026-06-30 06:17:44 +02:00
  • 6f511b78ce feat: add a structural validator (scripts/validate.mjs) and package.json for the Make app that checks the manifest, JSON validity, codeFiles references and keys, and component enums Matthew Meszaros 2026-06-30 06:17:44 +02:00
  • cbd465eba0 feat: add the customer-facing Make integration guide (triggers, actions, searches) and register it in the guides navigation Matthew Meszaros 2026-06-29 09:44:19 +02:00
  • cd0810fb53 feat: add Make analytics search modules: Get Campaign Analytics and Get Dashboard Analytics Matthew Meszaros 2026-06-29 09:44:06 +02:00
  • 25d4a45c19 feat: add Make group modules: Create Contact Category, Create Mailbox Tag, and Create Campaign Folder Matthew Meszaros 2026-06-29 09:44:06 +02:00
  • f1a3d6c5aa feat: add Make reply-template modules: create/update/delete template, Render Reply Template, and Find Reply Template search Matthew Meszaros 2026-06-29 09:44:06 +02:00
  • 787fde45b8 feat: add Make meeting modules: New Meeting Booked trigger, Log Meeting, Delete Meeting, and Find Meeting search Matthew Meszaros 2026-06-29 09:44:06 +02:00
  • f0e8658b3d feat: add Make CRM task modules: New CRM Task trigger, create/update/delete task, and Find CRM Task search Matthew Meszaros 2026-06-29 09:44:06 +02:00
  • da5adddef3 feat: add Make CRM deal modules: New Deal and Deal Won triggers, create/update/delete deal, and Find Deal search Matthew Meszaros 2026-06-29 09:44:06 +02:00
  • de46897b3f feat: add Make mailbox and warmup modules: New Mailbox Connected trigger, update/delete mailbox, warmup start/pause/resume/stop, and Find Mailbox search Matthew Meszaros 2026-06-29 09:43:54 +02:00
  • 7c7ddd9746 feat: add Make campaign modules: New Campaign and Campaign Completed triggers, create/update/delete, start/stop lifecycle, and Find Campaign search Matthew Meszaros 2026-06-29 09:43:54 +02:00
  • 8400fb1942 feat: add Make email and inbox modules: New Email Received trigger, Send Email, Reply in Inbox, Mark Inbox Emails Seen, and Verify Email Address Matthew Meszaros 2026-06-29 09:43:54 +02:00
  • 8bb1bbd8df feat: add Make contact modules: New Contact and New or Updated Contact triggers, create/update/delete, add/remove campaign, note create/update/delete, and Find Contact search Matthew Meszaros 2026-06-29 09:43:54 +02:00
  • db2efee8f2 feat: add the filterByStatus IML function (with test) that backs the Campaign Completed trigger since /campaigns has no status query param Matthew Meszaros 2026-06-29 09:43:17 +02:00
  • 8cdb4401fb feat: add the six Make dropdown RPCs (campaign, mailbox, pipeline, pipeline-stage, template, contact lists) powering dynamic select fields Matthew Meszaros 2026-06-29 09:43:17 +02:00
  • 6778cf169c feat: add the Make Warmbly OAuth2 connection (authorize/token/refresh with rotating tokens and expiry, GET /v1/me test and org+email label) with default scope and scope catalog Matthew Meszaros 2026-06-29 09:43:17 +02:00
  • d7b5d23d48 feat: add the Make app base.iml.json (api base URL, bearer auth header, code/request_id error handler) plus general common and module-groups files Matthew Meszaros 2026-06-29 09:43:17 +02:00
  • e1034257a3 feat: scaffold the Make.com custom app under integrations/make with the makecomapp.json manifest (57 modules, 6 RPCs, OAuth connection, 1 IML function), README, and gitignore Matthew Meszaros 2026-06-29 09:43:17 +02:00
  • 22b88a034a Merge pull request #53 from warmbly/feat/zapier-integration Matthew Meszaros 2026-06-29 08:31:43 +02:00
  • d5bce77123 feat: document the resource-based layout and the full Zapier trigger/action/search catalog in the README and customer guide Matthew Meszaros 2026-06-29 06:37:20 +02:00
  • 88ada5a196 feat: expand Zapier app tests to cover the resource structure and the new edit/delete/warmup/analytics/group action and search keys Matthew Meszaros 2026-06-29 06:37:20 +02:00
  • 1480d86102 feat: rewire the Zapier app index to assemble resource modules and remove the old per-type triggers/creates/searches files Matthew Meszaros 2026-06-29 06:37:20 +02:00