Matthew Meszaros
|
eefa88adff
|
feat: iOS mailboxes - account list with health/warmup state, connect sheet, and mailbox detail with settings, limits and deliverability tabs
|
2026-07-07 05:57:43 +02:00 |
|
Matthew Meszaros
|
553a2844a5
|
feat: iOS contacts and CRM - contacts browser with category picker and bulk selection, contact detail with edit drawer, plus CRM deals, meetings, tasks and template views on the shared air scaffold
|
2026-07-07 05:57:43 +02:00 |
|
Matthew Meszaros
|
7afa5d997e
|
feat: iOS campaigns - list with status rows, create sheet, and campaign detail with air hero, sticky tabs, sequence/schedule/recipient views and live send stats
|
2026-07-07 05:57:43 +02:00 |
|
Matthew Meszaros
|
f3cb7b114b
|
feat: iOS unibox - Gmail-style browser with sidebar drawer (sky hero badges, sliding pill selection, red unread counts, labels + uncategorized), search pill with operator hints and result counts, multi-select with swipe actions and infinite scroll, flat thread view with connector rail, replying-to references, per-message reply/copy/read tools, and an air-styled reply composer with smart scheduling
|
2026-07-07 05:57:31 +02:00 |
|
Matthew Meszaros
|
07b319b2d6
|
feat: iOS home tab - workspace pulse with air hero, live health/send stats, and shortcuts into mailboxes and analytics
|
2026-07-07 05:57:31 +02:00 |
|
Matthew Meszaros
|
4dc32e6ccb
|
feat: iOS auth flow - welcome screen, multi-step email login/register with OTP code field, native Sign in with Apple and Google buttons against the new token endpoints, org picker, and the post-signup onboarding questionnaire
|
2026-07-07 05:57:31 +02:00 |
|
Matthew Meszaros
|
5041c285ca
|
feat: iOS navigation shell - session-gated root with a breathing-logo sky launch view and a permission-aware tab bar carrying the unibox unread badge
|
2026-07-07 05:57:11 +02:00 |
|
Matthew Meszaros
|
a434e0c070
|
feat: iOS design system - air theme (sky wash heroes, tone palettes, stat chips, eyebrow labels), shared components (avatars, skeleton shimmer rows, empty/error states, tap-scale style), and the Warmbly logo/wordmark shapes
|
2026-07-07 05:57:11 +02:00 |
|
Matthew Meszaros
|
4f55903165
|
feat: iOS realtime layer - Phoenix channels websocket client with heartbeats and rejoin backoff, org/user channel subscriptions, presence state sync, and per-feature event pulses driving live query invalidation
|
2026-07-07 05:57:11 +02:00 |
|
Matthew Meszaros
|
5710c86d9e
|
feat: iOS core layer - async APIClient with idempotency keys and typed errors, Codable models mirroring the backend wire contracts (including the Group title key), session store with permission checks, and a keychain-backed token store
|
2026-07-07 05:57:01 +02:00 |
|
Matthew Meszaros
|
734955b490
|
feat: scaffold the Warmbly iOS app - Xcode project with synchronized folder references, app entry point wiring the environment, Info.plist with a LaunchBackground sky launch screen, and the asset catalog (app icon, accent, clouds, launch color)
|
2026-07-07 05:57:01 +02:00 |
|
Matthew Meszaros
|
15088a6f64
|
feat: pin cowboy >= 2.16 in the realtime service so CR/LF response header values are rejected before the wire (EEF-CVE-2026-43966/43969 has no patched cowlib release)
|
2026-07-07 05:56:47 +02:00 |
|
Matthew Meszaros
|
13f193d91e
|
feat: unibox list filters - from now matches sender addresses by case-insensitive substring as documented, and a new uncategorized=true param returns only threads with no labels, documented in the unibox API reference
|
2026-07-07 05:56:47 +02:00 |
|
Matthew Meszaros
|
08699b1c88
|
feat: include the referral_reward_percent column in plan row scans so plan lookups stop failing after the referral rewards migration
|
2026-07-07 05:56:47 +02:00 |
|
Matthew Meszaros
|
a20ba926cb
|
feat: add native Apple/Google sign-in to the backend - POST /auth/apple and /auth/google exchange provider-signed ID tokens for sessions, GET /auth/providers exposes configured providers for app discovery, with a JWKS-verifying idtoken package, auth config, stable error codes, and API/security docs
|
2026-07-07 05:56:35 +02:00 |
|
Matthew Meszaros
|
cef5e019e6
|
feat: ignore Xcode per-user state (xcuserdata) and .DS_Store so the iOS project tree stays free of machine-local files
|
2026-07-07 05:56:24 +02:00 |
|
Matthew Meszaros
|
99dfd261d4
|
Merge pull request #62 from warmbly/feature/gmail-imap-sync-fixes
Feature/gmail imap sync fixes
|
2026-07-04 13:19:15 +02:00 |
|
Matthew Meszaros
|
27487a3279
|
Merge pull request #59 from warmbly/feature/human-send-behavior
Human-like send + warmup engagement timing (no metronome, round-mark, or 3am-read fingerprints)
|
2026-07-04 13:12:29 +02:00 |
|
Matthew Meszaros
|
f38a939f2e
|
Merge pull request #60 from warmbly/feature/inbound-bounce-and-behavior
Inbound NDR bounce suppression (permanent-only, idempotent) + warmup volume variation + reconciler throttle
|
2026-07-04 13:12:15 +02:00 |
|
Matthew Meszaros
|
87a877bd95
|
Merge pull request #61 from warmbly/fix/realtime-multiarch-publish
Fix realtime image publish: native multi-arch runners instead of 6h QEMU hang
|
2026-07-04 12:09:32 +02:00 |
|
Matthew Meszaros
|
4c714c471f
|
Merge pull request #58 from warmbly/feature/gmail-imap-sync-fixes
Fix Gmail and SMTP/IMAP sync/send bugs; bring both to parity with the Graph path
|
2026-07-04 12:09:30 +02:00 |
|
Matthew Meszaros
|
b11cf3fa27
|
Merge pull request #57 from warmbly/feature/mailbox-graph-api
Microsoft mailboxes on Graph + working account load/send/sync + warmup categorization
|
2026-07-04 12:02:05 +02:00 |
|
Matthew Meszaros
|
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
|
2026-07-04 11:59:35 +02:00 |
|
Matthew Meszaros
|
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)
|
2026-07-04 11:45:01 +02:00 |
|
Matthew Meszaros
|
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
|
2026-07-04 11:38:23 +02:00 |
|
Matthew Meszaros
|
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
|
2026-07-04 11:36:47 +02:00 |
|
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 |
|