Commit Graph
1681 Commits
Author SHA1 Message Date
Matthew Meszaros 35fbf73347 feat: persist warmup engagement dwell
Store delayed warmup engagement actions in Postgres and drain them from the consumer so read, important, and star actions survive worker restarts.

Keep foldering and spam rescue immediate while routing delayed actions to the mailbox's current worker at fire time.
2026-06-03 11:14:02 +02:00
Matthew Meszaros 59d253ef1d feat: harden warmup action handling
Wire warmup health webhooks in the consumer and log skipped warmup actions when a recipient mailbox has no assigned worker.

Run foldering and spam rescue immediately while keeping only low-stakes engagement signals behind the dwell delay.
2026-06-03 06:40:35 +02:00
Matthew Meszaros 52bcc163fb feat: fix warmup reply threading
Persist outbound warmup Message-IDs so later warmup replies can find thread parents.

Normalize reply headers and re-check partner health during recipient selection before using a mailbox as a warmup recipient.
2026-06-03 06:40:27 +02:00
Matthew Meszaros 24422ed427 feat: add campaign template scoring
Add an advisory content score endpoint that reuses warmup linting heuristics for campaign templates.

Surface the score in the sequence editor so users can check subject and body deliverability before sending.
2026-06-03 06:27:07 +02:00
Matthew Meszaros de7e28d294 feat: add campaign deliverability breaker
Track complaint events in campaign progress and evaluate rolling bounce and complaint rates before auto-pausing campaigns.

Emit an early warning webhook when campaign deliverability enters the warning band.
2026-06-03 06:26:56 +02:00
Matthew Meszaros 38cbcd281e feat: add warmup star engagement
Add star-rate settings to warmup content controls and include star actions in generated engagement plans.

Execute Gmail stars via STARRED labels while keeping IMAP behavior a no-op to avoid duplicate flagging.
2026-06-03 06:26:47 +02:00
Matthew Meszaros 47bdf66899 feat: improve warmup health analytics
Record warmup spam placements by recipient provider and surface provider breakdowns in the admin health summary.

Track warmup replies and use stable static conversation ids so warmup analytics can correlate content reliably.
2026-06-03 06:26:39 +02:00
Matthew Meszaros e81f6d54cf feat: add mailbox deliverability checks
Add an email auth-check endpoint and dashboard panel for SPF, DKIM, and DMARC validation.

Expose warmup content segment editing on mailboxes so segment-aware warmup content can be selected intentionally.
2026-06-03 06:26:23 +02:00
Matthew Meszaros 15ef9d4994 feat: add warmup content controls
Add warmup content generation and admin review surfaces, plus mailbox warmup appeal/status APIs.

Track warmup engagement and tampering signals so unsafe mailboxes can be handled by the warmup flow.
2026-06-03 05:05:53 +02:00
Matthew Meszaros 9a9d8653db Merge pull request #25 from warmbly/feature/admin-dashboard
feat: expand admin control plane
2026-06-02 16:58:36 +02:00
Matthew Meszaros 6109601e87 feat: pin lint command to installed tool
Restore the golangci-lint config format expected by the pinned v1 CI tool and make the lint target invoke the installed binary directly.
2026-06-02 16:50:42 +02:00
Matthew Meszaros eac99628bb feat: enforce worker pool assignment safety
Reserve dedicated worker allocation for the control plane, auto-promote spare capacity when needed, and keep risky or quarantined mailboxes off clean shared workers.
2026-06-02 16:38:49 +02:00
Matthew Meszaros 3943b8a2e7 feat: update docs for postgres-backed secrets
Refresh developer docs, deployment notes, and public-site copy to describe the Postgres-backed encrypted key and message-map model after DynamoDB removal.
2026-06-02 15:55:01 +02:00
Matthew Meszaros cf5ca0e649 feat: consolidate admin infrastructure settings
Replace separate backend settings pages with a single infrastructure view, remove the egresses route, and update admin navigation/readme copy.
2026-06-02 15:54:47 +02:00
Matthew Meszaros e740aebba8 feat: upgrade admin management explorers
Wire expanded admin API contracts into campaigns, discounts, enterprise, limit request, outreach, plan, worker detail, and provisioning admin views.
2026-06-02 15:54:40 +02:00
Matthew Meszaros bc435747ea feat: expand admin management queries
Add richer backend models, handlers, services, and repository queries for admin campaigns, discounts, outreach, organizations, limit requests, and provisioning surfaces.
2026-06-02 15:54:29 +02:00
Matthew Meszaros 2430095197 feat: move infrastructure state off dynamodb
Remove DynamoDB-backed storage paths, add Postgres/HTTP repositories for mailbox state maps, wire the internal message-map API, and add provisioning runner/migration plumbing.
2026-06-02 15:54:12 +02:00
Matthew Meszaros 0e31748662 feat: add worker explorer filters
Convert the managed workers page into a faceted explorer with client-side filtering, sorting, CSV metadata, and worker detail navigation.
2026-06-02 05:44:43 +02:00
Matthew Meszaros 6bc6c066fc feat: add faceted admin data browsers
Upgrade users, organizations, and mailboxes admin pages with explorer filters, date and numeric facets, sortable tables, and scoped navigation params.
2026-06-02 05:44:39 +02:00
Matthew Meszaros 3d0b514eb7 feat: add admin explorer filter primitives
Expand the admin explorer control set with select, toggle, date-range, and number-range filters plus shared date-range serialization helpers.
2026-06-02 05:44:35 +02:00
Matthew Meszaros 0b6c394e89 feat: wire admin explorer query params
Add a shared admin search query serializer and expose the expanded user, organization, and mailbox filter contracts to the frontend clients.
2026-06-02 05:44:31 +02:00
Matthew Meszaros 867375bd14 feat: add backend admin explorer filters
Extend admin user, organization, and mailbox search models and repositories with richer faceted filters, ranges, sorting, and plan/pool metadata for explorer views.
2026-06-02 05:44:27 +02:00
Matthew Meszaros 7906363c16 feat: refine the admin data explorer (organized facet rail, result count, icon toolbar, crisp table) 2026-06-01 18:14:10 +02:00
Matthew Meszaros 8be0aa0269 feat: Mailboxes browser + browse-mailboxes-by-org cross-entity filter 2026-06-01 18:01:40 +02:00
Matthew Meszaros 072e7a7b6e feat: data-explorer (filter rail + sortable, cursor-paged table) for Users and Organizations 2026-06-01 17:56:03 +02:00
Matthew Meszaros 412a4c0baa fix: broken admin list endpoints (uuid casts, campaign/plan columns, warmup pools shape) 2026-06-01 17:44:13 +02:00
Matthew Meszaros 86f72b8c53 feat: refine admin dashboard chrome
Align the sidebar header with the topbar, use the Warmbly logo, and let dashboard content use the full available width.
2026-06-01 17:41:13 +02:00
Matthew Meszaros df658ad9a0 feat: harden admin warmup error states
Wire the shared error state through warmup admin queries and guard summary cards against partial API responses.
2026-06-01 17:41:10 +02:00
Matthew Meszaros defe511bd3 feat: show full admin user list errors
Use the shared error state on user and organization admin tables so failed loads expose the real API message and request ID.
2026-06-01 17:41:05 +02:00
Matthew Meszaros 0e3bbcaca0 feat: add admin query error state
Introduce a shared admin error panel that displays full API failure details and offers an inline retry action.
2026-06-01 17:41:01 +02:00
Matthew Meszaros 2c8beefe0d feat: surface admin api error metadata
Capture backend error codes and request IDs in the admin APIError type so failed admin views can show actionable diagnostics.
2026-06-01 17:40:57 +02:00
Matthew Meszaros 3837cd3898 feat: bound auth login network waits
Add request and mail-delivery timeouts around auth flows so login requests cannot hang indefinitely when notification delivery stalls.

