A lead email reads as a lead, not as the lead talking

The first inbound email of a prospect's thread now renders as a lead card: the email's subject, who actually sent it, the lead's facts on one line, and the note.

15 Oct 2026 · branch feat/inbound-lead-card · captured against propflow-stage · at bbe60a7d60e+local

Data note. Every name and balance below comes from propflow-stage, which is anonymized by construction (ADR-0097/0110 — phones in the impossible +1000 NPA, emails @example.test). The identical capture against prod would carry real tenants' names and balances and is not safe to attach anywhere, which is why the generator refuses to run against one.

1 · Before (main): the raw form body, no subject, no sender

Seeded stage thread shaped like a teammate forwarding a guest-card email. On main the first message renders as a plain bubble from the lead: the form label and note verbatim, nothing saying who actually sent it or what the email was about. Main only frames a first inbound as an inquiry when the thread is already tagged leasing or tour, or the body is a listing-site template; this thread has neither, which is the shape a forwarded guest card often has.

Asserted in the captured DOM — Listing Notes - Hi this is a test

Before (main): the raw form body, no subject, no sender
Provenance. Captured from commit 47e84dfee04, read from the worktree the server was started from (/Users/miniclaw/code/PropFlow/wt-lead-card-before) — the server could not report its own commit, so this is the weaker of the two sources. That commit is already merged into origin/main.
Sections 2–4

2 · After: the lead card

Header: New lead plus the lead's source (here "Email"; a Zillow lead reads "New lead · Zillow"), the email subject, the time. Under it, the real sender address (here a teammate, not the lead). One line of facts: name, phone, move-in, the inquiry's own home (stage's anonymized bench building name), unit. Then the note, with the form label dropped. Message metadata stays behind the (i). The card keys off the server marking this message as the prospect's first inbound email, not off the thread's topic, so it fires on this shape too. Captured at bbe60a7.

Asserted in the captured DOM — New lead · Email · Interested in Unit 201 · from leasing-staff@example.com · Test Lead · Move-in Nov 1, 2026 · Unit 201 · Note: Hi this is a test

After: the lead card

3 · After, dark mode

Same card on the dark theme: tokens only, no hard-coded colors.

Asserted in the captured DOM — New lead · Email · from leasing-staff@example.com

After, dark mode

4 · After, phone width

At 390px the header and the facts line wrap instead of overflowing.

Asserted in the captured DOM — New lead · Email · Test Lead

After, phone width
PropFlow Docs