Commit Graph
613 Commits
Author SHA1 Message Date
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
Matthew Meszaros fc18b8e470 Merge pull request #23 from warmbly/feature/passkey-login-experience-2 2026-06-01 09:15:21 +02:00
Matthew Meszaros 379d2e8bb7 feat: declare motion dependency for the marketing site
site/src/pages/index.astro imports { animate, inView, stagger } from
'motion' for its scroll/entrance animations, but the package was never
declared in site/package.json. astro build (Site CI) therefore failed to
resolve the import (Rollup: failed to resolve import "motion"). Add
motion@^12.34.0 (matching web/) and sync site/pnpm-lock.yaml so the
frozen-lockfile install + build pass.
2026-06-01 06:05:21 +02:00
Matthew Meszaros 218af13dd9 feat: add session management
Add authenticated session listing and revocation APIs, track the auth provider on sessions, and expose active session controls in account security settings.
2026-06-01 05:53:49 +02:00
Matthew Meszaros 6483f34dfb feat: portal popover menus
Render fixed-position popover menus through document.body so transformed layout containers cannot offset or clip the menu.
2026-06-01 05:51:05 +02:00
Matthew Meszaros 8b28b86b7f feat: support exposed local dev hosts
Add PUBLIC_HOST wiring for local web, admin, site, realtime, and backend CORS so the native dev stack can be reached over Tailscale or LAN without changing localhost defaults.
2026-06-01 05:51:02 +02:00
Matthew Meszaros eee357a3ac Merge pull request #22 from warmbly/feature/integrations-2
feat: add integration oauth connections
2026-06-01 04:52:04 +02:00
Matthew Meszaros e237986f46 feat: merge main into integrations oauth 2026-06-01 04:49:50 +02:00
Matthew Meszaros 0916b07a9e Merge pull request #21 from warmbly/feature/audit-log
feat: add organization audit trail
2026-06-01 04:46:10 +02:00
Matthew Meszaros 4500aeba0f feat: add integration oauth connections
Adds OAuth-backed integration connection management across the API, repository, event dispatch, migrations, docs, and dashboard UI.

Includes realtime invalidation and small dashboard type compatibility fixes needed for the web typecheck gate.
2026-06-01 04:25:14 +02:00
Matthew Meszaros 541bddbe34 feat: force explicit passkey prompt in Safari
Use a direct navigator.credentials.get call with required mediation for explicit passkey clicks, while keeping conditional autofill on SimpleWebAuthn.
2026-06-01 04:24:09 +02:00
Matthew Meszaros e0ced97ba1 feat: add organization audit trail
Move audit logs into org-scoped Postgres storage, wire audit events across backend handlers, and surface actor details in the dashboard activity log.

Add realtime audit invalidation and retention pruning so the trail stays current and bounded.
2026-06-01 04:23:00 +02:00
Matthew Meszaros e627f05509 feat: keep passkey button clickable while preparing
Split visual loading from disabled state so the passkey spinner can show during challenge preparation without preventing Safari from receiving the explicit click.
2026-06-01 04:00:31 +02:00
Matthew Meszaros 01de325164 feat: use visible passkey spinner
Keep the working passkey wiring from the previous commit and replace the fragile shared loading SVG with a lucide spinner that is visible inside the fixed icon slot.
2026-06-01 03:38:34 +02:00
Matthew Meszaros 3465ee27ab feat: preserve passkey loading animation
Keep the animated passkey spinner while preserving the Safari-safe native click listener and challenge preparation hooks.
2026-06-01 03:33:23 +02:00
Matthew Meszaros b11f728342 feat: surface Safari passkey failures
Add visible passkey progress states, skip background conditional UI on Safari, and cancel explicit sign-in if Safari never presents a credential prompt.
2026-06-01 03:13:40 +02:00
Matthew Meszaros 87f9bf58b0 feat: add Safari-ready passkey login
Add passkey enrollment and login wiring, including a Safari-safe explicit login path that prefetches the WebAuthn challenge before the click and calls the credential ceremony immediately from the user gesture.
2026-06-01 03:09:17 +02:00
Matthew Meszaros ed066ad71a feat: mark warmup account risk immediately
Update account risk bands as warmup monitoring signals arrive, including spam placement, user complaints, invalid tokens, and worker rate-limit abuse. Trigger risk rebalancing after warmup health sweep transitions so risky accounts move out of clean pools sooner.
2026-05-31 18:10:58 +02:00
Matthew Meszaros 0cb53a25a6 feat: improve warmup pool scheduling
Add explicit warmup participant roles so connected accounts can provide recipient-only pool capacity without becoming senders. Cap warmup scheduling by eligible recipients, avoid same-day recipient reuse, reschedule exhausted pools, and reconcile missing warmup task chains.
2026-05-31 18:07:13 +02:00