Allow the local admin dev origin through default CORS and update context-aware lint fixes so the repository lint gate passes.
2026-06-01 16:56:24 +02:00
Matthew Meszaros 910fac9808 feat: declutter the admin login (no dev env pill, flat mail badge, no load animation) 2026-06-01 16:49:46 +02:00
Matthew Meszaros 1532407f83 feat: space out the login-code email between the eyebrow and heading 2026-06-01 16:49:46 +02:00
Matthew Meszaros 4944689e57 feat: add a complete admin favicon set (ico, png, apple-touch, manifest) 2026-06-01 16:43:27 +02:00
Matthew Meszaros 0b53bae0c0 feat: expose admin status on /auth/me so the admin app can authorize 2026-06-01 16:30:51 +02:00
Matthew Meszaros abb38b0f51 feat: animate the admin login steps and add an OTP code input 2026-06-01 16:20:32 +02:00
Matthew Meszaros f62312d674 feat: optically center the Warmbly mark in the admin favicon 2026-06-01 16:19:29 +02:00
Matthew Meszaros f2913249b4 feat: implement the two-step email-code admin login flow 2026-06-01 13:58:06 +02:00
Matthew Meszaros bcc861ef7e feat: theme the admin favicon with the Warmbly mark in red 2026-06-01 13:19:37 +02:00
Matthew Meszaros 76c2cb7d49 feat: run make seed natively so it no longer needs a docker backend 2026-06-01 13:19:30 +02:00
Matthew Meszaros d554fdec4a feat: redesign the admin login page 2026-06-01 13:12:32 +02:00
Matthew Meszaros 559d05a458 feat: use dot-separated event-bus topic names for Kafka compatibility 2026-06-01 12:49:24 +02:00
Matthew Meszaros d92e7f1b42 feat: squash migrations into a single baseline schema 2026-06-01 12:35:41 +02:00
Matthew Meszaros 7ee5ec629c Merge pull request #24 from warmbly/feature/email-warmup-process
feat: improve email warmup scheduling and safety
2026-06-01 11:45:36 +02:00
Matthew Meszaros a35ca01a6c feat: fix warmup lifecycle audit logging
Use the organization-scoped audit helper after merging the updated audit service signature from main.
2026-06-01 11:41:22 +02:00
Matthew Meszaros 83eae84d49 feat: merge main into warmup branch
Resolve the main-branch conflict in realtime event publishing by keeping both warmup account-health and audit-created events. Renumber the warmup migrations after the current main migration tail.
2026-06-01 11:36:04 +02:00
Matthew Meszaros aa391b5e0c feat: fix warmup reconciler guards 2026-06-01 11:27:44 +02:00
Matthew Meszaros a04d7450bc feat: guard warmup reconciliation by access
Make the warmup task reconciler re-check account state and org warmup access before scheduling replacement tasks. Remove pool membership for accounts whose org can no longer use warmup to avoid repeated no-access task churn.
2026-06-01 11:19:44 +02:00
Matthew Meszaros 4198564f12 feat: cap warmup for active campaign senders
Limit warmup volume to 5 messages per day when a mailbox is part of an active campaign sender pool. This keeps warmup as a low-volume reputation heartbeat while campaign traffic is already active.
2026-06-01 09:15:51 +02:00