# Postie — Technical Brief (P0 → P1)

**Brand id:** `brand-001-postie` · **Written:** 2026-09-20 · **Sources:** `intake/current` (P0 clicks, authoritative) · `brief.json` (strategy) · `mood.json` (feel) · `references/inference-layer.md` (mapping).
**Provenance tags:** `[answered]` P0 click · `[inferred]` inference rule · `[brief]` from brief.json / mood.json · `[assumed]` defaulted · `[corrected P2]` owner correction at the P2 artifact review — argue with it by name.

> **Correction of record — 2026-09-20, P2 review.** The owner approved the P2 screens (structure, layout, letterform) and rejected the **colour**, correcting the positioning underneath it: the user is a **power user** — efficient, optimised, chasing gains, achievement-driven — who wants a **sleek, fast-paced, quiet-luxury instrument**. Forest green read as garden furniture, nature, softness: wrong audience. **"Calm" means controlled, not serene.** Reference world: instrument dials, motorsport telemetry, high-end audio, trading terminals, Linear/Raycast/Vercel dark UI. Not Asana, not wellness, not garden centre. **Teal rejected.** Every value marked `[corrected P2]` below supersedes its P0→P1 reading. **Colourway 4 (charcoal + oxblood) was chosen on `https://claude.ai/artifact/139axTcdVJanAv4XuiU7Ri` on 2026-09-20; dark is the default theme, light the alternate — final palette in §4a.**

## 1. One line
Postie pulls every email account into one seamless, high-performance inbox. `[brief]`
Positioning: the fastest, most convenient unified email client for busy multi-account power users — API-first, driveable by voice or agent. `[brief]`
Essence: **effortless speed**. Promise: *every account in one place, every time.* `[brief]`

## 2. Who, and where they meet it
- Businesses / power users 32–48 juggling several accounts (owners, technical + indie users). `[answered: audience=businesses]` corroborated `[brief]`
- Met on **phone + computer** only — no paper, no in-person. `[answered]`
- They get an **account** (software product, launching). `[answered: getWhat=account, kind=software, stage=launching]`

## 3. Named dials
| Dial | Value | Provenance |
|---|---|---|
| `register` | **precision-premium** (was warm-premium) — quiet luxury, instrument-grade; dry, exact, never chummy and never soft | `[corrected P2]` owner: performance instrument, not calm retreat; tone "crisp and expert" still holds |
| `volume` | **quiet — as in controlled**, not serene: dense, data-forward, one signal; "nothing screams" still holds, "soft" does not | answered (presence=quiet) · `[corrected P2]` reading |
| `lean` | **middle** | answered (lean=middle) — personality "calm / quietly reinvents" would have nudged softer; the click wins |
| `theme-default` | **dark (light alternate)** — dark is the `:root` theme on every surface; light is the same palette with roles swapped, rendered on the colourway canvas as row "4 · light" | **answered, P2 2026-09-20** — closes the open `theme-default` question in `phase-2/SIGN-OFF.md`; originally answered (lightDark=dark) at P0 |
| `signature-shape` | **pebble family → rounded**; object = *animal* — see §7 | answered (shape=pebble, object=animal) |
| `nameCase` | **Capital → "Postie"** | answered |
| `spelling` | British | answered |

## 4. Colour
| Parameter | Value | Provenance |
|---|---|---|
| Palette strategy | **charcoal mono + one signal accent (oxblood)** — achromatic charcoal grounds carry the brand; oxblood is the only chroma | `[corrected P2]` (was mono + forest accent) · **locked P2 2026-09-20** as colourway 4 |
| Hero hue | **LOCKED: colourway 4 — charcoal + oxblood `#8A1E2B`.** Forest green (Pantone 5535 C) withdrawn (garden furniture / nature / softness). Colourways 1 amber, 2 bone, 3 acid lime not chosen. | **answered, P2 2026-09-20** owner pick on the colourway canvas |
| Support | none chromatic — the second "colour" is a **tonal step of the ground** | inferred (mono + quiet); still holds |
| Saturation | accent saturated and flat; grounds achromatic with a faint warm-red cast | inferred (stage=launching) · `[corrected P2]` |
| Warmth | **warm-red cast** (colourway 4) in both themes — the greys carry a trace of the oxblood, never a cool or green cast | `[corrected P2]` · locked with colourway 4 |

### 4a. Final palette — both themes, every role (locked P2 2026-09-20; light corrected 2026-09-20, later)

