Standalone design mock — v10.0.0 email source + parser management. Buttons/HTMX are inert here; see email-ui-spec.md for the live routes & swap targets. Toggle OS dark mode to preview both themes.

Config

Email accounts

Inbox sources for job alerts. Passwords / app-passwords / OAuth tokens live in secrets.toml — never entered here (presence shown per account).

+ Add email account

Global #action-status poller span lives here (identical to config.html) so background OAuth / Fetch-now progress surfaces consistently.


Config

Configured parsers

NameMatcherExtractsActions
linkedin sender ~ "linkedin.com" title, company, url, location Test · Disable · Delete
otta subject ~ "matched to your profile" title, company, url Test · Disable · Delete

Recent parse misses & errors

Inbound emails that produced no job — either no parser matched, or a matched parser errored. Seed a new parser from one, or ask the LLM to draft a spec.

ReceivedFromSubjectReasonActions
06-25 11:20 Glassdoor New jobs matching "SRE" no parser matched
06-25 08:55 LinkedIn Job Alerts Senior roles for you parser "linkedin" extracted 0 jobs

Review proposed parser

Proposed by LLM from email #4821 (Glassdoor — "New jobs matching SRE"). Nothing is saved yet — review, edit, then Save.

Runs the spec against the source email below.

Preview — extracted from email #4821

titleSite Reliability Engineer
companyAcme Cloud
urlhttps://glassdoor.com/job/123
location— not extracted

Test a parser

Result — matched linkedin

FieldValue
titleSenior DevOps Engineer
companyNorthwind Ltd
locationRemote (EU)
urlhttps://linkedin.com/jobs/view/123456
(2nd job)Platform Engineer · Globex · Stockholm

Error state of the same panel:

Parser otta raised while extracting.
logs / errors
AttributeError: 'NoneType' object has no attribute 'get_text'
  parser=otta  selector=".job-card .title"
  the email's markup changed — selector matched nothing.

Empty states (when nothing configured / clean inbox):

No parsers configured.

Misses above can seed one — or paste a sample below and let the LLM draft a spec.