DEI Realty · Chicago

The HTML shell

Every email DEI Realty 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.

Two things outstanding before any external send. There is no email sending address yet — Notion records it as “not yet set”. And the phone is withheld: (630) 333-9073 appears in the live site footer and in Notion but is not DEI Realty’s number, so no phone is shown anywhere and the build fails on it. The postal address is set.

Client · external

Buyers, sellers and leads. Diamond top right; the full lockup large, centred and in colour on the bone footer with the postal address, Equal Housing Opportunity and the unsubscribe. Identical for every agent.

Fills: {{preheader}} {{{emailBody}}} {{contactId}} {{postalAddress}} {{phone}}

client.html — the template The Well — the blank Filled specimen →

Team · internal

DEI Realty staff — agent output, handoffs, ops reporting. Agent code left, diamond right, table-styled well. No tagline, no postal address, no Equal Housing line, no unsubscribe.

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

team.html — the template The Well — the blank Filled specimen →

The Well — what a blank looks like

The Well is the blank template. A truly empty shell renders as chrome with a void between the rules: you cannot see where content goes, how much room it has, or that there is a region at all. The Well marks that region, so the blank shows its own structure. Delete the outline and write in its place.

This is the house convention across every Opscend property. The Chicago shells use it too.

Building an email

compose.html is the composable blank — the client shell with a starter body you delete, so nothing begins from an empty file.

elements.html is the palette: 16 entries, each rendered beside the call that produces it — kicker, heading, text, quote, button, link, listing (with its contingent and no-photograph states), person, stars, stats, image, video, rule, spacer.

compose.html — start here elements.html — the palette

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 opt-out, the pre-send checks and what must not be changed. Self-contained, so an agent does not need the repository. Same text as agent.md.

“Use the HTML shell” on its own is not actionable: normalization lives in scripts/email-shell.mjs inside a private repo.

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

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

Routing

Decide by recipient, not by inspecting the body. Going to a client, lead or member of the public → client shell. Going to someone who works at DEI Realty → team shell.

Anyone who knows the Chicago shell will expect a rule derived from the stored templates. There is none here to derive: DEI Realty’s Templates (CSA) has six rows, all SMS, with no email bodies at all. Do not invent one.

Boundary

This is DEI Series LLC. It shares no code, tokens, components or content with the Diamond Equity Investments repo. That shell looks nothing like this one on purpose — different business, different brand, and red is DEI Realty’s action colour where Diamond Equity removed it.