> **Light correction of record — 2026-09-20, P2 review, second pass.** The owner rejected the first light alternate as *"weak… everything faded out."* Diagnosed to four causes (`phase-2/pairings.md` keeps the rejected values): (1) brand ground `#E8E2E3` sat 1.16:1 off the paper `#F7F3F3`, so hero / chrome / masthead carried no weight; (2) compressed tonal range — paper, light grey and slightly-lighter grey crowded the top of the scale; (3) pink-cast greys read dusty; (4) oxblood lost mass, appearing only as text, dots and strokes. **Fix: dark chrome over paper.** The light brand ground is the same charcoal as dark's (`#1F1D1E` — the chrome is the brand and does not change with theme); paper is pushed cleaner and ink deeper; the neutral ramp is near-neutral; oxblood takes FILLS for the primary moments (primary button, `triage-band`, the "All" `state-chip`). `ground-role-split` holds: charcoal = brand, paper = working surface where dense mail reads.

Light is no longer "same palette, roles swapped": brand-ground roles are theme-invariant, working-surface roles invert. Contrast is WCAG relative-luminance, computed. Text floor 4.5:1; 3:1 for UI edges and non-text. Full list: `phase-2/pairings.md`.

| Role | Dark (default) | on | ratio | Light (alternate, corrected) | on | ratio |
|---|---|---|---|---|---|---|
| brand ground (chrome-bar, masthead-band, hero, agent card, brand-tone buttons) | `#1F1D1E` | — | — | `#1F1D1E` (same as dark) | — | — |
| working ground | `#111011` | — | — | `#FBFAFA` paper | — | — |
| raised (on brand ground: search well, avatar, chips) | `#141213` | — | — | `#282627` | — | — |
| raised (on working: rail, panels, buttons, bottom bar) | `#1A1819` | — | — | `#EEEDED` | — | — |
| selected row tint | `#231B1D` | — | — | `#F2DCDF` | — | — |
| triage-band | `#231B1D` tint | — | — | `#8A1E2B` **fill** | ink `#F6EDED` | 7.93 |
| ink on working | `#ECE7E7` | `#111011` | 15.51 | `#141314` | `#FBFAFA` | 17.79 |
| ink on brand ground | `#F1ECEC` | `#1F1D1E` | 14.33 | `#F1ECEC` | `#1F1D1E` | 14.33 |
| body on working | `#BBB2B3` | `#111011` | 9.16 | `#4A4849` | `#FBFAFA` | 8.71 |
| body on brand ground | `#C7BEBF` | `#1F1D1E` | 9.22 | `#C7BEBF` | `#1F1D1E` | 9.22 |
| muted on working | `#8F8586` | `#111011` | 5.30 | `#646162` | `#FBFAFA` | 5.88 |
| muted on brand ground | `#978C8D` | `#1F1D1E` | 5.15 | `#978C8D` | `#1F1D1E` | 5.15 |
| muted on raised-brand (search "/" hint) | `#978C8D` | `#141213` | — | `#978C8D` | `#282627` | 4.62 |
| muted on raised / selected (worst case) | `#8F8586` | `#231B1D` | 4.71 | `#646162` | `#F2DCDF` | 4.69 |
| rule (decorative) | `#2A2526` | — | — | `#E4E2E2` | — | — |
| edge (input border, 3:1 floor) | `#6E6566` | `#111011` | 3.36 | `#8A8788` | `#FBFAFA` | 3.42 |
| account-pebble step 1 / 2 | `#2F292A` / `#3D3536` | ink `#F1ECEC` | 12.20 / 10.19 | `#DAD8D8` / `#C7C4C5` | ink `#141314` | 13.06 / 10.71 |
| accent fill | `#8A1E2B` | — | — | `#8A1E2B` | — | — |
| ink on accent fill | `#F6EDED` | `#8A1E2B` | 7.93 | `#F6EDED` | `#8A1E2B` | 7.93 |
| accent-as-text on working (link, count, unread-dot) | `#E4606C` | `#111011` | 5.60 | `#8A1E2B` | `#FBFAFA` | 8.76 |
| accent-as-text on brand ground (Compose +, PDF tile, agent link) | `#E4606C` | `#1F1D1E` | 4.94 | `#E4606C` | `#1F1D1E` | 4.94 |
| accent-as-text on selected tint | `#E4606C` | `#231B1D` | 4.97 | `#8A1E2B` | `#F2DCDF` | 6.99 |
| accent hover on working | `#EE7A85` | `#111011` | 7.01 | `#6F1622` | `#FBFAFA` | 11.11 |
| accent hover on brand ground | `#EE7A85` | `#1F1D1E` | — | `#EE7A85` | `#1F1D1E` | — |
| brand ground vs paper (tonal distance, non-text) | — | — | — | `#1F1D1E` vs `#FBFAFA` | — | 16.09 (was 1.16) |

