Round 1 as reviewed on 24 Sep. Feedback recorded in feedback.md; round 2 rebrief is based on it.
The Thread
The first reply, in your name.
The Thread: an editorial long-read on warm paper. The hero is the WhatsApp conversation, typeset as a play script at 44px with speaker cues, stage directions ("20:13. An enquiry lands in the office inbox. Nobody is there to read it.") and oxblood margin notes about what the bot is doing. Four numbered chapters follow: drop-cap statistics, an "it says / it never says" spread with the never-says lines struck through, a torn-paper lead sheet taped beside the four jobs, and section-mark clauses for trust. It closes with a short letter and the booking form.
“The most memorable of the lot: a real WhatsApp thread set in 40px type that you actually read, plus a strong "it says / it never says" spread. Two copy claims are untrue, and on desktop the hero leaves a big empty column that goes on for about 3,000px. Both are fixable without touching the idea.”
Polish pass: 8 changes
- Hero caption rewritten to the exact required text: 'The conversation is real output from a simulation, lightly trimmed. Agency, agent and buyer names are invented.' It now has an italic 'About the conversation' head. On desktop it sits at the foot of the left column, level with the end of the thread, like a magazine caption. 'Nothing else has been touched.' is removed.
- Hero layout: the left column is now wrapped in .left (grid, rows 1fr/auto, stretched). .stand is position:sticky; top:96px; align-self:start, so the H1, dek and both CTAs stay beside the script as you scroll. I checked this with a viewport screenshot scrolled to y=1100: the H1 and CTAs sit next to the 20:24 turn. Page height at 1440px went from 8017px to 7457px.
- Thread capped at 5 turns: bot opener, Sue, bot, Sue, bot 'Lovely... must?'. Sue's must-haves turn and 'Noted for Dan...' were cut from the hero ('Noted for Dan...' is still in the Chapter two spread). They are replaced by one stage direction, '20:26 Two more messages. Must-haves, and whether Dan should message or ring.', before the existing 20:27 lead-sheet line. The trim matches the 'lightly trimmed' caption.
- Mid-thread CTA added after the 20:27 stage line: a 'Book a 15-minute call' button (#book) plus the italic line 'You play the buyer. Ask it the awkward ones.' It sits above a hairline rule and goes full width on mobile.
- Thread type now tops out at 36px: clamp(28px, 2.5vw, 36px), line-height 1.2, max-width 31ch. The limit is removed on mobile. The opener is now 6 lines at 36px instead of 7 at about 44px.
- Chapter one lede: the invented claims are removed. It now reads '...or on a Saturday, and by Monday the buyer has usually moved on. The reply lag is the lever.' The viewings sentence is deleted.
- Chapter one stats: '925 of the 2,071 said they wanted to buy within 0 to 3 months.' Dropped 'and nobody wrote back', which implied the 925 were among the never-contacted leads. Dropped the unsupported 'Paid-for' from the 61% stat.
- Trust clause 'AI, said out loud.': removed 'and we were doing it before then anyway'. The clause now reads 'Every buyer is told, in plain words, that they are talking to the AI assistant. EU AI Act Article 50 applies from 2 August 2026. We disclose from the first message regardless.' The first sentence was reworded so 'first message' is not said twice.
After Hours
The night shift for your portal leads.
After Hours: the page is the log of one Saturday night. A huge tabular 21:07 clock ticks from :02 to :16 as the first WhatsApp goes out, and a timestamped timeline lights up entry by entry through to the 21:14 hand-off. After that come the 2,071-lead numbers, a terminal-style transcript with margin notes (re-engage, answer, qualify, hand off), Dan's lead sheet, a list of struck-through lines the bot will never send, a trust spec sheet, and a single amber "Book a 15-minute call" line.
“This is the one you'd remember. A huge 21:07 clock that ticks to :16, and the whole page reads as the log of one Saturday night. It sticks to its direction almost all the way through. Before it ships, fix the hero message so the AI mention flows into the question, and make the hero timeline match the transcript.”
Polish pass: 8 changes
- Hero timeline 21:07:16 message now matches the transcript's opener and uses its comma join: "Hi Sue, Sol y Sal Homes here. We were passed your A Place in the Sun enquiries around Villamartin, I'm the AI assistant for the team. When are you next over?" The AI mention is now a clause that flows into the question.
- Hero timeline 21:09:40 entry changed to "Sue replies. Flying out 14 to 21 October, after a 2-bed townhouse." so it agrees with the transcript. Cash and no high-rise stay at 21:11:30 and 21:13:25.
- Hero restructured into two columns: the left column (.hero-main) holds the clock, H1, lede and CTAs. The timeline sits in a 340 to 410px right column whose top lines up with the clock (6px apart, measured at 1440, 1280 and 1024). The dead space to the right of ':16 sent' is gone. The clock sizes to its column with container-query units (23.2cqi, max 232px) and a vw fallback: 163px at 1440 and 99px at 390 (it was 88px on mobile).
- Problem stats: removed the 4-up bordered cells. 61% now has its own row at clamp(120px,15vw,224px) in amber, with a 34px display caption beside it. That is about 3.5x the others. 925, £152k and 18-35d sit in a smaller row beneath it (64px), with JetBrains Mono labels and no borders or background. On mobile the three stack 2+1 and 61% stays the biggest (133px). The count-up now runs on the 61% row.
- Conversation annotations: note text is now 12.5px in #B8B2A8 (it was 12px at 56% alpha). Labels (RE-ENGAGE, ANSWER, HAND-OFF LINE, QUALIFY) are 12px amber. The bot lines at 21:10:02 and 21:10:03 are merged into one row under 21:10:02, as two bubbles split by a dashed hairline. Both notes are stacked in one note cell. Mobile row padding is tighter and mobile transcript text is 16px.
- Final CTA: the big amber 'Book a 15-minute call' headline is now a real anchor to #f-name (id book-jump). On click it scrolls to and focuses the name field, with smooth scrolling unless the reader prefers reduced motion. It has a visible 2px amber focus-visible ring with an 8px offset.
- Slop flags: removed the fixed SVG noise overlay (body::after). Replaced the generic floating radial glow (.hero::before) with a glow tied to the clock (.clock::before), like a lit phone screen, and made it stronger on mobile (nice-to-have). Dropped the greyed-out second clause of the two-tone H1, which is now one colour.
- 'Won't say' section: each refused line now carries a mono timestamp showing when it would have gone out in Sue's thread, plus an amber 'not sent' tag: 21:07:16 for the menu and STOP lines, 21:10:02 for availability and 'within the hour', 21:11:48 for budget, 21:13:25 for other services. The Ibiza pair uses 22:41:05, meaning a later lead that night, marked 'not sent' and 'sent instead', so it does not contradict Sue's transcript.
Costa Modern
Every portal lead, answered in your name.
Costa Modern: a coastal architecture-studio look in warm white, with a giant two-line "Answered / in seconds." headline and the buyer's WhatsApp phone breaking out of a terracotta block, above a sea-blue horizon sliver that is the only use of sea on the page.
“The strongest-argued of the set: a warm, confident coastal page with a very good "One Saturday in the office" timeline and "What it will never say" section, but the terracotta-block hero is quieter than it should be and the four verb rows are mostly empty space.”
Polish pass: 8 changes
- Hero stage: the terracotta .block now starts 198px into the stage, so about 40% of the 330px phone sits over it and 60% hangs off its left edge. It runs right to the viewport edge through a computed --bleed (min(0px,(max-100vw)/2) - gutter). It also drops 200px past the hero's bottom edge into the day band (bottom: -(hero padding + 200px)). The hero is position:relative with z-index 2 and the day band has z-index 1, so the block paints over the band. The day band's h2 and intro sit clear of it.
- Sea-blue .horizon now sits exactly on the seam between hero and day band and runs from the block's left edge to the viewport edge. It no longer ends at an arbitrary 1392px.
- The olive square moved to the block's new top-left corner (left 150px, top -28px). Phone top is now 72px. Tablet stage height went up to 860px so the taller phone fits.
- Mobile hero: the block covers 40% of the width to the viewport edge and crosses 56px into the day band. The horizon sits on the seam. Day band padding-top is 92px on mobile so the block never covers the h2.
- H1 tracking loosened from -.045em to -.035em, so the letters in 'Answered' no longer touch. .big61 tracking went from -.07em to -.035em, and the % now has 0 tracking plus .06em left margin, so the 1 and % no longer collide.
- Verb h3 tracking loosened from -.055em to -.04em (the letters in 'Hand off' were touching). Line-height is now .9 with a small bottom pad for descenders.
- Verbs (#how): row padding cut from clamp(40px,5vw,72px) to clamp(26px,3.2vw,46px), about 35% less. Paragraph margin went from 20px to 16px.
- Verbs: the four identical left-bordered spec cards are gone and each row has its own treatment. Re-engage shows the first message as a real WhatsApp bubble (20:31). Answer is a display-font pull quote with hanging terracotta typographic quotes and a one-line caption. Qualify is a numbered list. Hand off is a cropped sheet excerpt.
The Lead Sheet
Every portal lead, answered in your name.
The page is the paperwork. The hero is the real hand-off sheet, drawn as a ruled paper form with an acid-yellow HOT stamp in its "Office use" box. It is followed by numbered sections 01 to 06: the problem as a ledger, how each line of the sheet got filled, what it refuses to do (struck-through lines), the transcript as Appendix A with notes in the margin, the terms as readable small print, and the booking as a tear-off slip.
“The strongest idea in the set: the page is the hand-off sheet itself, with a HOT stamp you will remember. It follows the brief closely. It needs a plain "AI assistant" line in the hero, a CTA partway down, and a tidier sheet on mobile before it is ready to ship.”
Polish pass: 8 changes
- Hero .sub now uses the exact text asked for: 'An AI assistant replies on WhatsApp as your agency, asks the questions your team would, and hands the lead to a named person on one sheet. This is what they receive.' Font size went from 20px to 19px and the max-width from 34ch to 40ch, so it stays at 4 lines at 1440.
- Section 01 ledger: deleted the '0 to 3 / Months' .lg.q cell. .lg.q now spans 6 columns, so the two remaining cells split the row evenly. The £152k caption is now just 'Median listing enquired about.'
- Added a mid-page CTA (.midcta) after the .appx block in section 04: a .btn 'Book a 15-minute call' linking to #book, plus the mono note 'Fifteen minutes, with the people who build it.' It sits under a 1px ink rule and goes full-width on mobile.
- Header .strip is now position:sticky;top:0;background:var(--paper);z-index:5, so the stamp CTA stays on screen. Added [id]{scroll-margin-top:96px} (118px on mobile) so anchor jumps are not hidden under the header. The sticky .hero-copy offset went from top:24px to top:96px so it clears the header.
- Header .formno: 'Sections 01 to 06 overleaf' now reads 'Continued below: 01 to 06'. On mobile only, that second span (.fn2) is hidden so the sticky header stays about 105px tall.
- Mobile sheet: added .heat{gap:6px 10px;font-size:13px} and .f .k{letter-spacing:.04em} as asked. Those values alone still pushed 'Hot' onto its own line in a half-width cell, so fields 01 and 02 also get .wide-m and go full width under 860px (with border-right:0). The full label 'Reason for hand-off' now fits on one line, and Cold/Warm/Hot sit on one row. '14 to 21 Oct' and 'no high-rise' both use white-space:nowrap.
- Section 04: removed the empty <span class="note"> </span> from the system row. .msg.sys .body now spans 3 columns.
- Section 02: the div-based role="table" .map is now a real <table>. It has a visually hidden <caption>, <thead> with <th scope="col">, and <tbody> rows that use <th scope="row"> for the line label and <td> for the content. It uses table-layout:fixed with a 150px label column, and keeps two columns on mobile with a 92px label column. The old .map-h/.row CSS is gone.
Swiss Poster
Every portal lead, answered in your name.
Swiss poster: each panel is one huge numeral or word on a strict 12-column grid (61%, 20:00, Seconds., 18/24, AI, disclosed., No., 15 min.). Black on white with Swiss red as the only accent, for an owner who is sceptical of AI hype.
“This one would win over a sceptical owner. The 61%, 20:00, 18/24, "No." and "15 min." posters make the argument without help, the copy is clean, and every hard rule passes. The layout needs tightening: a few panels have dead white space and loose captions, which reads as unfinished rather than Swiss.”
Polish pass: 8 changes
- Voice panel (must-fix 1): the 18/24 numeral now sits in columns 1-8 at desktop (24.6vw, so it fills 8 columns). The headline and paragraph sit in columns 9-12, bottom-aligned to the numeral's baseline. New Space Mono caption on a full-width 2px rule under the numeral: 'Blind panel. Taken for a human: old voice 0/24, this voice 18/24.' The paragraph now reads 'Short messages, one question at a time, no menus. Most readers couldn't tell it from a person on your team.' (the numbers moved into the caption). The panel no longer forces 100svh on desktop (120px top, 64px bottom padding). On mobile the numeral grows to 37vw and the caption rule clears the slash's descender.
- Hero (must-fix 2): the headline now starts 80px below the kicker (align-self:start, padding 80px 0 88px, rows auto/auto/auto) instead of being centred in a 1fr row. The hero no longer forces 100svh on desktop, which removes the dead band below the headline. The kicker is widened to columns 1-4. .lede gets text-wrap:balance, so the 'it.' widow is gone ('anyone on your team touches it.' stays together).
- 'No.' panel (must-fix 3): 'That's outside our patch.' moved out of the 2-column list into a blockquote pull quote in columns 1-5, directly under 'No.': 6px red top rule, clamp(26px,2.3vw,34px) at weight 800 (renders at about 33px at 1440), curly quotes, plus the line 'What it says when a buyer names a town you don't cover. It won't pretend to know an area you don't sell in.' The list is now 6 items in 3 even rows, so no orphan cell. The pull-quote rule lines up with the list's first rule. The panel is content-height on desktop, and the intro is bottom-aligned to the numeral.
- Hero sample (must-fix 4): the hero first message now opens 'Hi Mark', so it no longer clashes with Sue's 2-bed townhouse conversation.
- 20:00 stat (must-fix 5): the body under £152k now reads 'Median listing enquired about, same sample.' To avoid repeating that phrase, the mono label above it changed from 'Median listing enquired about' to 'What they enquire about'.
- Space Mono captions (must-fix 6): .cap goes from 12px to 13px (letter-spacing .02em, colour var(--black) #0A0A0A, white only inside the red CTA panel). The chat meta (.turn .who) goes from 11px to 13px and is black. The lead-sheet labels (.row dt) go from 12px to 13px with .02em tracking, black. The form labels go to 13px with .02em tracking (white on red, 4.6:1).
- Nice-to-have: the '15 min.' numeral's full stop is now an accent glyph like the others. It is black rather than red because the panel is red, the same inversion rule the panel already uses.
- Nice-to-have: added a 'Book a 15-minute call' button (same label and intent as the others) under the hand-off sheet's aside paragraph in 'What Dan gets.'
In Hand
Your portal leads, answered while you're out.
One phone, four screens: as you scroll, a single pinned phone goes from Friday 21:47's unanswered inbox, to the first WhatsApp in the agency's name, to Sue replying, to Dan's lead sheet arriving at 22:06. The whole pitch without a feature grid.
“The strongest writing in the set so far: one phone and a clock that runs from 21:47 to 22:06 carry the whole pitch with no feature grid. It is held back by a confusing ticked "never do" list, a sticky phone strip on mobile that shows the wrong end of the chat, and a desktop layout that falls back on text left, phone right.”
Polish pass: 8 changes
- Refuse section: the ticked green boxes are now empty 26px outlined squares for the owner to tick. Added an 'It will never:' label above the list. The intro now reads 'We wrote it. You tick each line off when you've checked it, then sign.' The h3s are unchanged and now read as refusals under the label.
- Mobile sticky strip is capped at 40svh. --phone-h is now max(196px, calc(40svh - nav - 54px)), and the measured rail bottom is 334px out of 844px (40svh = 338px). Rail padding, status bar, mail header and chat header are all tighter, inbox previews are hidden on mobile, and the in-screen stagger is shortened to 140ms.
- Mobile screen 2: the .chat is explicitly display:flex, column, justify-content:flex-end, with a 14px top fade instead of 40px. The newest bubbles ('Communal pool...' and 'Noted for Dan. Would you rather he messages here or rings?') now show. Verified in viewport screenshots.
- Mobile screen 3: the Buyer, Enquired, Purpose, Must-haves, Didn't get and Couldn't answer rows and the transcript line are hidden (.m-hide). It keeps the header, the hot badge, Trip, Budget, Finance and First move, with the bottom mask removed so First move shows in full. Desktop still shows the full sheet.
- Desktop story grid is centred as specified: grid-template-columns: minmax(0,36rem) 400px; column-gap: 96px; justify-content: center. The background glow was moved to sit behind the phone column. The hero step now fills the 36rem column, and the hero title was cut to clamp(2.7rem,4.6vw,4.4rem) so it stays at 3 lines.
- #problem: 'By Monday the buyer has had a reply from someone else.' is now 'By Monday they have gone cold.' The 18-to-35-days fact moved out of the #how aside-note and became a 4th figure row ('18-35' / 'days later, buyers still answer a casual re-open. That backlog is not dead yet.'). The aside-note markup and CSS were removed. The figure column is 9rem with white-space:nowrap.
- #conversation: the inline .panel-stat is replaced with a figure list using the #problem treatment. The caption reads 'A blind panel of 24 readers. How many took it for a person:'. It shows 18/24 in coral at the 2.6rem figure size and 0/24 in muted sand (rgba(239,230,211,.55)), about 4:1 contrast on the green, which is fine for large text. The .panel-stat CSS was removed.
- .step min-height changed from 94vh to 72vh on desktop, and mobile non-hero steps from 74svh to 60svh.











