feat(email): add provider picker to Settings > Account #14

Merged
cesnimda merged 1 commits from feat/email-provider-picker-ui into main 2026-07-11 19:59:25 +02:00
Owner

b5 (final email-provider slice) of the multi-provider email roadmap. Stacked on #12 (ImapProvider) -- base this PR on main after #12 merges. EmailProviderConnections: one card per provider (Gmail, Outlook/365, generic IMAP), connect/disconnect actions, mounted in Settings > Account. Gmail/Microsoft reuse the OAuth-popup handshake; IMAP is a plain credential form. Deliberately does not touch the Gmail-specific candidate-matching/review UI -- that backend pipeline is still Gmail-only by design. Verified live end-to-end (login, all 3 status calls 200, IMAP form submit + error surfacing). 25 suites/57 tests green.

b5 (final email-provider slice) of the multi-provider email roadmap. Stacked on #12 (ImapProvider) -- base this PR on main after #12 merges. EmailProviderConnections: one card per provider (Gmail, Outlook/365, generic IMAP), connect/disconnect actions, mounted in Settings > Account. Gmail/Microsoft reuse the OAuth-popup handshake; IMAP is a plain credential form. Deliberately does not touch the Gmail-specific candidate-matching/review UI -- that backend pipeline is still Gmail-only by design. Verified live end-to-end (login, all 3 status calls 200, IMAP form submit + error surfacing). 25 suites/57 tests green.
cesnimda changed target branch from feat/imap-provider to main 2026-07-11 19:55:43 +02:00
cesnimda added 1 commit 2026-07-11 19:55:43 +02:00
feat(email): add provider picker to Settings > Account
CI and Deploy / test (pull_request) Successful in 2m8s
CI and Deploy / deploy (pull_request) Has been skipped
6db3bffb2f
b5 of the multi-provider email roadmap (frontend). Adds EmailProviderConnections
-- one card per provider (Gmail, Outlook/Microsoft 365, generic IMAP) showing
connect status and connect/disconnect actions, mounted in SettingsView's
Account tab alongside the existing app-login GoogleAuthCard (a separate
concern: that card is sign-in identity, this is mailbox linking).

Gmail and Microsoft reuse the OAuth-popup + postMessage handshake already
built server-side (mirrors Correspondence.tsx's existing Gmail-connect flow).
IMAP has no OAuth step, so it's a plain host/port/ssl/username/password form
posting to /api/imap/connect, which verifies the connection server-side
before storing it.

Deliberately NOT touched: the Gmail-specific job-candidate-matching/review UI
in Correspondence.tsx and GmailReviewPage.tsx. That backend pipeline
(ListJobCandidateMessagesAsync, GmailReviewDecisions) is still Gmail-only by
design -- generalising it now would mean building fake UI for capabilities
Microsoft/IMAP don't have yet. This is scoped to the piece that's actually
provider-neutral: connect/disconnect status.

Verified live (backend + frontend dev servers): logged in, confirmed all
three /status calls return 200, Gmail connect-url fetch succeeds, IMAP form
submit hits /api/imap/connect and surfaces the expected 400 on a bad host.

Frontend suite: 25 suites / 57 tests green (2 new).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
cesnimda merged commit 408da93fc7 into main 2026-07-11 19:59:25 +02:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: cesnimda/jobtrackingapp#14