Rules that fall out of the table: **oxblood `#8A1E2B` is never text on any charcoal** (2.08:1 on `#111011`, 1.84:1 on `#1F1D1E` — the lifted face `#E4606C` exists for that, in BOTH themes wherever the ground is charcoal). **`#E4606C` is never text on paper** (3.08:1) — on paper the accent-as-text face IS the oxblood. Nothing sets body text in the accent on either theme. Pebbles are tonal steps of the working ground in both themes, never accent fills. The `triage-band` is an oxblood fill on light only; on dark it stays the `#231B1D` tint (the accent already glows there). On the light landing page the three feature cards are paper tiles on the charcoal ground (working-surface roles), not raised-on-brand.
| Colour load | **≈5%** — one signal accent: the primary action, the live dot, the link, the count. **Never a large coloured ground, never an avatar fill.** | `[corrected P2]` (was 10–20%) |
| Exclusions | **brown** barred from every role; **blue** barred as hero/support; **teal / soft blue** barred (owner: rejected); **any green** barred (forest, moss, sage, mint — nature coding); watch amber→brown drift in colourway 1 | answered (colourHate=brown) + `[corrected P2]` |

## 5. Typography
| Parameter | Value | Provenance |
|---|---|---|
| Display class | **humanist sans** (fine-tune override; premium/software would otherwise have allowed grotesk or geometric) | answered (lettering=humanist) |
| Display weight strategy | **light display 300–400, one word or numeral at 600–700** | inferred (quiet + premium) |
| Body face | humanist sans, 400/500; separate family from display unless ≥5 weights | inferred |
| Scale | ratio **1.25**, 4 levels | inferred (website=half) |
| Case & tracking | sentence case; **tracked-out small caps for labels** | inferred (premium) |
| Numerals | **tabular lining** mandatory in body | inferred (getWhat=account) |
| Wordmark | "Postie" set in type, humanist class — **no logo invented** | answered (name, nameCase) |

## 6. Spacing & density
| Parameter | Value | Provenance |
|---|---|---|
| Density | **packed** — base 4, section gaps 32–48 (software; the app is the product) | inferred (kind=software) |
| Padding scale | 8 / 12 / 16 | inferred (derived) |
| Leading / measure | 1.5 · 65–75ch · 16px base | inferred |
| Separation | **tonal step or space alone — no rules, no shadows** | inferred (premium) |
| Marketing surfaces | may loosen to medium (12/16/24, gaps 64–96) — the *app* is packed, the *site* breathes | `[assumed]` |

## 7. Geometry & shape
| Parameter | Value | Provenance |
|---|---|---|
| Radius scale | pebble 16–pill, premium pulls one step sharper → **12 / 16 / pill** | inferred |
| Button shape | **pill** | inferred (direct map) |
| Container language | **flat or filled tonal panel** | inferred (premium + screen) |
| Edge quality | **crisp, machined edges, hard crops**; rounded corners at the P2-approved radii, but never feathered, never soft-glow, never pillowy | inferred (premium) · `[corrected P2]` instrument reading; the approved pill/12/16 geometry stays |
| Signature shape | object=animal → **carrier pigeon** as the source animal; derived form = a single rounded wing-arc (a quarter-pebble). **Not rendered in P1** — type carries the mark until a mark exists | answered (object=animal) · `[assumed]` the animal is a pigeon (the owner named a category, not a species) |

## 8. Decoration & imagery
| Parameter | Value | Provenance |
|---|---|---|
| Imagery mode | photo-led layouts with **labelled placeholders — never invented photos** | inferred (photos=none) |
| Photo treatment (when supplied) | natural or B&W | inferred (premium) |
| Motif | **none or one**, permitted only on fun surfaces (marketing), never in app/auth/email-transactional | inferred (quiet + fun=warm) |
| Grain | **0 — flat** | answered (grain=flat) |
| Creaminess | pebble + quiet → **soft tonal steps allowed, flat fills, no grain** | inferred |
| Icons | line icons, single weight | inferred (screen + half) |

## 9. Motion
| Parameter | Value | Provenance |
|---|---|---|
| Energy | **gentle 150–250ms** | answered (motion=gentle) |
| Easing | **ease-out, no bounce, no spring** | inferred (premium) |
| Restraint | text never moves after load; figures never animate; `prefers-reduced-motion` honoured; "no spinner you ever notice" | fixed + `[brief: mood]` |

