Matthew Meszaros
|
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
|
2026-07-04 11:36:47 +02:00 |
|
Matthew Meszaros
|
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
|
2026-07-04 11:36:47 +02:00 |
|
Matthew Meszaros
|
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
|
2026-07-04 11:36:47 +02:00 |
|
Matthew Meszaros
|
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
|
2026-07-04 11:36:47 +02:00 |
|
Matthew Meszaros
|
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
|
2026-07-04 11:27:36 +02:00 |
|
Matthew Meszaros
|
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
|
2026-07-04 11:27:36 +02:00 |
|
Matthew Meszaros
|
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
|
2026-07-04 11:27:36 +02:00 |
|
Matthew Meszaros
|
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
|
2026-07-04 09:30:27 +02:00 |
|
Matthew Meszaros
|
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
|
2026-07-04 09:30:27 +02:00 |
|
Matthew Meszaros
|
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
|
2026-07-04 09:30:27 +02:00 |
|
Matthew Meszaros
|
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
|
2026-07-04 09:30:27 +02:00 |
|
Matthew Meszaros
|
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
|
2026-07-04 09:30:27 +02:00 |
|
Matthew Meszaros
|
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
|
2026-07-04 09:30:27 +02:00 |
|
Matthew Meszaros
|
4fe0689d50
|
feat: document the Graph-backed Outlook connection and the recipient-side warmup folder categorization in the mailboxes and warmup guides
|
2026-07-04 08:07:50 +02:00 |
|
Matthew Meszaros
|
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
|
2026-07-04 08:07:50 +02:00 |
|
Matthew Meszaros
|
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
|
2026-07-04 08:07:50 +02:00 |
|
Matthew Meszaros
|
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
|
2026-07-04 08:07:49 +02:00 |
|
Matthew Meszaros
|
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
|
2026-07-04 08:07:49 +02:00 |
|
Matthew Meszaros
|
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
|
2026-07-04 08:07:49 +02:00 |
|
Matthew Meszaros
|
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
|
2026-07-04 08:07:49 +02:00 |
|
Matthew Meszaros
|
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
|
2026-07-04 08:07:49 +02:00 |
|
Matthew Meszaros
|
36bfaf2e71
|
Merge pull request #55 from warmbly/automation-realtime-editing
Dashboard-wide real-time collaboration: live cursors, collaborative canvases, sticky positions, and live CRM
|
2026-07-02 20:43:36 +02:00 |
|
Matthew Meszaros
|
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
|
2026-07-02 20:33:44 +02:00 |
|
Matthew Meszaros
|
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
|
2026-07-02 20:33:44 +02:00 |
|
Matthew Meszaros
|
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
|
2026-07-02 20:33:44 +02:00 |
|
Matthew Meszaros
|
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
|
2026-07-02 20:33:44 +02:00 |
|
Matthew Meszaros
|
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
|
2026-07-02 20:33:44 +02:00 |
|
Matthew Meszaros
|
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
|
2026-07-02 20:00:50 +02:00 |
|
Matthew Meszaros
|
88cabf5cac
|
feat: cap the live:select ids payload before traversal so an oversized selection list is never fully walked by the realtime channel
|
2026-07-02 14:31:36 +02:00 |
|
Matthew Meszaros
|
b00e307d6a
|
feat: document cursor chat, the live:select selection event, and jump-to-teammate in the realtime API reference and the collaboration guide
|
2026-07-02 07:40:07 +02:00 |
|
Matthew Meszaros
|
954759a6ce
|
feat: make each teammate in the header presence dropdown clickable to jump straight to the page they are on
|
2026-07-02 07:40:07 +02:00 |
|
Matthew Meszaros
|
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
|
2026-07-02 07:40:06 +02:00 |
|
Matthew Meszaros
|
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
|
2026-07-02 07:40:06 +02:00 |
|
Matthew Meszaros
|
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
|
2026-07-02 07:40:06 +02:00 |
|
Matthew Meszaros
|
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
|
2026-07-01 06:51:36 +02:00 |
|
Matthew Meszaros
|
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
|
2026-07-01 02:32:23 +00:00 |
|
Matthew Meszaros
|
a104b1e220
|
feat: add warmup/abuse/cold-send deliverability research report with prioritized Now/Next/Later roadmap in resources/warmup-abuse-cold-research.md
|
2026-07-01 02:11:57 +00:00 |
|
Matthew Meszaros
|
c21f170429
|
fix: ignore live:patch frames in useLivePatch when the subscriber has no resource yet, instead of receiving every org patch
|
2026-06-30 19:20:08 +02:00 |
|
Matthew Meszaros
|
d87ada8b92
|
feat: document end-to-end live CRM collaboration (deal moves, task changes, pipeline edits, in-progress drag highlight) in the collaboration guide
|
2026-06-30 19:18:55 +02:00 |
|
Matthew Meszaros
|
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
|
2026-06-30 19:18:55 +02:00 |
|
Matthew Meszaros
|
7f5cc010bb
|
feat: broadcast CRM pipeline and stage edits over live:patch and refresh the pipelines view instantly for teammates
|
2026-06-30 19:18:55 +02:00 |
|
Matthew Meszaros
|
a93868fc77
|
feat: broadcast CRM task create/update/delete over live:patch and refresh the tasks view instantly for teammates ahead of the audit refetch
|
2026-06-30 19:18:55 +02:00 |
|
Matthew Meszaros
|
c1ad213dda
|
feat: make useLivePatch send-only when given no onPatch so mutation hooks can broadcast a live:patch without opening a channel subscription
|
2026-06-30 19:18:55 +02:00 |
|
Matthew Meszaros
|
39e3accc4e
|
Merge pull request #54 from warmbly/make-integration
feat: Make.com integration for Warmbly
|
2026-06-30 17:36:56 +02:00 |
|
Matthew Meszaros
|
49ffcec432
|
feat: document the live:patch event, cursor avatars, and live CRM deal-board moves in the realtime reference and collaboration guide
|
2026-06-30 10:34:14 +02:00 |
|
Matthew Meszaros
|
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
|
2026-06-30 10:34:14 +02:00 |
|
Matthew Meszaros
|
cca4ea5817
|
feat: add a reusable useLivePatch hook over the live:patch transport for optimistic collaborative state updates scoped by resource
|
2026-06-30 10:34:14 +02:00 |
|
Matthew Meszaros
|
3ffd4416a2
|
feat: add a generic live:patch channel kind that fans out a small sanitized scalar map for ephemeral collaborative-state hints
|
2026-06-30 10:34:14 +02:00 |
|
Matthew Meszaros
|
18fd48bfcb
|
feat: render teammate avatars with initials fallback on live cursors so it is always clear who each pointer belongs to
|
2026-06-30 10:34:14 +02:00 |
|
Matthew Meszaros
|
7237a7500c
|
feat: document dashboard-wide live cursors, collaborative builder canvases, and sticky card positions across the collaboration, automations, and sequences guides
|
2026-06-30 10:06:58 +02:00 |
|