Diamond Equity Investments · Chicago

The HTML shell

Every email Diamond Equity Investments Chicago sends goes out in one of two shells. Each is a branded frame around a single empty well — everything around the well is already done.

Fetch /client and /team, fill three tokens, send. Extensionless — .html 308-redirects here, and a client that does not follow redirects gets no body. Canonical source is melockhart/diamond-equity-investmentspackages/brand-templates/src/chicago/html-shell/. Edit there, never here.

Client · external

Sellers, leads and lenders. Full centred lockup, the tagline, the postal address and the unsubscribe. Identical for every agent — a seller should not care which system wrote to them. CAN-SPAM applies, so the address and the opt-out are load-bearing.

Fills: {{preheader}} {{{emailBody}}} {{contactId}}

/client — fetch this A real CSA template, filled → Empty →

Team · internal

DEI staff — agent output, handoffs and ops reporting. Compact bar naming the sending agent, and a well that styles tables so a rollup arrives ruled and tabular. No tagline, no postal address, no unsubscribe: internal mail is not commercial email.

Fills: {{agent}} {{preheader}} {{{emailBody}}}

/team — fetch this A real manager template, filled → Empty →

⚠️ The stored templates are not HTML

The 77 rows in Notion's Templates (CSA) are plain text with newlines, with a raw opt-out footer glued on the end — 74 of the 77 carry one. Dropped in untouched, every one sends a run-on paragraph with two unsubscribe links, because the shell provides its own.

scripts/shell.mjs strips the legacy footer, converts plain text to paragraphs, and repairs newlines that sit inside a <p>. Run node scripts/shell.mjs --selftest — 23 assertions against the four shapes actually stored.

import { renderShell } from './scripts/shell.mjs'

renderShell({ shell: 'client', body, preheader, contactId })
renderShell({ shell: 'team',   body, preheader, agent: 'LUA' })

Pointing an agent at this

Give it /agent.txt — the complete contract in plain text: which shell to pick, the four normalization steps, the token list, the checks to run before sending, and what must not be changed. Self-contained, so an agent does not need the repository.

“Use the HTML shell” on its own is not actionable: the normalization step is what stands between a stored template and a correct email, and it lives in scripts/shell.mjs inside a private repo.

Routing

The only three templates without an opt-out footer are exactly the three addressed to an acquisition manager — Video Testimonial Layer-3, Manager-Alternate-Time, Manager-Confirmed. Those are team-shell mail; the other 74 are client. suggestShell(body) returns that call. Where the workflow already knows the recipient, trust the workflow.