## 10. Feel — formal/fun split
- **Formal set** (account, auth-screens, transactional-email, template-email): no motif, no humour, tonal separation. `[inferred]`
- **Fun set** (marketing-site, landing-page, marketing-email): deadpan at most (fun=warm); a single motif permitted. `[answered]`
- **Resolved P2 2026-09-20:** dark is the default on every surface; light is the alternate theme (same palette, roles swapped — §4a). Emails render on the light alternate. `[answered]`

## 11. Voice
| Parameter | Value | Provenance |
|---|---|---|
| Tone | **crisp and expert — say it plainly, confident, precise, respects time** | `[brief]` corroborates inferred (premium + quiet → dry, specific) |
| Person | third person, brand-name-as-subject for business audience ("Postie syncs…"); "you" allowed in-app | inferred + `[assumed]` the in-app relaxation |
| Do | say it plainly · be confident and precise · respect their time | `[brief]` |
| Don't | jargon / big words · going on about ourselves · slang and text-speak · exclamation marks (volume=quiet) · badges that shout | `[brief]` + inferred |
| Copy density | paragraphs ≤3 sentences | inferred (website=half) |
| Humour | deadpan at most, fun surfaces only | answered (fun=warm) |

## 12. Contrast floor (fixed, already satisfied at token level)
- 4.5:1 for all text on any ground; 3:1 for large display and UI edges.
- Verified pairings: see §4a (colourway 4, both themes, computed) and `phase-2/pairings.md`. Lowest legal text pairing: dark muted on triage tint 4.71 · light muted on raised-brand 4.62 / muted on selected tint 4.69. Edges: 3.36 dark · 3.42 light (3.05 on raised).
- Hero and support differ in luminance ≥30%; status never by colour alone. Minimum sizes 16 / 12 / 44px tap.

## 13. `never` list (load-bearing in every later phase)
| Entry | Forbids | Source |
|---|---|---|
| corporate | cool corporate blue · plain grotesk at 400 · flat rectangular grid with no warmth | answered (notLookLike) |
| clinical | pure white ground + light-grey + thin sans; hairline-everything | answered (notLookLike) |
| brown | any brown/tan/khaki in any role (watch the green→olive drift) | answered (colourHate) |
| "the big faceless one" (Gmail / Outlook) | primary-colour multi-hue marks; Material/Fluent blue; badge/notification clutter; dense toolbar chrome | `[brief: not_this]` |
| "the cold, clinical one" | robotic monochrome grey; type-as-machine; zero warmth | `[brief: not_this]` + mood anti-feel |
| trying-too-hard playful | mascot-grade illustration, bouncy springs, exclamation marks | `[brief: mood anti_feel]` |
| speed-cliché | motion lines, lightning bolts, "rocket" iconography for "fastest" | `[brief: differentiators]` — read the way `notLookLikeNamed` is |
| nature / foliage | any nature or foliage colour coding — forest, moss, sage, leaf, mint, olive — in any role; botanical motifs | `[corrected P2]` owner: read as garden furniture |
| garden-centre green | the P1 forest ground and its mint accent specifically; any green as brand ground | `[corrected P2]` owner rejected direction D's colour |
| teal / soft blue | teal, aqua, soft or dusty blue as accent or ground | `[corrected P2]` owner: "shitty blue" |
| wellness-serene | spa / meditation / breathing-app cues: soft gradients, pastel, warm-fuzzy copy, "calm" rendered as softness | `[corrected P2]` calm = controlled, not serene |

## 14. `assumed` list (argue by name)
1. `animal` = carrier pigeon (species not asked).
2. Marketing surfaces loosen from packed to medium density.
3. Emails render on the light alternate theme (light is a full theme since P2 2026-09-20, not email-only).
4. "you" address permitted inside the app despite third-person marketing voice.
5. `surfacesRecommended` was not read back — the owner-chosen list below is taken as-is, with no omission diff.
6. Body face family ≠ display family (a humanist family with ≥5 weights may collapse them).
7. Ground hex values (#0F1412 / #F3F4F0) are starting tokens, promoted or replaced by the P1 pick.
8. `admire` skipped → no temperature/saturation nudge applied.

## 15. Surfaces (owner-chosen; scopes P2/P3)
- **Marketing:** marketing-site-desktop · marketing-site-mobile · landing-page · marketing-email
- **Product:** app-desktop · app-mobile · dashboard · auth-screens
- **Transactional:** transactional-email · template-email

## 16. Open questions
- ~~Formal-set light ground vs dark default (§10).~~ Answered P2 2026-09-20: dark default, light alternate.
- Which animal, if a mark is ever wanted (§7).
- Whether a second humanist family is needed for body, or one 5+-weight family carries both.
