From 8c627a39790a69bbbff542df76704e61af926281 Mon Sep 17 00:00:00 2001 From: Brian Love Date: Fri, 18 Sep 2026 14:01:07 -0700 Subject: [PATCH 01/16] docs(spec): mobile above-the-fold hero rework Four defects observed at 375x812: a four-line 207px H1, a mobile poster sliced across its top edge, no autoplay below 768px, and Angular absent from both the H1 and the title. Records two corrections found while diagnosing: the mobile poster is a purpose-built 390x650 capture rather than a scaled desktop one, and its slicing is drift from the beat its recorder documents rather than the beat itself. Also resolves the messaging.md hero drift deliberately, keeping the category claim and adding the stack to it. Co-Authored-By: Claude Opus 5 --- .../2026-09-18-mobile-above-fold-design.md | 249 ++++++++++++++++++ 1 file changed, 249 insertions(+) create mode 100644 docs/superpowers/specs/2026-09-18-mobile-above-fold-design.md diff --git a/docs/superpowers/specs/2026-09-18-mobile-above-fold-design.md b/docs/superpowers/specs/2026-09-18-mobile-above-fold-design.md new file mode 100644 index 000000000..b6d37282f --- /dev/null +++ b/docs/superpowers/specs/2026-09-18-mobile-above-fold-design.md @@ -0,0 +1,249 @@ +# Mobile above-the-fold rework — homepage hero + +> Design spec. Status: approved, not yet implemented. +> Scope: `apps/website` hero at phone widths. Desktop rendering is unchanged. + +## 1. Why + +PostHog project 406826, 30 days of homepage entry sessions to 2026-09-18, median +session duration by device: + +| Browser | Device | Sessions | Median duration | +| --- | --- | --- | --- | +| Chrome | Desktop | 116 | 6.0s | +| Safari | Desktop | 51 | 275.0s | +| Mobile Safari | Mobile | 25 | 3.0s | +| Chrome | Mobile | 16 | 2.0s | + +The mobile sample is ~41 sessions over 30 days, so the numbers are directional +only. They are not the justification on their own, and this is not a bounce +emergency: homepage bounce rate has fallen from 82.5% in May to 50.7% in +September, already below the 56% Technology-sector median (see +`2026-09-18-posthog-instrumentation-fix-design.md`, "Baseline and cutover"). + +The justification is the four defects below, each observed directly in a browser +at 375x812 against production. They stand without the analytics. + +## 2. Defects, as measured + +Measured at 375x812. The hero column is 335px wide. + +1. **The H1 is four lines, 207px tall** — 25% of the fold. `--text-h1` resolves + to 48px, at which "thread-plane" alone nearly fills the 335px column. The + first span, "The open-source", wraps, breaking the word across its hyphen as + "The open-" / "source". +2. **The mobile poster is sliced across its top edge.** A tool-result table is + cut through horizontally, and its path column wraps to four lines + (`3977/acme-db-backu` / `ps/prod/2` / `025-12-3` / `1.dump.gz`). +3. **No autoplay below 768px.** `MIN_AUTOPLAY_WIDTH = 768` in `HeroDemo.tsx` + means phones get a static poster and a "Play walkthrough" button. +4. **"Angular" appears only in a small eyebrow.** It is not in the H1 and not in + ``. `docs/gtm/icp.md` puts a senior Angular engineer at 30 seconds to + recognise fit. + +### 2.1 Two corrections to the initial diagnosis + +Recorded because both changed the shape of the fix. + +**The mobile poster is purpose-built, not a scaled desktop capture.** +`HERO_POSTER_MOBILE` is a 390x650 CSS-pixel capture at `deviceScaleFactor: 2`, +shipped resized to 585x975 (1.5x). Displayed in a 335px stage it renders at +335/390 = 0.86 scale. Legibility is degraded but that is not the main fault. + +**The slicing is drift from the chosen beat, not the chosen beat.** +`record-hero-poster-mobile.record.ts` deliberately captures the *first streamed +reply*, matching the desktop poster, and its header explicitly rejects the +approval-interrupt beat twice over: at phone height the interrupt panel slices +the user's prompt bubble behind it, and a still of a live Accept / Edit / +Respond dialog invites taps that do nothing. The same header warns that the +recorded answer's opening line must fit one line at 390px "or the whole block +shifts up and the first line is sliced off the top edge. Re-check it on every +re-record." That is what has happened. The recorder's guards — `.hero__take` +visible, composer empty, no `a2ui-surface` — cannot catch it, because none of +them inspects the top edge. + +Consequence: keep the documented beat, fix the framing, and add the missing +guard. Note that the second objection to the interrupt beat dissolves once +mobile autoplays (the frame becomes live), but the first stands, so the beat +does not change. + +## 3. The measurement the design rests on + +Probed in-page at 375x812 with the real font, real column width and natural +wrapping, sweeping `font-size` against candidate wordings: + +| Wording | 48px | 40px | 36px | +| --- | --- | --- | --- | +| `The open-source thread-plane for agents.` (today) | 4L / 207px | 4L | 3L / 117px | +| `The open-source thread-plane for Angular agents.` | 5L / 259px | 4L | **3L / 117px** | +| `The open-source thread-plane for Angular.` | 4L | 4L | 3L / 117px | +| `Angular's open-source thread-plane for agents.` | 4L | 4L | 3L / 117px | + +At 36px every candidate is three lines. The H1 can therefore gain a word and +still reclaim 90px of fold — 11% of a 812px viewport. **The type size, not the +wording, is the binding constraint.** No wording change fixes defect 1 at 48px. + +## 4. Resolving the messaging drift + +`docs/gtm/messaging.md` locks a hero the site does not ship: H1 "Ship production +agent UIs in Angular." with a `Talk to our engineers` enterprise CTA fork. The +shipped hero is "The open-source thread-plane for agents." with an install +dialog. + +**Decision:** keep the shipped category claim and add the stack to it. The H1 +becomes `The open-source thread-plane for Angular agents.` — "Angular" is added +rather than traded for something, so the category claim survives intact. +`messaging.md` is updated to record this as the current hero, including the CTAs +as they actually ship. Rejected alternatives: restoring the documented H1 (drops +the category claim from the hero) and `Angular's open-source thread-plane…` +(the possessive implies an Angular-team endorsement we do not have). + +This spec is the deliberate resolution the drift required; it does not leave a +third undocumented variant behind. + +## 5. Changes + +### 5.1 Copy — `apps/website/src/lib/positioning.ts` + +Copy is single-sourced here and changed nowhere else. + +| Constant | To | +| --- | --- | +| `HERO_H1` | `The open-source thread-plane for Angular agents.` | +| `HERO_H1_LINES` | `['The open-source thread-plane', 'for Angular agents.']` | +| `HERO_EYEBROW` | `LangGraph & AG-UI` | +| `PRIMARY_TAGLINE` | `Threadplane — The open-source thread-plane for Angular agents` | + +`HERO_H1_LINES` drops from three spans to two: at 36px the first two thoughts +share a line, and a three-span break would force an unwanted early wrap. The +existing invariant — the spans join back to `HERO_H1` with single spaces — is +preserved; only the length assertion moves from 3 to 2. + +`HERO_EYEBROW` loses "Angular ·" because the H1 now carries it; repeating it +immediately above the H1 wastes the one line above the fold that is cheapest to +read. + +`PRIMARY_TAGLINE` feeds `<title>` via `layout.tsx` and the site-wide OG/Twitter +defaults. Changing it is what resolves defect 4 in metadata rather than only on +screen. `HOME_TITLE` derives from it and follows automatically. + +`HERO_SUBHEAD`, the CTA labels and `LONG_SUBHEAD` are unchanged. + +Consumers to update, all mechanical: `opengraph-image.tsx`, +`github-card/route.tsx`, `site-metadata.spec.ts`, `positioning.spec.ts`, +`Hero.spec.tsx`, `card/card.spec.ts`. + +Per `project_github_social_preview_pipeline`, the GitHub social preview has no +API and must be re-uploaded by hand after `npm run card:github`. This H1 change +alters that card, so the re-upload is part of the work, not a follow-up. + +### 5.2 Type ramp — `apps/website/src/styles/landing.css` + +Add, in the existing unlayered region (these rules must stay unlayered or +Tailwind utilities win — see the file header): + +```css +@media (max-width: 767px) { + .hero-heading { font-size: 36px; line-height: 1.08; } +} +``` + +Desktop is untouched. This is the load-bearing change: 207px → 117px. + +### 5.3 Demo autoplay — `apps/website/src/components/landing/HeroDemo.tsx` + +`MIN_AUTOPLAY_WIDTH` 768 → 0, reducing `autoplayAllowed()` to its +`prefers-reduced-motion` check. `needsClick`, the `playRequested` state and +`.hero-demo-play` all stay: they remain the path for a reduced-motion visitor at +any width. + +The 3:5 stage ratio and `HERO_POSTER_MOBILE_MEDIA` **do not move for this +change**. They are coupled to the poster's 390x650 geometry, not to autoplay, so +enabling autoplay does not disturb them. (They may still move for an unrelated +reason if the re-record in 5.4 cannot frame the beat at 390x650; that +contingency is described there.) The triple documented +in `HeroDemo.tsx` and `landing.css` therefore becomes a pair, and both comments +must be rewritten to say so — leaving them claiming a three-way coupling that no +longer exists is how the next person breaks it. + +A live iframe lays out at the stage's real width, so its type renders at its +designed size rather than the poster's 0.86. Autoplay improves legibility by +construction; it is not only a motion change. + +### 5.4 Poster re-record — `record-hero-poster-mobile.record.ts` + +Re-run the recorder against the current `public/hero-replay.json` and add the +guard the header asks for but never encodes: assert the first message block's +top edge sits **below** the stage's top edge, so a shifted block fails the +capture instead of shipping sliced. + +If the documented beat cannot be framed whole at 390x650 against the current +replay, the height budget moves; `POSTER_MOBILE_W`, `POSTER_MOBILE_H`, the +`aspect-ratio` in `landing.css` and `SHIP_WIDTH` then move together, preserving +the 3:5 ratio that makes `object-fit: cover` a no-op. + +Recording command is in the recorder's header. + +### 5.5 Tests + +- `home-hero.spec.ts` — "mobile shows Play walkthrough instead of the frame" + inverts: at 390px the iframe must now mount. The desktop test's comment about + the three-line H1 leaving the stage short of the 25% threshold is re-measured, + not merely reworded. +- **New fold guard at 375x812**, the assertion defect 1 never had. Two absolute + budgets, not comparisons against whatever currently renders: + - `.hero-heading` height **≤ 130px** (three lines at 36px/1.08 measure 117px; + 13px of headroom absorbs font-loading and metric variance). + - `.hero-demo-stage` top offset **≤ 560px** (projected ~502px after the 90px + reclaim, against an 812px fold). + + Budgeting absolutely rather than relatively is deliberate, per + `feedback_guard_coupled_to_moving_artifact`: a guard that compares against the + current render passes vacuously once the thing it guards drifts. Per + `feedback_hero_height_breaks_demo_iframe_e2e`, hero height + and the demo's intersection threshold are already known to be coupled; this + guard makes that coupling explicit rather than incidental. +- Unit specs listed in 5.1 updated for the new strings. + +## 6. Constraints honoured + +- Copy changes land in `positioning.ts` only. +- `landing.css` additions stay unlayered. +- No competitor is named in any tracked file. +- Public-copy contract (`public-copy-contract.ts` + `public-copy.spec.ts`): the + new H1 and tagline make no absolute claim and name no retired route. + +## 7. Verification + +`nx test website` and `nx lint website` do not typecheck; only +`nx build website` catches a broken production build. All three run. + +`nx test` rewrites a generated package-version file — check `git status` before +staging (`feedback_nx_test_regenerates_package_version`). + +The binding check is a real 375x812 viewport against a local production build, +not unit tests: measure the rendered H1 height, confirm three lines, confirm the +demo stage's top offset, confirm the iframe mounts, and confirm the poster is +unsliced. Evidence is a screenshot plus the measured numbers, not an assertion +that it looks fine. + +## 8. Risks + +**Mobile autoplay puts a third-party iframe on phone data and CPU.** The poster +is the LCP element. LCP is measured before and after at 375x812; a regression is +reported rather than shipped quietly, and the fallback is to restore a +`MIN_AUTOPLAY_WIDTH` floor. + +**`hero-replay.json` is load-bearing for the poster's framing.** It already was, +silently — that is defect 2. The new top-edge guard is what converts a silent +drift into a failing capture. + +**The H1 is consumed by two generated images.** `opengraph-image.tsx` and +`github-card/route.tsx` both lay out `HERO_H1_LINES`; a two-span array changes +their composition and both are checked visually, with the GitHub card +re-uploaded by hand. + +## 9. Out of scope + +Below-the-fold mobile layout, the navbar, the stage/pinned-act sequence, and the +`messaging.md` sections other than the hero and its CTAs. From e5d6a7a6c932850e9827931c8968304252657fb7 Mon Sep 17 00:00:00 2001 From: Brian Love <brian@liveloveapp.com> Date: Fri, 18 Sep 2026 14:08:46 -0700 Subject: [PATCH 02/16] docs(plan): mobile above-the-fold hero implementation plan Amends the spec with canvas-measured card line widths: HERO_H1_LINES stays three spans, re-split to absorb "Angular", because the array is also the line-breaking for two fixed-height card images. A two-span split measured 964px against a ~536px column. The phone fix is a font-size override plus flowing the spans inline, since the shared --text-h1 clamp floor of 48px is what renders at 375px. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --- .../plans/2026-09-18-mobile-above-fold.md | 696 ++++++++++++++++++ .../2026-09-18-mobile-above-fold-design.md | 58 +- 2 files changed, 746 insertions(+), 8 deletions(-) create mode 100644 docs/superpowers/plans/2026-09-18-mobile-above-fold.md diff --git a/docs/superpowers/plans/2026-09-18-mobile-above-fold.md b/docs/superpowers/plans/2026-09-18-mobile-above-fold.md new file mode 100644 index 000000000..b30844e2f --- /dev/null +++ b/docs/superpowers/plans/2026-09-18-mobile-above-fold.md @@ -0,0 +1,696 @@ +# Mobile Above-the-Fold Hero Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Make the threadplane.ai homepage hero legible and persuasive on a 375x812 phone — a three-line H1 that names Angular, a demo that autoplays and is not sliced, and Angular in the `<title>`. + +**Architecture:** Copy is single-sourced in `positioning.ts` and changed only there. The four-line H1 is fixed in CSS by overriding the shared `clamp(48px, 6vw, 72px)` token floor on `.hero-heading` and letting the line spans flow at phone width. Mobile autoplay is a one-constant change in `HeroDemo.tsx`. The sliced poster is re-recorded with a new top-edge guard in its recorder so the drift cannot recur silently. + +**Tech Stack:** Next.js (App Router) + React, Nx, Vitest (`@nx/vitest`), Playwright, Satori (`next/og`) for card images, `sharp` for poster resizing. + +**Spec:** `docs/superpowers/specs/2026-09-18-mobile-above-fold-design.md` + +--- + +## File Structure + +| File | Change | Responsibility | +| --- | --- | --- | +| `apps/website/src/lib/positioning.ts` | Modify | The only home for homepage copy | +| `apps/website/src/lib/positioning.spec.ts` | Modify | Pins the exact hero strings | +| `apps/website/src/lib/site-metadata.spec.ts` | Modify | Pins the tagline used site-wide | +| `apps/website/src/components/landing/Hero.spec.tsx` | Verify | Reads copy from positioning; should need no edit | +| `apps/website/src/app/card/card.spec.ts` | Verify | Asserts alt *contains* the tagline; should need no edit | +| `apps/website/src/styles/landing.css` | Modify | Phone type ramp + span flow | +| `apps/website/src/components/landing/HeroDemo.tsx` | Modify | Autoplay gate + coupling comments | +| `apps/website/e2e/home-hero.spec.ts` | Modify | Inverts the mobile gate test; adds the fold guard | +| `examples/chat/angular/e2e/record-hero-poster-mobile.record.ts` | Modify | Adds the top-edge guard, then re-records | +| `apps/website/public/screenshots/hero-walkthrough-poster-mobile.webp` | Regenerate | The mobile LCP still | +| `docs/gtm/messaging.md` | Modify | Records the shipped hero, resolving the drift | + +Tasks 1–7 are ordered so the suite is green at every commit. + +--- + +### Task 1: Hero copy in positioning.ts + +**Files:** +- Modify: `apps/website/src/lib/positioning.ts:5-7`, `:46` +- Test: `apps/website/src/lib/positioning.spec.ts:49-65` + +- [ ] **Step 1: Update the failing test first** + +In `apps/website/src/lib/positioning.spec.ts`, replace the first two `it` blocks +of `describe('positioning: hero copy')` with: + +```ts + it('names the exact category in eyebrow, H1, title and description', () => { + expect(HERO_EYEBROW).toBe('LangGraph & AG-UI'); + expect(HERO_H1).toBe('The open-source thread-plane for Angular agents.'); + expect(HERO_SUBHEAD).toBe( + 'Make agent work persistent, durable, visible, reviewable, and resumable.', + ); + expect(HOME_TITLE).toBe('Threadplane — The open-source thread-plane for Angular agents'); + expect(HOME_DESCRIPTION).toBe( + 'The open-source thread-plane for agents: chat, durable threads, persistence, human approvals, and generative UI for Angular, on LangGraph and AG-UI.', + ); + expect(HOME_DESCRIPTION.length).toBeLessThanOrEqual(160); + }); + + it('H1 lines join back to HERO_H1 on three lines that fit the card columns', () => { + expect(HERO_H1_LINES).toHaveLength(3); + expect(HERO_H1_LINES.join(' ')).toBe(HERO_H1); + // Pinned exactly, because this array is also the line-breaking for + // opengraph-image.tsx and github-card/route.tsx, whose H1 columns are + // ~536px and ~588px at 60px and 62px Archivo Black. Canvas-measured at 60px + // with -0.02em tracking: 538 / 513 / 507px. The cards are centred at fixed + // height, so a line that overflows collides with the pills below rather + // than pushing them down. + // + // Pinned rather than computed: character count is NOT a proxy for width + // here — 'thread-plane for' is one character longer than 'The open-source' + // and 25px narrower. Re-measure in Archivo Black before changing a line. + expect(HERO_H1_LINES).toEqual([ + 'The open-source', + 'thread-plane for', + 'Angular agents.', + ]); + }); +``` + +`HOME_DESCRIPTION` is deliberately unchanged: it already contains "Angular" and +sits within its 160-character budget. + +- [ ] **Step 2: Run the test to verify it fails** + +Run: `npx nx test website -- positioning.spec` + +Expected: FAIL, with `expected 'Angular · LangGraph & AG-UI' to be 'LangGraph & AG-UI'`. + +- [ ] **Step 3: Change the copy** + +In `apps/website/src/lib/positioning.ts`, replace lines 5–12 (`HERO_EYEBROW` +through the `HERO_H1_LINES` declaration) with: + +```ts +export const HERO_EYEBROW = 'LangGraph & AG-UI'; +export const HERO_H1 = 'The open-source thread-plane for Angular agents.'; +/** + * The H1 broken where it is meant to break: three lines, one thought each. + * HERO_H1 stays the single source of truth — positioning.spec.ts asserts the + * lines join back to it with single spaces, so the rendered heading, the + * <title> and the social card cannot drift apart. + * + * The split is load-bearing for two generated images: opengraph-image.tsx and + * github-card/route.tsx stack these as fixed lines at 60px and 62px. Measured + * in Archivo Black at 60px with -0.02em tracking: 538 / 513 / 507px against a + * ~536px column. "The open-source" is the widest and already shipped before + * "Angular" was added, so the worst case did not move. Below 767px the spans + * are flowed inline (landing.css) and the browser breaks the sentence instead. + */ +export const HERO_H1_LINES: readonly string[] = [ + 'The open-source', + 'thread-plane for', + 'Angular agents.', +]; +``` + +Then change line 46 (`PRIMARY_TAGLINE`) to: + +```ts +export const PRIMARY_TAGLINE = 'Threadplane — The open-source thread-plane for Angular agents'; +``` + +- [ ] **Step 4: Run the test to verify it passes** + +Run: `npx nx test website -- positioning.spec` + +Expected: PASS. + +- [ ] **Step 5: Fix the site-metadata spec** + +`site-metadata.spec.ts:23` and `:70` hard-code the old tagline. Change both +occurrences of: + +```ts +'Threadplane — The open-source thread-plane for agents' +``` + +to: + +```ts +'Threadplane — The open-source thread-plane for Angular agents' +``` + +Leave `expect(LONG_SUBHEAD).toContain('open-source thread-plane for agents')` +alone — `LONG_SUBHEAD` is unchanged and still contains that phrase. + +- [ ] **Step 6: Run the full website unit suite** + +Run: `npx nx test website` + +Expected: PASS. `Hero.spec.tsx` and `card/card.spec.ts` read their strings from +`positioning`, so they should pass untouched. If either fails, it hard-coded a +string — fix the hard-coding, do not revert the copy. + +- [ ] **Step 7: Check for the generated-file rewrite, then commit** + +`nx test` rewrites a generated package-version file. Check before staging: + +```bash +git status --short +``` + +If `libs/*/src/lib/package-version.ts` (or similar) appears, revert it: + +```bash +git checkout -- $(git diff --name-only -- '*package-version.ts') +``` + +Then commit only the four intended files: + +```bash +git add apps/website/src/lib/positioning.ts apps/website/src/lib/positioning.spec.ts apps/website/src/lib/site-metadata.spec.ts +git commit -m "copy(website): name Angular in the hero H1 and the title" +``` + +--- + +### Task 2: Phone type ramp + +**Files:** +- Modify: `apps/website/src/styles/landing.css` (after the `.hero-heading-line` rule, ~line 29) + +- [ ] **Step 1: Add the media query** + +Insert immediately after the existing `.hero-heading-line { display: block; }` +rule: + +```css +/* Phone width. Two coupled parts, both required: + * + * 1. font-size. --text-h1 is `clamp(48px, 6vw, 72px)` in the shared + * design-tokens theme. At 375px, 6vw is 22.5px, so the clamp FLOOR of 48px + * is what renders — at which "thread-plane" alone nearly fills the 335px + * column. The token is shared by many pages, so the override lives here on + * .hero-heading rather than in the token. + * 2. display: inline. The spans are the desktop and social-card line-breaking. + * Left as blocks at phone width they put "The open-source" on a line of its + * own, which then wraps again — that is the four-line, 207px H1 this fixes. + * Flowed, the browser breaks the sentence to the column: three lines, 117px. + * + * Measured at 375x812: 4 lines / 207px before, 3 lines / 117px after. The 90px + * reclaimed is 11% of the fold, and e2e/home-hero.spec.ts budgets it absolutely. + */ +@media (max-width: 767px) { + .hero-heading { + font-size: 36px; + line-height: 1.08; + } + .hero-heading-line { + display: inline; + } +} +``` + +These rules must stay **unlayered** like the rest of the file — see the file +header. Do not wrap them in `@layer`. + +- [ ] **Step 2: Verify in a real browser at 375x812** + +Start the dev server and measure. Do not judge by eye alone, and per +`feedback_cold_next_dev_drops_fragment_scroll`, load the route once to warm it +before measuring. + +Run: `npx nx serve website` + +Then in a browser at exactly 375x812, on `/`, evaluate: + +```js +const h = document.querySelector('.hero-heading'); +const d = document.querySelector('[data-hero-demo]'); +JSON.stringify({ + fontSize: getComputedStyle(h).fontSize, + h1Height: h.getBoundingClientRect().height, + demoTop: d.getBoundingClientRect().top + window.scrollY, +}); +``` + +Expected: `fontSize: "36px"`, `h1Height` about 117 (must be <= 130), +`demoTop` about 502 (must be <= 560). + +- [ ] **Step 3: Verify desktop did not regress** + +At 1280x800 on `/`, confirm the H1 still renders as three forced lines and no +line wraps a second time. Expected computed `font-size`: `72px`. + +- [ ] **Step 4: Commit** + +```bash +git add apps/website/src/styles/landing.css +git commit -m "fix(website): fit the hero H1 to three lines on a phone" +``` + +--- + +### Task 3: Enable mobile autoplay + +**Files:** +- Modify: `apps/website/src/components/landing/HeroDemo.tsx:22-30` +- Modify: `apps/website/src/styles/landing.css` (the `@media (max-width: 767px)` block near the `.hero-demo-stage` rules, ~line 1964) + +- [ ] **Step 1: Change the constant and its comment** + +In `HeroDemo.tsx`, replace the `MIN_AUTOPLAY_WIDTH` line and the +`HERO_POSTER_MOBILE_MEDIA` comment block (lines 22–30) with: + +```ts +/** + * 0, not 768: phones autoplay too. The poster is a capture displayed at ~0.86 + * scale, but a live iframe lays out at the stage's real width, so its type + * renders at its designed size — mobile autoplay improves legibility by + * construction, not just motion. Kept as a named constant so the floor can be + * restored if the iframe ever costs too much on a phone. + */ +const MIN_AUTOPLAY_WIDTH = 0; +/** + * Kept in lockstep with the `@media (max-width: 767px)` block in landing.css + * that gives `.hero-demo-stage` its 3:5 portrait ratio. This pair is coupled to + * the PHONE POSTER'S GEOMETRY (390x650, shipped 585x975) — the poster is served + * exactly where the stage is portrait, so `object-fit: cover` crops nothing. + * + * It used to be a triple including MIN_AUTOPLAY_WIDTH, which is no longer part + * of it: autoplay is now width-independent and this breakpoint no longer has + * anything to do with whether the iframe mounts. + */ +export const HERO_POSTER_MOBILE_MEDIA = '(max-width: 767px)'; +``` + +Leave `autoplayAllowed()` itself unchanged — with the constant at 0 the width +check is inert, and the `prefers-reduced-motion` check still governs. Leave +`needsClick`, the `playRequested` state and `.hero-demo-play` in place: they are +now the reduced-motion path at any width. + +- [ ] **Step 2: Update the matching CSS comment** + +In `landing.css`, the comment above the `@media (max-width: 767px)` block near +`.hero-demo-stage` ends with: + +``` + * The breakpoint is shared three ways and must move as one: this ratio, the + * <source media> in HeroDemo.tsx, and MIN_AUTOPLAY_WIDTH. */ +``` + +Replace those two lines with: + +``` + * The breakpoint is shared two ways and must move as one: this ratio and the + * <source media> in HeroDemo.tsx. MIN_AUTOPLAY_WIDTH is no longer part of it — + * the iframe autoplays at every width now. */ +``` + +In the same block, the `.hero-demo-play` comment says the control is shown on +"the only viewport that shows it: autoplay is off below 768px", which is now +false. Change that parenthetical to "(now the reduced-motion path only)". + +- [ ] **Step 3: Verify the iframe mounts at 375x812** + +With `npx nx serve website` running, at 375x812 on `/`, scroll the demo into +view, wait 3 seconds, then evaluate: + +```js +const d = document.querySelector('[data-hero-demo]'); +JSON.stringify({ state: d.dataset.state, iframes: d.querySelectorAll('iframe').length }); +``` + +Expected: `iframes: 1` and `state` reaching `"ready"`. The frame needs the +visibility handshake to start replaying, so confirm visually that the chat +animates rather than sitting on "How can I help?". + +- [ ] **Step 4: Measure LCP before shipping it** + +This is the spec's named risk. At 375x812, with the network throttled to Fast +3G, load `/` and record LCP: + +```js +new PerformanceObserver((l) => { + for (const e of l.getEntries()) console.log('LCP', e.startTime, e.element); +}).observe({ type: 'largest-contentful-paint', buffered: true }); +``` + +Expected: the LCP element is still the poster `<img>`, and its `startTime` has +not regressed against the same measurement taken with `MIN_AUTOPLAY_WIDTH = 768`. +If it has regressed materially, **stop and report it** — restoring the 768 floor +is the documented fallback. Do not ship a regression quietly. + +- [ ] **Step 5: Commit** + +```bash +git add apps/website/src/components/landing/HeroDemo.tsx apps/website/src/styles/landing.css +git commit -m "feat(website): autoplay the hero demo on phones" +``` + +--- + +### Task 4: E2E — invert the mobile gate and add the fold guard + +**Files:** +- Modify: `apps/website/e2e/home-hero.spec.ts:24-44` + +- [ ] **Step 1: Replace the two demo tests** + +Replace the `poster renders before the frame…` and `mobile shows Play +walkthrough…` tests with: + +```ts + test('poster renders before the frame and the frame mounts on desktop', async ({ page }) => { + await page.goto('/'); + const demo = page.locator('[data-hero-demo]'); + await expect(demo.locator('img')).toHaveAttribute('src', '/screenshots/hero-walkthrough-poster.webp'); + // The frame mounts on a 25%-visibility threshold and the hero sits above + // it, so scroll it in — this asserts the mount, not the fold position. + await demo.scrollIntoViewIfNeeded(); + await expect(demo.locator('iframe')).toHaveAttribute('src', 'https://demo.threadplane.ai/hero'); + }); + + test('the frame mounts on a phone too', async ({ page }) => { + await page.setViewportSize({ width: 390, height: 844 }); + await page.goto('/'); + const demo = page.locator('[data-hero-demo]'); + await demo.scrollIntoViewIfNeeded(); + await expect(demo.locator('iframe')).toHaveAttribute('src', 'https://demo.threadplane.ai/hero'); + }); + + test('the hero fits the fold at 375x812', async ({ page }) => { + await page.setViewportSize({ width: 375, height: 812 }); + await page.goto('/'); + // Absolute budgets, not a comparison against whatever currently renders: a + // relative guard passes vacuously once the thing it guards drifts, which is + // how the four-line H1 and the sliced poster both shipped unnoticed. + // + // Three lines at 36px/1.08 measure 117px; 130 leaves headroom for font + // loading and metric variance. The demo stage lands at ~502px against an + // 812px fold; 560 is the ceiling at which it still clearly breaks the fold. + const heading = page.locator('.hero-heading'); + await expect(heading).toBeVisible(); + const headingHeight = (await heading.boundingBox())!.height; + expect(headingHeight).toBeLessThanOrEqual(130); + + // Measure [data-hero-demo], the same element the 502px projection was taken + // from. .hero-demo-stage sits ~44px lower inside the BrowserFrame chrome, + // so budgeting it at 560 would be a much tighter guard than intended. + const demo = page.locator('[data-hero-demo]'); + const demoTop = (await demo.boundingBox())!.y; + expect(demoTop).toBeLessThanOrEqual(560); + }); +``` + +- [ ] **Step 2: Run the hero e2e suite** + +Run: `npx nx e2e website -- home-hero` + +Expected: all four tests PASS. + +Per `feedback_examples_chat_e2e_orphan_servers`, if the run behaves as though it +is serving old code, kill orphaned dev servers first: + +```bash +pkill -f "next.*4308" || true +``` + +- [ ] **Step 3: Prove the fold guard is not vacuous** + +A guard that passes before the fix is worthless. Temporarily revert Task 2 by +commenting out the `font-size: 36px` line in `landing.css`, then run: + +Run: `npx nx e2e website -- home-hero` + +Expected: `the hero fits the fold at 375x812` FAILS with `headingHeight` about +207, exceeding 130. Restore the line and re-run to confirm PASS. + +- [ ] **Step 4: Commit** + +```bash +git add apps/website/e2e/home-hero.spec.ts +git commit -m "test(website): budget the hero fold at 375x812 and assert phone autoplay" +``` + +--- + +### Task 5: Guard the poster's top edge, then re-record + +**Files:** +- Modify: `examples/chat/angular/e2e/record-hero-poster-mobile.record.ts:60-77` +- Regenerate: `apps/website/public/screenshots/hero-walkthrough-poster-mobile.webp` + +The recorder's header already documents that the recorded answer's opening line +must fit one line at 390px "or the whole block shifts up and the first line is +sliced off the top edge." Nothing enforces it. That is why the shipped poster +slices a tool-result table across its top edge. + +- [ ] **Step 1: Add the top-edge assertion** + +In the test body, immediately after the existing +`await expect(page.locator('a2ui-surface')).toHaveCount(0);` line, add: + +```ts + // The guard the header asks for and never encoded. The beat is only correct + // if the conversation block starts BELOW the top edge; when the recorded + // answer's opening line wraps at 390px the whole block shifts up and the + // first element is sliced, which every assertion above still passes. + // The ANSWER, not the first message: the user's prompt above it may legitimately + // scroll out of frame, but the header's whole height budget is that the answer + // "fits from its first line". `chat-message` is the element selector exported by + // libs/chat (primitives/chat-message/chat-message.component.ts). + const answer = page.locator('[data-hero-surface] chat-message').last(); + await expect(answer).toBeVisible(); + const box = await answer.boundingBox(); + if (!box) throw new Error('answer block has no box'); + if (box.y < 0) { + throw new Error( + `the answer is sliced by the top edge (y=${box.y}). Its opening line no ` + + `longer fits one line at 390px, so the block has shifted up — re-check ` + + `the height budget in this file's header against public/hero-replay.json.`, + ); + } +``` + +Before trusting this, run the recorder once and confirm from the DOM that the +last `chat-message` is the answer the header describes, not a later element. If +the selector is wrong, fix the selector — do not weaken the assertion to make it +pass. + +- [ ] **Step 2: Run the recorder** + +Run: + +```bash +npx playwright test --config examples/chat/angular/e2e/record-hero.config.ts record-hero-poster-mobile +``` + +Expected: PASS, printing `wrote .../hero-walkthrough-poster-mobile.webp`. + +If it fails on the new guard, the height budget genuinely no longer holds. Per +the spec, raise the capture height until the beat frames whole, then move +`POSTER_MOBILE_W`/`POSTER_MOBILE_H` in `HeroDemo.tsx`, `SHIP_WIDTH` here, and +the `aspect-ratio` in `landing.css` together, preserving the 3:5 ratio that +makes `object-fit: cover` a no-op. Per the header, runs drift by up to a second, +so re-run once before retuning any timing. + +- [ ] **Step 3: Inspect the regenerated poster** + +Open `apps/website/public/screenshots/hero-walkthrough-poster-mobile.webp` and +confirm by eye: nothing is sliced at the top edge, and no line of prose wraps to +four lines. This is a judgement the assertion cannot make. + +- [ ] **Step 4: Commit** + +```bash +git add examples/chat/angular/e2e/record-hero-poster-mobile.record.ts apps/website/public/screenshots/hero-walkthrough-poster-mobile.webp +git commit -m "fix(website): re-record the mobile hero poster and guard its top edge" +``` + +--- + +### Task 6: Regenerate the card images + +**Files:** +- Verify: `apps/website/src/app/opengraph-image.tsx` +- Verify: `apps/website/src/app/github-card/route.tsx` + +Neither file needs a code change — both map `HERO_H1_LINES`, which stays +length-3. This task is verification plus the manual upload. + +- [ ] **Step 1: Render both cards and check for overflow** + +With `npx nx serve website` running, open in a browser: + +- `http://localhost:3000/opengraph-image` +- `http://localhost:3000/github-card` + +Expected on both: the H1 renders as three lines, and neither the subhead nor the +pills below it are overlapped. The measurement in the spec predicts no change to +the vertical rhythm — confirm that is what you see. + +- [ ] **Step 2: Regenerate the GitHub social preview** + +Run: `npm run card:github` + +- [ ] **Step 3: Flag the manual upload** + +GitHub's social preview has no API (`project_github_social_preview_pipeline`). +The generated card must be uploaded by hand at +`https://github.com/cacheplane/threadplane/settings`. Note this explicitly in +the PR description as a required manual step — it cannot be automated and will +otherwise be forgotten. + +- [ ] **Step 4: Commit any regenerated asset** + +```bash +git status --short +git add -A apps/website/public +git commit -m "chore(website): regenerate social cards for the new H1" +``` + +If `git status` shows nothing, skip the commit — the cards are rendered on +demand and there may be no checked-in artifact. + +--- + +### Task 7: Resolve the messaging.md drift + +**Files:** +- Modify: `docs/gtm/messaging.md:9-21` + +- [ ] **Step 1: Replace the stale hero section** + +Replace the `## Hero (locked for Spec 2 to implement)` section, through the +"Subline under proof row" line, with: + +```markdown +## Hero (as shipped) + +**H1:** The open-source thread-plane for Angular agents. + +**Eyebrow:** `LangGraph & AG-UI` + +**Subhead:** Make agent work persistent, durable, visible, reviewable, and resumable. (Each capability links to its documentation.) + +**Primary CTA:** `Install Threadplane` — opens the install dialog, which carries +the per-runtime commands. Fires `marketing:cta_click` with +`cta_id=hero_install_open`, `track=developer`. + +**Secondary CTA:** `See it running in the docs →` — routes to +`/docs/chat/guides/generative-ui?mode=run`, fires `marketing:cta_click` with +`cta_id=hero_live_demo`, `track=developer`. + +**Trust line:** `MIT · Angular <range> · no account, no cloud` (the range is +generated from the supported majors, not typed). + +> Copy is single-sourced in `apps/website/src/lib/positioning.ts`. Change it +> there; this section records what ships, and is not itself the source. +> +> This replaces an earlier locked hero — H1 "Ship production agent UIs in +> Angular." with a `Talk to our engineers` enterprise CTA fork — which the site +> had drifted away from. The drift was resolved deliberately in +> `docs/superpowers/specs/2026-09-18-mobile-above-fold-design.md` §4: keep the +> category claim and add the stack to it. +``` + +- [ ] **Step 2: Commit** + +```bash +git add docs/gtm/messaging.md +git commit -m "docs(gtm): record the shipped hero and retire the drifted one" +``` + +--- + +### Task 8: Full verification + +- [ ] **Step 1: Build — the only typecheck** + +`nx test` and `nx lint` do **not** typecheck this app. Only the build catches a +broken production build. + +Run: `npx nx build website` + +Expected: succeeds. + +Per `feedback_next_dev_dir_breaks_prod_build`, if this fails with a Turbopack +root panic, remove the stale dev directory and retry: + +```bash +rm -rf apps/website/.next/dev && npx nx build website +``` + +- [ ] **Step 2: Unit and lint** + +Run: `npx nx test website && npx nx lint website` + +Expected: both PASS. Per `feedback_ci_lint_errors_vs_warnings_apidocs`, lint +warnings are acceptable; errors are not. + +- [ ] **Step 3: Full website e2e, including the public-copy gate** + +The public-copy contract gate runs in production mode only: + +```bash +npx nx build website +WEBSITE_E2E_MODE=production npx nx e2e website +``` + +Expected: PASS, including `public-copy.spec.ts`. The new H1 and tagline make no +absolute claim and name no retired route, so this should be clean. + +- [ ] **Step 4: Final browser verification at 375x812** + +Against the production build, not `next dev`: + +```bash +npx nx build website && npx nx serve website --configuration=production +``` + +At exactly 375x812 on `/`, capture evidence: + +```js +const h = document.querySelector('.hero-heading'); +const d = document.querySelector('[data-hero-demo]'); +JSON.stringify({ + h1Text: h.textContent, + h1Height: h.getBoundingClientRect().height, + h1Lines: Math.round(h.getBoundingClientRect().height / parseFloat(getComputedStyle(h).lineHeight)), + demoTop: d.getBoundingClientRect().top + window.scrollY, + demoState: d.dataset.state, + title: document.title, +}); +``` + +Expected: `h1Lines: 3`, `h1Height <= 130`, `demoTop <= 560`, `demoState` reaching +`"ready"`, and `title` containing "Angular". Take a screenshot as evidence. + +- [ ] **Step 5: Check for generated-file drift and push** + +```bash +git status --short +``` + +Revert any `package-version.ts` rewrite, then push the branch and open a PR. The +PR description **must** name the manual GitHub social-preview upload from Task 6 +Step 3 as an outstanding action. + +--- + +## Notes for the implementer + +- **Copy lives in one place.** If you find yourself editing a hero string in a + component, a spec, or a card renderer, you are in the wrong file. The only + exception is a test that pins the exact expected string. +- **Do not weaken a guard to make it pass.** The two defects this plan fixes both + shipped past a green suite. If the new top-edge guard or the fold budget fails, + that is the guard working. +- **Verify end state, not exit code** (`feedback_verify_end_state_not_exit_code`). + A passing recorder is not proof the poster looks right — Task 5 Step 3 exists + for that reason. +- **Stay in one checkout.** This is a worktree; do not `cd` to the primary + repository. diff --git a/docs/superpowers/specs/2026-09-18-mobile-above-fold-design.md b/docs/superpowers/specs/2026-09-18-mobile-above-fold-design.md index b6d37282f..e4b075f68 100644 --- a/docs/superpowers/specs/2026-09-18-mobile-above-fold-design.md +++ b/docs/superpowers/specs/2026-09-18-mobile-above-fold-design.md @@ -110,14 +110,33 @@ Copy is single-sourced here and changed nowhere else. | Constant | To | | --- | --- | | `HERO_H1` | `The open-source thread-plane for Angular agents.` | -| `HERO_H1_LINES` | `['The open-source thread-plane', 'for Angular agents.']` | +| `HERO_H1_LINES` | `['The open-source', 'thread-plane for', 'Angular agents.']` | | `HERO_EYEBROW` | `LangGraph & AG-UI` | | `PRIMARY_TAGLINE` | `Threadplane — The open-source thread-plane for Angular agents` | -`HERO_H1_LINES` drops from three spans to two: at 36px the first two thoughts -share a line, and a three-span break would force an unwanted early wrap. The -existing invariant — the spans join back to `HERO_H1` with single spaces — is -preserved; only the length assertion moves from 3 to 2. +`HERO_H1_LINES` **stays three spans**, re-split to absorb the new word. This was +measured rather than assumed, because the array is also the line-breaking for +two generated card images. Canvas-measured widths in Archivo Black at the OG +card's 60px, with its -0.02em tracking: + +| Line | Width @60px | Width @62px (GitHub card) | +| --- | --- | --- | +| `The open-source` | 538px | 556px | +| `thread-plane for` | 513px | 530px | +| `Angular agents.` | 507px | 524px | + +The OG card's H1 column is ~536px wide and the GitHub card's ~588px. The widest +new line, `The open-source`, is a line that **already ships today** — so the +worst case is unchanged, the line count is unchanged, and neither card's +vertical rhythm moves. + +A two-span split was considered first and rejected on this measurement: +`The open-source thread-plane` is 964px at 60px, nearly double the OG card's +column, and the cards are centred at fixed height, so overflow collides with the +pills below rather than pushing them down. + +The invariant that the spans join back to `HERO_H1` with single spaces is +preserved, and `toHaveLength(3)` in `positioning.spec.ts` stays 3. `HERO_EYEBROW` loses "Angular ·" because the H1 now carries it; repeating it immediately above the H1 wastes the one line above the fold that is cheapest to @@ -145,11 +164,33 @@ Tailwind utilities win — see the file header): ```css @media (max-width: 767px) { .hero-heading { font-size: 36px; line-height: 1.08; } + /* Let the H1 wrap to the column instead of breaking where the desktop + composition wants. The spans are the desktop and card line-breaking; at + phone width they would force "The open-source" onto a line of its own, + which then wraps again — the four-line H1. */ + .hero-heading-line { display: inline; } } ``` Desktop is untouched. This is the load-bearing change: 207px → 117px. +Two coupled parts, and both are needed: + +- **36px.** `--text-h1` is `clamp(48px, 6vw, 72px)` in + `libs/design-tokens/src/lib/theme.css`. At 375px, 6vw is 22.5px, so the + **clamp floor** of 48px is what actually renders. The token is shared by many + pages, so the override belongs on `.hero-heading` in the website's + `landing.css`, not in the token. +- **`display: inline`.** `.hero-heading-line { display: block }` is what forces + the four lines: span 1 is given its own line and then wraps. Flowing the + spans at phone width lets the browser break the sentence to fit, which is + what produces three lines at 36px. + +Checked across the clamp's range so the desktop composition cannot regress: the +widest line scales as ~8.97 x font-size, which fits the container at 768px +(430px needed / ~728px available), at 1000px (538 / ~960) and at 1200px+ +(646 / 1200). + ### 5.3 Demo autoplay — `apps/website/src/components/landing/HeroDemo.tsx` `MIN_AUTOPLAY_WIDTH` 768 → 0, reducing `autoplayAllowed()` to its @@ -239,9 +280,10 @@ silently — that is defect 2. The new top-edge guard is what converts a silent drift into a failing capture. **The H1 is consumed by two generated images.** `opengraph-image.tsx` and -`github-card/route.tsx` both lay out `HERO_H1_LINES`; a two-span array changes -their composition and both are checked visually, with the GitHub card -re-uploaded by hand. +`github-card/route.tsx` both lay out `HERO_H1_LINES`. The re-split in 5.1 was +measured to keep three lines with an unchanged worst-case width, so this risk is +retired by construction rather than by inspection — but both cards are still +checked visually, and the GitHub card is re-uploaded by hand. ## 9. Out of scope From 1d6bc67bb2491882b152a6c4ba4bcfc486f6be48 Mon Sep 17 00:00:00 2001 From: Brian Love <brian@liveloveapp.com> Date: Fri, 18 Sep 2026 14:19:49 -0700 Subject: [PATCH 03/16] copy(website): name Angular in the hero H1 and the title Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --- apps/website/e2e/website.spec.ts | 10 ++++++---- apps/website/src/lib/positioning.spec.ts | 23 ++++++++++++++++++---- apps/website/src/lib/positioning.ts | 21 ++++++++++++++++---- apps/website/src/lib/site-metadata.spec.ts | 6 +++--- apps/website/src/lib/site-metadata.ts | 2 +- 5 files changed, 46 insertions(+), 16 deletions(-) diff --git a/apps/website/e2e/website.spec.ts b/apps/website/e2e/website.spec.ts index 5bd65110c..e85e8514f 100644 --- a/apps/website/e2e/website.spec.ts +++ b/apps/website/e2e/website.spec.ts @@ -26,10 +26,12 @@ async function expectNoHorizontalOverflow( test('landing page renders hero headline', async ({ page }) => { await page.goto('/'); await expect(page.locator('#hero-heading')).toBeVisible(); - await expect(page.locator('#hero-heading')).toHaveText('The open-source thread-plane for agents.'); - // The tagline stopped naming Angular on 2026-09-06, so the guard that the - // hero says which framework this is moved to the eyebrow directly above it. - await expect(page.locator('.hero-eyebrow')).toContainText('Angular'); + // This also carries the guard that the hero names the framework. That guard + // used to live on .hero-eyebrow, because the H1 was framework-neutral; the H1 + // names Angular itself now, so the eyebrow no longer repeats it. Asserting + // "Angular" separately here would be green by construction — the literal + // above already contains it — so the full-text pin is the whole check. + await expect(page.locator('#hero-heading')).toHaveText('The open-source thread-plane for Angular agents.'); }); test('the default social card renders as a PNG', async ({ request }) => { diff --git a/apps/website/src/lib/positioning.spec.ts b/apps/website/src/lib/positioning.spec.ts index a99365598..814961bcf 100644 --- a/apps/website/src/lib/positioning.spec.ts +++ b/apps/website/src/lib/positioning.spec.ts @@ -47,21 +47,36 @@ function parses(code: string): boolean { describe('positioning: hero copy', () => { it('names the exact category in eyebrow, H1, title and description', () => { - expect(HERO_EYEBROW).toBe('Angular · LangGraph & AG-UI'); - expect(HERO_H1).toBe('The open-source thread-plane for agents.'); + expect(HERO_EYEBROW).toBe('LangGraph & AG-UI'); + expect(HERO_H1).toBe('The open-source thread-plane for Angular agents.'); expect(HERO_SUBHEAD).toBe( 'Make agent work persistent, durable, visible, reviewable, and resumable.', ); - expect(HOME_TITLE).toBe('Threadplane — The open-source thread-plane for agents'); + expect(HOME_TITLE).toBe('Threadplane — The open-source thread-plane for Angular agents'); expect(HOME_DESCRIPTION).toBe( 'The open-source thread-plane for agents: chat, durable threads, persistence, human approvals, and generative UI for Angular, on LangGraph and AG-UI.', ); expect(HOME_DESCRIPTION.length).toBeLessThanOrEqual(160); }); - it('H1 lines join back to HERO_H1 on three lines', () => { + it('H1 lines join back to HERO_H1 on the three lines the cards are laid out for', () => { expect(HERO_H1_LINES).toHaveLength(3); expect(HERO_H1_LINES.join(' ')).toBe(HERO_H1); + // Pinned exactly, because this array is also the line-breaking for + // opengraph-image.tsx and github-card/route.tsx, whose H1 columns are + // ~536px and ~588px at 60px and 62px Archivo Black. Canvas-measured at 60px + // with -0.02em tracking: 538 / 513 / 507px. The cards are centred at fixed + // height, so a line that overflows collides with the pills below rather + // than pushing them down. + // + // Pinned rather than computed: character count is NOT a proxy for width + // here — 'thread-plane for' is one character longer than 'The open-source' + // and 25px narrower. Re-measure in Archivo Black before changing a line. + expect(HERO_H1_LINES).toEqual([ + 'The open-source', + 'thread-plane for', + 'Angular agents.', + ]); }); it('subhead segments preserve the copy and link each capability to its docs', () => { diff --git a/apps/website/src/lib/positioning.ts b/apps/website/src/lib/positioning.ts index dde31e6d5..4ed8d0624 100644 --- a/apps/website/src/lib/positioning.ts +++ b/apps/website/src/lib/positioning.ts @@ -2,15 +2,28 @@ import { WEBSITE_SUPPORTED_ANGULAR_MAJORS } from '../components/pricing/angular-support.mjs'; import type { StageBeat } from './stage-beats'; -export const HERO_EYEBROW = 'Angular · LangGraph & AG-UI'; -export const HERO_H1 = 'The open-source thread-plane for agents.'; +export const HERO_EYEBROW = 'LangGraph & AG-UI'; +export const HERO_H1 = 'The open-source thread-plane for Angular agents.'; /** * The H1 broken where it is meant to break: three lines, one thought each. * HERO_H1 stays the single source of truth — positioning.spec.ts asserts the * lines join back to it with single spaces, so the rendered heading, the * <title> and the social card cannot drift apart. + * + * The split is load-bearing for two generated images: opengraph-image.tsx and + * github-card/route.tsx stack these as fixed lines at 60px and 62px. Measured + * in Archivo Black at 60px with -0.02em tracking: 538 / 513 / 507px against a + * ~536px column. "The open-source" is the widest and already shipped before + * "Angular" was added, so the worst case did not move. Below 767px Task 2 + * flows the spans inline (landing.css) so the browser breaks the sentence to + * the column instead; until it lands, this commit makes the phone H1 + * temporarily taller. */ -export const HERO_H1_LINES: readonly string[] = ['The open-source', 'thread-plane', 'for agents.']; +export const HERO_H1_LINES: readonly string[] = [ + 'The open-source', + 'thread-plane for', + 'Angular agents.', +]; export const HERO_SUBHEAD = 'Make agent work persistent, durable, visible, reviewable, and resumable.'; @@ -43,7 +56,7 @@ export const HERO_SECONDARY_LABEL = 'See it running in the docs →'; export const HERO_SECONDARY_HREF = '/docs/chat/guides/generative-ui?mode=run'; /** Kept for layout.tsx default title and the OG image alt. */ -export const PRIMARY_TAGLINE = 'Threadplane — The open-source thread-plane for agents'; +export const PRIMARY_TAGLINE = 'Threadplane — The open-source thread-plane for Angular agents'; export const HOME_TITLE = PRIMARY_TAGLINE; export const HOME_DESCRIPTION = 'The open-source thread-plane for agents: chat, durable threads, persistence, human approvals, and generative UI for Angular, on LangGraph and AG-UI.'; diff --git a/apps/website/src/lib/site-metadata.spec.ts b/apps/website/src/lib/site-metadata.spec.ts index b53ad18b9..1dd6b88e0 100644 --- a/apps/website/src/lib/site-metadata.spec.ts +++ b/apps/website/src/lib/site-metadata.spec.ts @@ -20,7 +20,7 @@ import { resolveWebsiteDir } from './website-dir'; describe('site positioning copy', () => { it('exports the approved primary tagline and supporting copy', () => { - expect(PRIMARY_TAGLINE).toBe('Threadplane — The open-source thread-plane for agents'); + expect(PRIMARY_TAGLINE).toBe('Threadplane — The open-source thread-plane for Angular agents'); expect(LONG_SUBHEAD).toContain('open-source thread-plane for agents'); expect(LONG_SUBHEAD).toContain('LangGraph and AG-UI'); expect(HERO_SUBHEAD).toBe( @@ -67,7 +67,7 @@ describe('site positioning copy', () => { type: 'website', }); - expect(metadata.title).toBe('Threadplane — The open-source thread-plane for agents'); + expect(metadata.title).toBe('Threadplane — The open-source thread-plane for Angular agents'); expect(metadata.description).toBe(HOME_DESCRIPTION); }); }); @@ -144,7 +144,7 @@ describe('createPageMetadata article fields', () => { expect(openGraph.images[0].url).toBe('/opengraph-image'); expect(openGraph.images[0].width).toBe(1200); expect(openGraph.images[0].height).toBe(630); - expect(openGraph.images[0].alt).toMatch(/open-source thread-plane for agents/); + expect(openGraph.images[0].alt).toMatch(/open-source thread-plane for Angular agents/); }); it('accepts a page-specific social image', () => { diff --git a/apps/website/src/lib/site-metadata.ts b/apps/website/src/lib/site-metadata.ts index 59d021814..c7e48a507 100644 --- a/apps/website/src/lib/site-metadata.ts +++ b/apps/website/src/lib/site-metadata.ts @@ -28,7 +28,7 @@ export const DEFAULT_SOCIAL_IMAGE_META = { url: DEFAULT_SOCIAL_IMAGE, width: 1200, height: 630, - alt: 'Threadplane — the open-source thread-plane for agents. Beside the tagline, a browser frame shows the product pausing for a human: an agent proposes deleting three backups, with Approve and Decline.', + alt: 'Threadplane — the open-source thread-plane for Angular agents. Beside the tagline, a browser frame shows the product pausing for a human: an agent proposes deleting three backups, with Approve and Decline.', } as const; export { CODING_AGENT_PROMPT, From d724d91c9a27e0070695c9ecbeb8f3c1b189d0ce Mon Sep 17 00:00:00 2001 From: Brian Love <brian@liveloveapp.com> Date: Fri, 18 Sep 2026 14:36:27 -0700 Subject: [PATCH 04/16] docs(plan): scope the files the Task 1 review found missing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit website.spec.ts hard-coded the H1 and guarded "Angular" on the eyebrow — the assertion this work inverts — and site-metadata.ts hand-duplicates the tagline in the site-wide OG alt. Neither was enumerated. Also folds the card eyebrow duplication into Task 6, gtm.md and README into Task 7, and records that nx build website needs GROWTH_FORM_POLICY=growth_v1. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --- .../plans/2026-09-18-mobile-above-fold.md | 54 +++++++++++++++++-- 1 file changed, 49 insertions(+), 5 deletions(-) diff --git a/docs/superpowers/plans/2026-09-18-mobile-above-fold.md b/docs/superpowers/plans/2026-09-18-mobile-above-fold.md index b30844e2f..cf4ece497 100644 --- a/docs/superpowers/plans/2026-09-18-mobile-above-fold.md +++ b/docs/superpowers/plans/2026-09-18-mobile-above-fold.md @@ -26,7 +26,11 @@ | `apps/website/e2e/home-hero.spec.ts` | Modify | Inverts the mobile gate test; adds the fold guard | | `examples/chat/angular/e2e/record-hero-poster-mobile.record.ts` | Modify | Adds the top-edge guard, then re-records | | `apps/website/public/screenshots/hero-walkthrough-poster-mobile.webp` | Regenerate | The mobile LCP still | -| `docs/gtm/messaging.md` | Modify | Records the shipped hero, resolving the drift | +| `apps/website/e2e/website.spec.ts` | Modify | Hard-codes the H1 and guards "Angular" on the eyebrow | +| `apps/website/src/lib/site-metadata.ts` | Modify | Hand-duplicated tagline in the site-wide OG alt | +| `apps/website/src/app/opengraph-image.tsx` | Modify | Card eyebrow, now duplicating the H1 | +| `apps/website/src/app/github-card/route.tsx` | Modify | Card eyebrow, now duplicating the H1 | +| `docs/gtm/messaging.md`, `gtm.md`, `README.md` | Modify | Record the shipped hero, resolving the drift | Tasks 1–7 are ordered so the suite is green at every commit. @@ -532,6 +536,24 @@ Expected on both: the H1 renders as three lines, and neither the subhead nor the pills below it are overlapped. The measurement in the spec predicts no change to the vertical rhythm — confirm that is what you see. +- [ ] **Step 1b: Drop the now-duplicated eyebrow from both cards** + +Both renderers hard-code `const EYEBROW = 'OPEN SOURCE · ANGULAR'` — +`opengraph-image.tsx:31` and `github-card/route.tsx:35` — rendered immediately +above an H1 that now reads "…for **Angular** agents." This is exactly the +redundancy that justified stripping "Angular ·" from `HERO_EYEBROW` in Task 1 +(spec §5.1), and the rationale carries over verbatim. + +Change both to: + +```tsx +const EYEBROW = 'OPEN SOURCE'; +``` + +Re-render both cards afterwards and confirm the rail still reads well at its +reduced length. (Found by the Task 1 code-quality review; not in the original +spec.) + - [ ] **Step 2: Regenerate the GitHub social preview** Run: `npm run card:github` @@ -597,10 +619,26 @@ generated from the supported majors, not typed). > category claim and add the stack to it. ``` +- [ ] **Step 1b: Update the other two places that state the tagline** + +The Task 1 code-quality review found the plan had under-scoped this. Two more +tracked files assert the old tagline as fact: + +- `gtm.md:15` — `- **Tagline (2026-09-06):** "The open-source thread-plane for agents."` + This file presents itself as the authority on the tagline, so leaving it is + worse than leaving `messaging.md` was. Update the tagline to + `"The open-source thread-plane for Angular agents."` and change the date + marker to `(2026-09-18)`. Leave the description sentence that follows it + alone — it matches `HOME_DESCRIPTION`, which this work deliberately did not + change. +- `README.md:4` (the logo `alt`), `:10` (the `<em>` tagline) and `:36` (the bold + opening claim) — update all three to "for Angular agents", preserving each + one's existing capitalisation and punctuation. + - [ ] **Step 2: Commit** ```bash -git add docs/gtm/messaging.md +git add docs/gtm/messaging.md gtm.md README.md git commit -m "docs(gtm): record the shipped hero and retire the drifted one" ``` @@ -613,10 +651,16 @@ git commit -m "docs(gtm): record the shipped hero and retire the drifted one" `nx test` and `nx lint` do **not** typecheck this app. Only the build catches a broken production build. -Run: `npx nx build website` +Run: `GROWTH_FORM_POLICY=growth_v1 npx nx build website` Expected: succeeds. +**The env var is required.** Without it the build fails during export with +`Error: GROWTH_FORM_POLICY must be growth_v1` from +`apps/website/src/lib/growth/form-policy.ts`. This is a pre-existing environment +gate, unrelated to this work — but a bare `npx nx build website` in a fresh +worktree looks like this change broke the build when it did not. + Per `feedback_next_dev_dir_breaks_prod_build`, if this fails with a Turbopack root panic, remove the stale dev directory and retry: @@ -636,7 +680,7 @@ warnings are acceptable; errors are not. The public-copy contract gate runs in production mode only: ```bash -npx nx build website +GROWTH_FORM_POLICY=growth_v1 npx nx build website WEBSITE_E2E_MODE=production npx nx e2e website ``` @@ -648,7 +692,7 @@ absolute claim and name no retired route, so this should be clean. Against the production build, not `next dev`: ```bash -npx nx build website && npx nx serve website --configuration=production +GROWTH_FORM_POLICY=growth_v1 npx nx build website && npx nx serve website --configuration=production ``` At exactly 375x812 on `/`, capture evidence: From 8c5b4cec1ad20fa7a22dbdc21d4dce58a1c04e7b Mon Sep 17 00:00:00 2001 From: Brian Love <brian@liveloveapp.com> Date: Fri, 18 Sep 2026 14:39:14 -0700 Subject: [PATCH 05/16] fix(website): fit the hero H1 to three lines on a phone Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --- apps/website/src/styles/landing.css | 35 +++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/apps/website/src/styles/landing.css b/apps/website/src/styles/landing.css index 32f62d2ca..915746b9c 100644 --- a/apps/website/src/styles/landing.css +++ b/apps/website/src/styles/landing.css @@ -27,6 +27,41 @@ .hero-heading-line { display: block; } +/* Phone width. Two coupled parts, both required: + * + * 1. font-size. --text-h1 is `clamp(48px, 6vw, 72px)` in the shared + * design-tokens theme. At 375px, 6vw is 22.5px, so the clamp FLOOR of 48px + * is what renders — at which "thread-plane" alone nearly fills the 335px + * column. The token is shared by many pages, so the override lives here on + * .hero-heading rather than in the token. + * 2. display: inline. The spans are the desktop and social-card line-breaking. + * Left as blocks at phone width each one is given a line and then wraps + * again. Flowed, the browser breaks the sentence to the column instead. + * + * Measured at 375x812, against two different baselines — both are real, so be + * precise about which one you mean: + * - What production shipped, with the shorter pre-Angular H1 and blocks: + * 4 lines, 207px. + * - What the current H1 would be with blocks and no font-size override: + * 6 lines, 311px — all three spans wrap, not just the first. + * - What this rule produces: 3 lines, 117px. + * So this reclaims ~194px (~24% of an 812px fold) against the copy that now + * ships. e2e/home-hero.spec.ts budgets it absolutely once Task 4 lands. + * + * line-height is pinned rather than inherited on purpose: font-size no longer + * comes from --text-h1 here, so leaving the ratio on --text-h1--line-height + * would couple this block to a token it otherwise ignores. It resolves to the + * same 1.08 today. + */ +@media (max-width: 767px) { + .hero-heading { + font-size: 36px; + line-height: 1.08; + } + .hero-heading-line { + display: inline; + } +} .hero-subhead { font-family: var(--font-sans); font-size: var(--text-body-lg); From f5f2876890ccf3c7132748a1c6fe469890ac6cbd Mon Sep 17 00:00:00 2001 From: Brian Love <brian@liveloveapp.com> Date: Fri, 18 Sep 2026 14:47:58 -0700 Subject: [PATCH 06/16] feat(website): autoplay the hero demo on phones MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The phone poster is a 390x650 capture displayed in a ~335px stage — about 0.86 scale, so its type is degraded. A live iframe lays out at the stage's real width, so its type renders at its designed size. Dropping the 768px autoplay floor to 0 improves legibility by construction, not just motion. The `@media (max-width: 767px)` breakpoint is now a TWO-way coupling — the 3:5 stage ratio and the <source media> — both tied to the poster's geometry. MIN_AUTOPLAY_WIDTH is no longer part of it; both comments say so. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --- .../src/components/landing/HeroDemo.spec.tsx | 34 +++++++++++++++++-- .../src/components/landing/HeroDemo.tsx | 21 +++++++++--- apps/website/src/styles/landing.css | 16 +++++---- .../src/styles/style-contracts.spec.ts | 2 +- 4 files changed, 58 insertions(+), 15 deletions(-) diff --git a/apps/website/src/components/landing/HeroDemo.spec.tsx b/apps/website/src/components/landing/HeroDemo.spec.tsx index 422b6392b..b1c53eafe 100644 --- a/apps/website/src/components/landing/HeroDemo.spec.tsx +++ b/apps/website/src/components/landing/HeroDemo.spec.tsx @@ -84,7 +84,11 @@ describe('HeroDemo', () => { * markup, the <source> has to precede the <img> (a <picture> takes the FIRST * matching source, and an <img> that came first would win every time), and * the media query has to stay on the same 768px boundary as the stage's - * portrait ratio in landing.css and as MIN_AUTOPLAY_WIDTH. + * portrait ratio in landing.css. Those two are the whole coupling, and both + * are tied to the phone poster's 390x650 geometry: the poster is served + * exactly where the stage is portrait, so `object-fit: cover` crops nothing. + * MIN_AUTOPLAY_WIDTH used to be a third leg and is not one any more — + * autoplay is width-independent and this boundary says nothing about it. */ it('offers a phone-width poster source ahead of the desktop img', async () => { installEnv(); @@ -286,8 +290,14 @@ describe('HeroDemo', () => { expect(post).toHaveBeenCalledWith({ type: 'tplane-hero', visible: true }, 'https://demo.threadplane.ai'); }); - it('shows Play walkthrough instead of mounting on narrow viewports, and mounts on click', async () => { - installEnv({ width: 390 }); + /** + * Reduced motion is the ONLY thing that still holds the iframe back, and a + * phone is where it matters most — the stage is 3:5 and the replay fills it. + * The suite's other reduced-motion test runs at the default 1280, so without + * this one nothing covers reduce at phone width. + */ + it('shows Play walkthrough under reduced motion at phone width, and mounts on click', async () => { + installEnv({ width: 390, reduced: true }); const { HeroDemo } = await import('./HeroDemo'); const { container } = render(<HeroDemo />); act(() => { @@ -301,6 +311,24 @@ describe('HeroDemo', () => { expect(trackCtaClickMock).toHaveBeenCalledWith(expect.objectContaining({ cta_id: 'hero_demo_play' })); }); + /** + * The change this guards: MIN_AUTOPLAY_WIDTH is 0, so a phone autoplays. The + * poster is a capture displayed at ~0.86 scale while a live iframe lays out + * at the stage's real width, so mobile autoplay is a legibility win, not just + * motion. Restoring any width floor would fail here. + */ + it('autoplays the iframe at phone width when motion is allowed', async () => { + installEnv({ width: 390 }); + const { HeroDemo } = await import('./HeroDemo'); + const { container } = render(<HeroDemo />); + expect(container.querySelector('iframe')).toBeNull(); + act(() => { + ioCallback?.([{ isIntersecting: true }]); + }); + expect(container.querySelector('iframe')).toBeTruthy(); + expect(screen.queryByRole('button', { name: 'Play walkthrough' })).toBeNull(); + }); + it('shows Play walkthrough under reduced motion', async () => { installEnv({ reduced: true }); const { HeroDemo } = await import('./HeroDemo'); diff --git a/apps/website/src/components/landing/HeroDemo.tsx b/apps/website/src/components/landing/HeroDemo.tsx index 5ef5ed8d3..614e65842 100644 --- a/apps/website/src/components/landing/HeroDemo.tsx +++ b/apps/website/src/components/landing/HeroDemo.tsx @@ -19,12 +19,23 @@ const POSTER_H = 720; const POSTER_MOBILE_W = 585; const POSTER_MOBILE_H = 975; const READY_TIMEOUT_MS = 8000; -const MIN_AUTOPLAY_WIDTH = 768; +/** + * 0, not 768: phones autoplay too. The poster is a capture displayed at ~0.86 + * scale, but a live iframe lays out at the stage's real width, so its type + * renders at its designed size — mobile autoplay improves legibility by + * construction, not just motion. Kept as a named constant so the floor can be + * restored if the iframe ever costs too much on a phone. + */ +const MIN_AUTOPLAY_WIDTH = 0; /** * Kept in lockstep with the `@media (max-width: 767px)` block in landing.css - * that gives `.hero-demo-stage` its 3:5 portrait ratio, and with - * MIN_AUTOPLAY_WIDTH above: the phone poster is served exactly where the stage - * is portrait and exactly where the iframe does not autoplay. + * that gives `.hero-demo-stage` its 3:5 portrait ratio. This pair is coupled to + * the PHONE POSTER'S GEOMETRY (390x650, shipped 585x975) — the poster is served + * exactly where the stage is portrait, so `object-fit: cover` crops nothing. + * + * It used to be a triple including MIN_AUTOPLAY_WIDTH, which is no longer part + * of it: autoplay is now width-independent and this breakpoint no longer has + * anything to do with whether the iframe mounts. */ export const HERO_POSTER_MOBILE_MEDIA = '(max-width: 767px)'; const MESSAGE_TYPE = 'tplane-hero'; @@ -39,7 +50,7 @@ function autoplayAllowed(): boolean { /** * Hero demo: server-rendered poster (the LCP), iframe mounted after hydration - * when the hero is visible on a wide, motion-tolerant viewport, crossfaded in + * when the hero is visible on a motion-tolerant viewport, crossfaded in * when the frame reports ready. */ export function HeroDemo() { diff --git a/apps/website/src/styles/landing.css b/apps/website/src/styles/landing.css index 915746b9c..fdb3b453f 100644 --- a/apps/website/src/styles/landing.css +++ b/apps/website/src/styles/landing.css @@ -1931,10 +1931,13 @@ } /* The control had chrome already — `background: #111` with a black drop * shadow — but the poster it sits on is a near-black chat surface, so on a - * phone (the only viewport that shows it: autoplay is off below 768px) it read - * as bare white text floating over the screenshot. A light pill with a dark - * ring is legible on this poster and on any lighter one that replaces it, and - * the row is sized to a 44px touch target. */ + * phone it read as bare white text floating over the screenshot. A light pill + * with a dark ring is legible on this poster and on any lighter one that + * replaces it, and + * the row is sized to a 44px touch target. + * + * This control is no longer the phone's default. Autoplay is width-independent + * now, so it renders only on the reduced-motion path — at any width. */ .hero-demo-play, .hero-demo-fallback { /* Centred by auto margins between two zero insets, not by @@ -1994,8 +1997,9 @@ * iframe too, so a phone that taps Play gets the same portrait chat viewport * the poster promised rather than a 16:9 letterbox. * - * The breakpoint is shared three ways and must move as one: this ratio, the - * <source media> in HeroDemo.tsx, and MIN_AUTOPLAY_WIDTH. */ + * The breakpoint is shared two ways and must move as one: this ratio and the + * <source media> in HeroDemo.tsx. MIN_AUTOPLAY_WIDTH is no longer part of it — + * the iframe autoplays at every width now. */ @media (max-width: 767px) { .hero-demo-stage { aspect-ratio: 3 / 5; diff --git a/apps/website/src/styles/style-contracts.spec.ts b/apps/website/src/styles/style-contracts.spec.ts index 03936f98d..5b7b4f0c3 100644 --- a/apps/website/src/styles/style-contracts.spec.ts +++ b/apps/website/src/styles/style-contracts.spec.ts @@ -245,7 +245,7 @@ const CONTRACTS: StyleContract[] = [ { file: 'landing.css', selector: '.hero-demo-play', - why: 'The play control only ever renders on phones (autoplay is off below 768px) and sits on a near-black poster. It previously had `background: #111` and a black shadow, which read as bare white text with no button chrome. The light fill and dark ring are what make it look clickable. The fill is also fully opaque: at 97% the phone poster\'s own "Take control ↗" text read straight through it.', + why: 'The play control renders on the reduced-motion path, at any width — autoplay is no longer width-gated — and sits on a near-black poster. It previously had `background: #111` and a black shadow, which read as bare white text with no button chrome. The light fill and dark ring are what make it look clickable. The fill is also fully opaque: at 97% the phone poster\'s own "Take control ↗" text read straight through it.', requires: { background: /background:\s*rgb\(248 248 248\)/, border: /border:\s*1px solid/, From 3ee8c39f0bf8842fbd707cc517ad97eff4a37bac Mon Sep 17 00:00:00 2001 From: Brian Love <brian@liveloveapp.com> Date: Fri, 18 Sep 2026 15:03:18 -0700 Subject: [PATCH 07/16] docs: correct the fold baseline and strengthen the Task 4 phone test The "reclaims 90px" figure was measured against the pre-Angular copy. Against the copy that now ships, block spans make all three lines wrap, so the real pre-fix state is 6 lines / 311px and the reclaim is ~194px (~24% of the fold). Both baselines are real; the spec now names which is which rather than implying one. Also drops scrollIntoViewIfNeeded from the Task 4 phone test: the demo now sits at y=501 with 51% visible on load, so asserting the mount from a standing start is what proves the fold win. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --- .../plans/2026-09-18-mobile-above-fold.md | 8 ++++-- .../2026-09-18-mobile-above-fold-design.md | 27 +++++++++++++++---- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/docs/superpowers/plans/2026-09-18-mobile-above-fold.md b/docs/superpowers/plans/2026-09-18-mobile-above-fold.md index cf4ece497..2675b0328 100644 --- a/docs/superpowers/plans/2026-09-18-mobile-above-fold.md +++ b/docs/superpowers/plans/2026-09-18-mobile-above-fold.md @@ -377,11 +377,15 @@ walkthrough…` tests with: await expect(demo.locator('iframe')).toHaveAttribute('src', 'https://demo.threadplane.ai/hero'); }); - test('the frame mounts on a phone too', async ({ page }) => { + test('the frame mounts on a phone without scrolling', async ({ page }) => { await page.setViewportSize({ width: 390, height: 844 }); await page.goto('/'); + // No scrollIntoViewIfNeeded, deliberately. Shortening the H1 lifted the demo + // to y=501 of an 812px fold, so 51% of the stage is visible on load and the + // 25% IntersectionObserver threshold is met without any scroll. Asserting + // the mount from a standing start is what proves that; scrolling first + // would hide a regression that pushed the stage back below the fold. const demo = page.locator('[data-hero-demo]'); - await demo.scrollIntoViewIfNeeded(); await expect(demo.locator('iframe')).toHaveAttribute('src', 'https://demo.threadplane.ai/hero'); }); diff --git a/docs/superpowers/specs/2026-09-18-mobile-above-fold-design.md b/docs/superpowers/specs/2026-09-18-mobile-above-fold-design.md index e4b075f68..c9d481736 100644 --- a/docs/superpowers/specs/2026-09-18-mobile-above-fold-design.md +++ b/docs/superpowers/specs/2026-09-18-mobile-above-fold-design.md @@ -80,8 +80,13 @@ wrapping, sweeping `font-size` against candidate wordings: | `Angular's open-source thread-plane for agents.` | 4L | 4L | 3L / 117px | At 36px every candidate is three lines. The H1 can therefore gain a word and -still reclaim 90px of fold — 11% of a 812px viewport. **The type size, not the -wording, is the binding constraint.** No wording change fixes defect 1 at 48px. +still shrink. **The type size, not the wording, is the binding constraint.** No +wording change fixes defect 1 at 48px. + +The table's 48px column is measured against the shipped 3-span block layout, in +which each span gets its own line before wrapping. §5.2 also flows the spans +inline below 767px, so the real post-change figure is the 36px column: three +lines, 117px. See §5.2 for the two baselines this is measured against. ## 4. Resolving the messaging drift @@ -172,7 +177,17 @@ Tailwind utilities win — see the file header): } ``` -Desktop is untouched. This is the load-bearing change: 207px → 117px. +Desktop is untouched. This is the load-bearing change. + +Be precise about the baseline, because there are two and both are real. The +4-line / 207px figure in §2 and §3 is what **production shipped**, measured +against the shorter pre-Angular H1. Once §5.1 lengthens the H1, the same +block-span layout at the 48px clamp floor is **6 lines / 311px** — all three +spans wrap, not just the first. Against the copy that now ships, this rule +therefore reclaims ~194px (~24% of an 812px fold), not 90px. + +(Confirmed in-browser after §5.1 landed: 116.63px, three lines, with +`[data-hero-demo]` at y=501.42.) Two coupled parts, and both are needed: @@ -235,8 +250,10 @@ Recording command is in the recorder's header. budgets, not comparisons against whatever currently renders: - `.hero-heading` height **≤ 130px** (three lines at 36px/1.08 measure 117px; 13px of headroom absorbs font-loading and metric variance). - - `.hero-demo-stage` top offset **≤ 560px** (projected ~502px after the 90px - reclaim, against an 812px fold). + - `[data-hero-demo]` top offset **≤ 560px**. Measured at 501.42px after §5.2 + landed, against an 812px fold. Measure `[data-hero-demo]`, not + `.hero-demo-stage` — the stage sits ~48px lower inside the BrowserFrame + chrome, so budgeting it at 560 would be a far tighter guard than intended. Budgeting absolutely rather than relatively is deliberate, per `feedback_guard_coupled_to_moving_artifact`: a guard that compares against the From bfe9a4778933c20a47ccc4e3d2b73c3d5ce86cbe Mon Sep 17 00:00:00 2001 From: Brian Love <brian@liveloveapp.com> Date: Fri, 18 Sep 2026 15:07:47 -0700 Subject: [PATCH 08/16] test(website): budget the hero fold at 375x812 and assert phone autoplay Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --- apps/website/e2e/home-hero.spec.ts | 54 +++++++++++++++++++++++++----- 1 file changed, 46 insertions(+), 8 deletions(-) diff --git a/apps/website/e2e/home-hero.spec.ts b/apps/website/e2e/home-hero.spec.ts index 1a9b97d23..a5038b8a4 100644 --- a/apps/website/e2e/home-hero.spec.ts +++ b/apps/website/e2e/home-hero.spec.ts @@ -24,20 +24,58 @@ test.describe('homepage hero', () => { await page.goto('/'); const demo = page.locator('[data-hero-demo]'); await expect(demo.locator('img')).toHaveAttribute('src', '/screenshots/hero-walkthrough-poster.webp'); - // The frame mounts on a 25%-visibility threshold, and the three-line H1 - // leaves the stage short of that at the default viewport. Scroll it in, as - // the mobile sibling below already does, so this asserts the mount and not - // the fold position. + // The frame mounts on a 25%-visibility threshold and the hero sits above + // it, so scroll it in — this asserts the mount, not the fold position. await demo.scrollIntoViewIfNeeded(); await expect(demo.locator('iframe')).toHaveAttribute('src', 'https://demo.threadplane.ai/hero'); }); - test('mobile shows Play walkthrough instead of the frame', async ({ page }) => { + test('the frame mounts on a phone without scrolling', async ({ page }) => { await page.setViewportSize({ width: 390, height: 844 }); await page.goto('/'); + // No scrollIntoViewIfNeeded, deliberately. Shortening the H1 lifted the demo + // to y=469 of this 844px fold, so ~60% of the stage is visible on load and + // the 25% IntersectionObserver threshold is met without any scroll. + // Asserting the mount from a standing start is what proves that. + // + // This test does NOT defend the fold — the 25% threshold is a weak proxy + // for it. Measured under a deliberately broken H1, the demo sits at y=644 + // of an 812px viewport and is still 27.8% visible, so it still mounts. The + // fold budget below is what carries that; this one asserts the mount. const demo = page.locator('[data-hero-demo]'); - await demo.scrollIntoViewIfNeeded(); - await expect(demo.getByRole('button', { name: 'Play walkthrough' })).toBeVisible(); - await expect(demo.locator('iframe')).toHaveCount(0); + await expect(demo.locator('iframe')).toHaveAttribute('src', 'https://demo.threadplane.ai/hero'); + }); + + test('the hero fits the fold at 375x812', async ({ page }) => { + await page.setViewportSize({ width: 375, height: 812 }); + await page.goto('/'); + // Absolute budgets, not a comparison against whatever currently renders: a + // relative guard passes vacuously once the thing it guards drifts, which is + // how the four-line H1 and the sliced poster both shipped unnoticed. + // + // Three lines at 36px/1.08 measure 116.63px. line-height is pinned as a + // RATIO of font-size, so this height is quantized to 38.88px steps — 3 + // lines is 116.64, 4 lines is 155.52, and nothing lands in between. A + // webfont falling back changes where the text WRAPS, not the line box + // height, so any budget inside that gap behaves identically and there is no + // metric-variance flake surface. 130 sits in the gap. + const heading = page.locator('.hero-heading'); + await expect(heading).toBeVisible(); + const headingHeight = (await heading.boundingBox())!.height; + expect(headingHeight).toBeLessThanOrEqual(130); + + // Measure [data-hero-demo], the same element the 501.42px figure came from. + // .hero-demo-stage sits ~48px lower inside the BrowserFrame chrome, so + // budgeting the stage at this number would be a far tighter guard. + // + // 530, not 560: one extra H1 line adds 38.88px and lands at 540.3, which a + // 560 budget would wave through — leaving the heading budget as the only + // thing catching a taller hero. 530 trips on a single extra line by itself, + // and 28px of slack still absorbs sub-line drift in the eyebrow, subhead or + // CTA row. Measured: 501.42. + const demo = page.locator('[data-hero-demo]'); + await expect(demo).toBeVisible(); + const demoTop = (await demo.boundingBox())!.y; + expect(demoTop).toBeLessThanOrEqual(530); }); }); From 115f1d64281360730ba116def4cc191c93bb4894 Mon Sep 17 00:00:00 2001 From: Brian Love <brian@liveloveapp.com> Date: Fri, 18 Sep 2026 15:26:30 -0700 Subject: [PATCH 09/16] fix(website): re-record the mobile hero poster and guard its top edge The phone poster has opened on a backup table cut through horizontally since the approval tools became executable (#1011): that run streams a 669px result table, taller than the whole 390x650 frame, and the timeline is pinned to the bottom, so the frame's top edge landed inside it. Guard the top edge in the recorder. The clipping edge is the chat's own scroll container, not y=0, so a sliced block can still have a positive y; the guard fails when any chat-message straddles that edge and prints the measured geometry. The height budget genuinely moved and could not stay 3:5. 526 is the middle of the gap that puts the edge above the delete_backups chip, so the poster keeps the approval beat and opens on nothing sliced. The capture height, POSTER_MOBILE_W/H and .hero-demo-stage's aspect-ratio move together to 195:263 so object-fit: cover stays a no-op. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --- .../hero-walkthrough-poster-mobile.webp | Bin 24880 -> 21690 bytes .../src/components/landing/HeroDemo.tsx | 12 ++- apps/website/src/styles/landing.css | 10 +- .../e2e/record-hero-poster-mobile.record.ts | 98 ++++++++++++++---- 4 files changed, 95 insertions(+), 25 deletions(-) diff --git a/apps/website/public/screenshots/hero-walkthrough-poster-mobile.webp b/apps/website/public/screenshots/hero-walkthrough-poster-mobile.webp index fb450c97ddf9a1f47c3cb6e0274ec737f1ab9fa2..c0e05c77d77f72cf3c614fc3367d360db1ce08f3 100644 GIT binary patch literal 21690 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 Jn<xMP0076bcf|kz literal 24880 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 zˤ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 OlqQ&5JP?86H~;`5z%A?m diff --git a/apps/website/src/components/landing/HeroDemo.tsx b/apps/website/src/components/landing/HeroDemo.tsx index 614e65842..e0098a910 100644 --- a/apps/website/src/components/landing/HeroDemo.tsx +++ b/apps/website/src/components/landing/HeroDemo.tsx @@ -7,7 +7,7 @@ export const HERO_DEMO_ORIGIN = 'https://demo.threadplane.ai'; export const HERO_DEMO_URL = `${HERO_DEMO_ORIGIN}/hero`; export const HERO_POSTER = '/screenshots/hero-walkthrough-poster.webp'; /** - * The phone-width capture of the same walkthrough beat (585x975, 3:5). It is + * The phone-width capture of the same walkthrough beat (585x789, 195:263). It is * a separate render, not a crop: the desktop poster shrunk to a ~348px phone * stage is an unreadable smudge, and cropping it slices the right edge off * every line of prose. Recorded by @@ -17,7 +17,7 @@ export const HERO_POSTER_MOBILE = '/screenshots/hero-walkthrough-poster-mobile.w const POSTER_W = 1200; const POSTER_H = 720; const POSTER_MOBILE_W = 585; -const POSTER_MOBILE_H = 975; +const POSTER_MOBILE_H = 789; const READY_TIMEOUT_MS = 8000; /** * 0, not 768: phones autoplay too. The poster is a capture displayed at ~0.86 @@ -29,9 +29,11 @@ const READY_TIMEOUT_MS = 8000; const MIN_AUTOPLAY_WIDTH = 0; /** * Kept in lockstep with the `@media (max-width: 767px)` block in landing.css - * that gives `.hero-demo-stage` its 3:5 portrait ratio. This pair is coupled to - * the PHONE POSTER'S GEOMETRY (390x650, shipped 585x975) — the poster is served - * exactly where the stage is portrait, so `object-fit: cover` crops nothing. + * that gives `.hero-demo-stage` its 195:263 portrait ratio. This pair is coupled + * to the PHONE POSTER'S GEOMETRY (390x526, shipped 585x789) — the poster is + * served exactly where the stage is portrait, so `object-fit: cover` crops + * nothing. The ratio was 3:5 until the recorder's height budget had to move off + * 650 to stop the poster opening mid-table; see that recorder's header. * * It used to be a triple including MIN_AUTOPLAY_WIDTH, which is no longer part * of it: autoplay is now width-independent and this breakpoint no longer has diff --git a/apps/website/src/styles/landing.css b/apps/website/src/styles/landing.css index fdb3b453f..036f1eb80 100644 --- a/apps/website/src/styles/landing.css +++ b/apps/website/src/styles/landing.css @@ -1998,11 +1998,17 @@ * the poster promised rather than a 16:9 letterbox. * * The breakpoint is shared two ways and must move as one: this ratio and the - * <source media> in HeroDemo.tsx. MIN_AUTOPLAY_WIDTH is no longer part of it — + * <source media> in HeroDemo.tsx. The RATIO is shared three ways — here, + * POSTER_MOBILE_W/H in HeroDemo.tsx, and the recorder's capture viewport. + * MIN_AUTOPLAY_WIDTH is no longer part of it — * the iframe autoplays at every width now. */ @media (max-width: 767px) { .hero-demo-stage { - aspect-ratio: 3 / 5; + /* 195/263 is 390x526, the phone poster's capture geometry — not a round + number and not meant to be. It was 3:5 until the recorded walkthrough + started streaming a backup table taller than the frame; see + record-hero-poster-mobile.record.ts for how the height is derived. */ + aspect-ratio: 195 / 263; } /* The phone poster shows the demo's whole frame, right down to its own "Take control ↗" button — which lands 20-29px above the stage floor and diff --git a/examples/chat/angular/e2e/record-hero-poster-mobile.record.ts b/examples/chat/angular/e2e/record-hero-poster-mobile.record.ts index 339584b06..374ca8f40 100644 --- a/examples/chat/angular/e2e/record-hero-poster-mobile.record.ts +++ b/examples/chat/angular/e2e/record-hero-poster-mobile.record.ts @@ -5,13 +5,10 @@ * * Beat: the FIRST STREAMED REPLY, the same beat as the desktop poster, so * crossing the 768px breakpoint swaps the source without changing the story. - * 650 CSS px is the shortest height at which the whole answer fits from its - * first line — "Approved. Here is the cleanup I would run:" through the - * three-step plan, the message actions and the composer — with nothing sliced - * at the top edge. The approval-interrupt beat was the other candidate and was - * rejected twice over: at phone height the panel slices the user's prompt - * bubble behind it, and a still of a live Accept / Edit / Respond dialog - * invites taps that do nothing. + * The approval-interrupt beat was the other candidate and was rejected twice + * over: at phone height the panel slices the user's prompt bubble behind it, + * and a still of a live Accept / Edit / Respond dialog invites taps that do + * nothing. * * The wait is about the scripted cursor, not the text. Until the resumed answer * finishes and HOLD_AFTER_ANSWER_MS elapses the cursor stays parked where it @@ -29,17 +26,40 @@ * its own value because its Accept spot is empty space. Re-measure whenever * `public/hero-replay.json` changes. * - * The height budget is just as coupled, and to the REPLAY: the opening line - * of the recorded post-approval answer in `public/hero-replay.json` has to fit - * on ONE line at 390px (about 44 characters) or the whole block shifts up and - * the first line is sliced off the top edge. Re-check it on every re-record. + * THE HEIGHT BUDGET IS DERIVED FROM THE REPLAY, not chosen. The timeline is + * pinned to the bottom, so the frame's top edge — the top of the chat's own + * scroll container, NOT y=0 — falls wherever (capture height) puts it, and it + * must land in a GAP between blocks or the poster opens mid-block. Measured + * against the 2026-09-18 `public/hero-replay.json`, with the edge at + * `62 + (650 - height)` in the content coordinates of a 650px capture: * - * Geometry: 390x650 is the phone design width the reviews already use, and it - * is exactly 3:5 — the ratio `.hero-demo-stage` holds below 768px — so - * `object-fit: cover` crops nothing. The frame is captured at - * deviceScaleFactor 2 for crisp glyph rasterisation and shipped resized to - * 585x975 (1.5x): the poster is displayed ~348 CSS px wide on a phone, and 2x - * would cost ~51KB against the desktop poster's 37KB. + * list_backups result table ends at 173 (669px tall — TALLER than the + * whole frame, so it can never be + * shown whole at phone width) + * delete_backups tool chip 197 .. 240 + * "Deleted 3 backups (...)" starts at 263 + * + * That leaves two gaps: height 516..538 puts the edge above the tool chip, and + * height 450..472 puts it above the answer. 526 is the middle of the first, + * which keeps the `delete_backups` chip in frame — the approval beat the whole + * walkthrough is about — and it halves to an integer at the 1.5x ship scale. + * + * 650 was the budget until the approval tools became executable (#1011). That + * commit replaced a short prose answer with a run that streams a backup TABLE, + * and 650 has straddled that table's bottom edge ever since — the poster + * shipped opening on a table cut through horizontally, with its path column + * wrapped to four lines. The old rule of thumb ("the answer's opening line has + * to fit on ONE line at 390px") no longer decides anything on its own; re-derive + * the gaps from the DOM whenever the replay changes. The guard in the test body + * fails loudly with the measured numbers when it drifts again. + * + * Geometry: 390 is the phone design width the reviews already use. The ratio is + * therefore 390:526 (195:263), NOT the old 3:5 — `.hero-demo-stage` below 768px + * and POSTER_MOBILE_W/H in HeroDemo.tsx carry the same pair so `object-fit: + * cover` still crops nothing, and all three must move together. The frame is + * captured at deviceScaleFactor 2 for crisp glyph rasterisation and shipped + * resized to 585x789 (1.5x): the poster is displayed ~348 CSS px wide on a + * phone, and 2x would cost ~51KB against the desktop poster's 37KB. * * npx playwright test --config examples/chat/angular/e2e/record-hero.config.ts record-hero-poster-mobile */ @@ -53,7 +73,7 @@ const OUT = resolve( ); const SHIP_WIDTH = 585; -test.use({ viewport: { width: 390, height: 650 }, deviceScaleFactor: 2 }); +test.use({ viewport: { width: 390, height: 526 }, deviceScaleFactor: 2 }); test('capture mobile hero poster', async ({ page }) => { await page.goto('/hero'); @@ -70,6 +90,48 @@ test('capture mobile hero poster', async ({ page }) => { await expect(page.locator('.hero__take')).toBeVisible(); await expect(page.locator('[data-hero-surface] textarea')).toHaveValue(''); await expect(page.locator('a2ui-surface')).toHaveCount(0); + // Guards the TOP EDGE, which none of the checks above can see. The clipping + // edge is NOT the viewport's y=0: the timeline lives in its own scroll + // container (`.chat-scroll` in libs/chat's chat composition), whose top sits + // below the `.hero__bar` at about y=62. A block scrolled off the top is + // clipped there, so a message with a positive y can still be sliced. + // A message that is wholly above that edge (the user's prompt, which may + // legitimately scroll out of frame) is fine; a message that STRADDLES it is + // the defect — the poster then opens mid-table or mid-sentence. + // `chat-message` is the element selector exported by libs/chat + // (primitives/chat-message/chat-message.component.ts). + await expect(page.locator('[data-hero-surface] chat-message').last()).toBeVisible(); + const straddling = await page.evaluate(() => { + const surface = document.querySelector('[data-hero-surface]'); + if (!surface) throw new Error('no [data-hero-surface]'); + const scrollableTop = (el: Element): number => { + for (let n: Element | null = el.parentElement; n; n = n.parentElement) { + const oy = getComputedStyle(n).overflowY; + if (oy === 'auto' || oy === 'scroll') return n.getBoundingClientRect().top; + } + return 0; + }; + return [...surface.querySelectorAll('chat-message')] + .map((m) => { + const r = m.getBoundingClientRect(); + const edge = scrollableTop(m); + return { top: Math.round(r.top), bottom: Math.round(r.bottom), edge: Math.round(edge), + text: (m.textContent ?? '').replace(/\s+/g, ' ').trim().slice(0, 60) }; + }) + // 1px of tolerance for sub-pixel layout; anything more is a real slice. + .filter((m) => m.top < m.edge - 1 && m.bottom > m.edge + 1); + }); + if (straddling.length > 0) { + throw new Error( + `a message is sliced by the frame's top edge: ${JSON.stringify(straddling)} ` + + `(top/bottom/edge in CSS px). The capture height no longer lands in a gap ` + + `between blocks. Re-derive the gaps from these numbers and move the ` + + `viewport height here, POSTER_MOBILE_W/H in ` + + `apps/website/src/components/landing/HeroDemo.tsx and the ` + + `.hero-demo-stage aspect-ratio in apps/website/src/styles/landing.css ` + + `TOGETHER — see this file's header.`, + ); + } const png = await page.screenshot({ type: 'png', fullPage: false }); await sharp(png).resize({ width: SHIP_WIDTH }).webp({ quality: 55, effort: 6 }).toFile(OUT); console.log(`wrote ${OUT}`); From f7433db6af9224577b6170ccdc7047d9bcfcee2a Mon Sep 17 00:00:00 2001 From: Brian Love <brian@liveloveapp.com> Date: Fri, 18 Sep 2026 18:30:16 -0700 Subject: [PATCH 10/16] fix(examples): stack the backup table on phones MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit At 390px the four-column grid wrapped the S3 path to four lines per row via word-break: break-all, making the table 583px tall. Below 480px each backup is now a two-line block — id + size, then truncated path + date — which is 268px and keeps all four values. CSS only, so one template, no resize listener, and desktop is untouched. This makes the live phone demo readable. It does NOT reframe the hero poster: the timeline is bottom-pinned, so shrinking the table moves only its top edge and its bottom stays put. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --- .../src/app/backup-table.component.spec.ts | 16 ++++++++ .../angular/src/app/backup-table.component.ts | 38 +++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/examples/chat/angular/src/app/backup-table.component.spec.ts b/examples/chat/angular/src/app/backup-table.component.spec.ts index f09a246b3..927d12702 100644 --- a/examples/chat/angular/src/app/backup-table.component.spec.ts +++ b/examples/chat/angular/src/app/backup-table.component.spec.ts @@ -34,6 +34,22 @@ describe('BackupTableComponent', () => { expect(el.textContent).toMatch(/2 of 8 backups are older than 90 days/); }); + // The phone layout is a `@media (max-width: 479px)` block that re-flows the + // SAME four cells into a two-line grid, so there is nothing structural for a + // unit test to see — jsdom does no layout and applies no media query. What IS + // testable, and what the phone layout must not quietly break, is that every + // row still carries all four values: the cheap way to shorten the table would + // be to drop the Location column from the template, which this forbids. + it('keeps all four values on every row for the phone layout to re-flow', () => { + const el = mount({ older_than_days: 90, status: 'complete', backups: ROWS, total: 8 }); + for (const [i, row] of [...el.querySelectorAll('tbody tr')].entries()) { + expect(row.querySelector('.bt__id')?.textContent).toContain(ROWS[i].id); + expect(row.querySelector('.bt__loc')?.textContent).toContain(ROWS[i].location); + expect(row.querySelector('.bt__num')?.textContent).toContain(String(ROWS[i].size_gb)); + expect(row.textContent).toContain(ROWS[i].created_at); + } + }); + it('says so when nothing matches', () => { const el = mount({ older_than_days: 400, status: 'complete', backups: [], total: 8 }); expect(el.querySelector('[data-state]')?.getAttribute('data-state')).toBe('empty'); diff --git a/examples/chat/angular/src/app/backup-table.component.ts b/examples/chat/angular/src/app/backup-table.component.ts index f634ee7c5..b9435bdd8 100644 --- a/examples/chat/angular/src/app/backup-table.component.ts +++ b/examples/chat/angular/src/app/backup-table.component.ts @@ -78,6 +78,44 @@ type ViewState = 'pending' | 'rows' | 'empty'; .bt__loc { color: var(--tplane-chat-text-muted); font-family: ui-monospace, Menlo, Consolas, monospace; font-size: var(--tplane-chat-font-size-xs); word-break: break-all; } .bt__retain { margin-left: 6px; padding: 1px 6px; border-radius: 999px; background: color-mix(in srgb, var(--tplane-chat-warning-text) 14%, var(--tplane-chat-surface-alt)); color: var(--tplane-chat-warning-text); font-size: var(--tplane-chat-font-size-xs); font-weight: 600; } .bt__row--retain td { color: var(--tplane-chat-text-muted); } + + /* Phone layout. The four-column grid needs ~520px before the S3 path stops + wrapping; below that word-break: break-all turns every row into five or + six lines and the table outgrows the chat viewport. Below 480px each + backup becomes a two-line block instead — id + size on the first line, + path + date on the second — which keeps all four values and drops the + table from ~583px to roughly a third of that. CSS only, so there is one + template and no resize listener, and the desktop rendering is untouched. + Cell order in the template is id, location, created, size. */ + @media (max-width: 479px) { + .bt__table, .bt__table tbody, .bt__table tr, .bt__table td { display: block; } + .bt__table thead { display: none; } + .bt__table tr { + display: grid; + grid-template-columns: minmax(0, 1fr) auto; + align-items: baseline; + gap: 0 10px; + padding: 5px 0; + border-top: 1px solid var(--tplane-chat-separator); + } + .bt__table td { min-width: 0; padding: 0; border-top: 0; } + .bt__table td:first-child { grid-area: 1 / 1; } + .bt__table td:nth-child(3) { + grid-area: 2 / 2; + color: var(--tplane-chat-text-muted); + font-size: var(--tplane-chat-font-size-xs); + text-align: right; + white-space: nowrap; + } + .bt__loc { + grid-area: 2 / 1; + word-break: normal; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + .bt__num { grid-area: 1 / 2; } + } `], }) export class BackupTableComponent { From da07008c190cd5be802b18e0ceb094ddf9839b23 Mon Sep 17 00:00:00 2001 From: Brian Love <brian@liveloveapp.com> Date: Fri, 18 Sep 2026 18:43:52 -0700 Subject: [PATCH 11/16] fix(examples): use Array.from for NodeList spread without dom.iterable `tsconfig.app.json` includes spec files (`src/**/*.ts`) and its lib set is `["es2022", "dom"]` with no `dom.iterable`, so spreading a `NodeListOf<Element>` fails with TS2488 and breaks `nx build examples-chat-angular`. `nx test` does not typecheck, so the break was invisible there and landed in 93307be6d. Verified: without the change `nx build examples-chat-angular` exits 1 with TS2488; with it, exit 0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --- examples/chat/angular/src/app/backup-table.component.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/chat/angular/src/app/backup-table.component.spec.ts b/examples/chat/angular/src/app/backup-table.component.spec.ts index 927d12702..a26627c28 100644 --- a/examples/chat/angular/src/app/backup-table.component.spec.ts +++ b/examples/chat/angular/src/app/backup-table.component.spec.ts @@ -42,7 +42,7 @@ describe('BackupTableComponent', () => { // be to drop the Location column from the template, which this forbids. it('keeps all four values on every row for the phone layout to re-flow', () => { const el = mount({ older_than_days: 90, status: 'complete', backups: ROWS, total: 8 }); - for (const [i, row] of [...el.querySelectorAll('tbody tr')].entries()) { + for (const [i, row] of Array.from(el.querySelectorAll('tbody tr')).entries()) { expect(row.querySelector('.bt__id')?.textContent).toContain(ROWS[i].id); expect(row.querySelector('.bt__loc')?.textContent).toContain(ROWS[i].location); expect(row.querySelector('.bt__num')?.textContent).toContain(String(ROWS[i].size_gb)); From f006af045af8ba176f20e4bf2730c709fe2db5a7 Mon Sep 17 00:00:00 2001 From: Brian Love <brian@liveloveapp.com> Date: Fri, 18 Sep 2026 18:56:28 -0700 Subject: [PATCH 12/16] fix(website): frame the whole backup table in the phone hero poster Move the phone capture from 390x526 to 390x906 (65:151, shipped 585x1359). The timeline is bottom-pinned, so the capture height decides where the frame's top edge lands and it must fall in a gap between messages. Measured from the DOM at h=866, with the edge fixed at y=62: user prompt -54..10, list_backups table 34..388, delete_backups chip 412..455, answer 479..705. Raising h by d shifts every box down by d, so h = 928 - e for an edge position e, giving windows (449, 473), (516, 540) and (894, 918). 906 is the middle of the third: the prompt's bottom lands at 50, wholly above the edge, and the table's top at 74, clear below it. 526 framed the story but shrank the live stage: this ratio also sizes the autoplaying iframe below 768px, so the earlier budget cost the phone demo 19% of its viewport. 906 frames the whole streamed backup table AND gives the live demo more room than it has ever had. Also updates the two guards that enforce the coupling. They still asserted 3/5 and 975 -- the pre-Task-5 geometry -- so `nx test website` had been red since 017568f8e moved the source without them. The poster ships at webp quality 40, not 55: the taller capture pushed q55 to 39,016 bytes, over the 36,000-byte budget. Single-encode from one capture, q55 39,050 / q50 37,880 / q45 36,394 / q40 34,094 / q35 32,264. q40 clears the budget with ~1.9KB of headroom and is indistinguishable from q55 at 1:1 in the table's monospace text, so the budget itself is unchanged. Verified at 375x812: [data-hero-demo] top 501.4 (budget <= 530), stage 333x774, visibleFraction 0.342 against the 0.25 autoplay threshold, state "ready" with the iframe mounted. Top-edge guard confirmed non-vacuous at 906 -- with the responsive table disabled it trips with the table spanning -241..429 across the edge. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --- .../hero-walkthrough-poster-mobile.webp | Bin 21690 -> 34124 bytes .../src/components/landing/HeroDemo.spec.tsx | 15 ++-- .../src/components/landing/HeroDemo.tsx | 14 ++-- apps/website/src/styles/landing.css | 12 +-- .../src/styles/style-contracts.spec.ts | 17 +++- .../e2e/record-hero-poster-mobile.record.ts | 79 +++++++++++++----- 6 files changed, 93 insertions(+), 44 deletions(-) diff --git a/apps/website/public/screenshots/hero-walkthrough-poster-mobile.webp b/apps/website/public/screenshots/hero-walkthrough-poster-mobile.webp index c0e05c77d77f72cf3c614fc3367d360db1ce08f3..c41e9fa6b4621fa02051c9eff7273965f9c09d1f 100644 GIT binary patch literal 34124 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 literal 21690 zcmb@sQ>-vRvn{x7+qP}nwrzjgwr$(CZQHhO@A>DPxpz)7_i@%!rISuox;ksER7y!w zOsr7_06<+-NI^}3gP`<3@qH>_4j`2z5GpX=fL^%*d2vw@F-pb#JqDzu-8a26EcxNL z7|N>UNPE(QC-mdWIqE6>%+jxUb>8C+=I$u}cHin3fphI&%EZ4%`!~4tzG1)MpOUA% zhr4_~?4PmMsmG(My9>XkZv0R1d;J&wna`r{q?^3+z9!#?znIsdANzOu9es8`_Mg3< zxgGp*`jfr|zv(~gpM&48OScAQtv}trpzphS^g4a<zpP*A@3RW_p})yL&`bIAy+gm7 zzvy?sU-h4{-@12w`@j8n%3r@<^LqLh_*c9t{q4V(Kl^j_=f1bSRzJYJ`M$xwt*_+! zcFqbeiWW}^q|bR(4S^q~0_Kr6hl|grcIO|DZ7$#LTU>rwKh0-XzAUL4zA}`aM>uAq zbt7|JPij$;Fp1q+tci03Qxc+naZZhi&bj@WS)}8zL{y@#)<WU=Yy|_@NqvmhWC}x_ zzskqpb0OS0aRAT}jI(-U#0_hggqx!oF+7QoMTC%qlV1MrHQ@AyMvnRE6b$_)g9`wI zoB%GpYR_}}Vmw3Qd~87pP@K^r&8yr$Xt&N~;9U0bBC$S3QYWG#^<zF+sveF<%H}(2 zI|rtX)3DPkO^BDh6f_D+#>a4Req}&K=brThp%+yZMW!3dGCF=%U24=mn*Ku^2YreB z*=RPnK#*{9b^eWIwXi6ru#S-oriWNCcwOc9n_jUd`EC>rxLS9!MwkxPMC27VDl11H z0IfM9NV^z^t8@je!>#}ET6#N?+W*wD@FREFTBf;r2L)^-$NsF*gdXMVE<VOayfCJJ zDP_$3P)cn)WQTw36r{3y!X>DC3~4k<fOl)J9gj9(pX43l)jbC_8l=FoDUNe?{x?is zh}Mo?6_ud^a_s_);N#Zh#J$tw)0%+fkwN7;QYi>#f6Iu!Lc0pGLlv;u8S-+Sph7Q5 z$gxYdQ7MM9N_j(YlDhs2&D{U6DLJe)GOh^&56eo#`Yr_0;BVU0-dDKHRHKa4I<9?E zjJl0={*ag+K667(C(L=AcgbK_#jqkGUOVDt;Mp=4B^N}i7A31mqfm-+86cnr|K~}* z<zTGj|1SIg$6))GCD&OHS}7SRpJLR>xgR3}r7gGwKV|!*<;diyF9tss<iT2S$a_Wc z#9%3R=Y}n(9t>FVml%hjWDCZ-Iv`uMnqyxHGRRt`&t)#25&z~@G^_&aa-WIqZtslG zfq@-U&nEq9_Vyg04N*E7ApvO`s8F^;P^Zg+QkP3uJvna%HLl}+X~rdu&N?pg?gm2t z9$wz)7o#ln9xSw9QV9X2NA^AEF@iNP`>%soLmryds>?!3DG?!-W4Dx3Kou!H^)G_r znw!}zBOMZ1rI!5xJ6dPe%?@5ADyQ%XSd4@D91eY3;ZxMIw(>0`-Gg+scWc@NZ=$=u z`sM8R0X>X3Z*E7I@1PV0rcrRHGtZA7^Vdk|z_H@w{Nr@qa-a%w^Ovn;Nzat;sEP}= zE8bEvkT|ITL!t#j;_25Z-;EZ5#-5KpDTSZg6fs)K>19H)n&kBGIk5URJJ+YR&Dx>L zx!N<5SL<V5Tv6sYBHjdfpq3w}uMYMF<uX}bK*6{~quku2JBzzM5}fA3!x+>O8i@cU z`Yl~RVzfdx`jjJ5_i)(53L^N$!!KVa>|wczOQAbg`~+Ea>17#dLSZ_}gAc~(j}O4l zIjP0_h`x%|w3a3m1A2U^_`wuXkSXt<!rAEcex65lT3EwK7&HmdhY^Np)o-ub!OtBv zj{jcKNE8Uc0JvjlOhII3sZ@l~g4J`PC{O_=gIcADviTSYrQ~9e2#6WUA^&OO*ypfD z@=75&t&VgS`GfQ_$R&R`Ai$dnJgp(%Rr)J>#CzwQq`iyh6_8dBNj%)sxGcm?jGA#Z zfH*w4x!5|jSt7;TKS~CVniOmh%~KkP$`CsCCA+*Q{7V>Fqim_8ZMbCNW%p)R0b(j; zi6rz4q@%fMQpgQQedQ)puEf@f7XOR@Va3KAO-S>#`H2U-X*OB?3zS}l?&l@<Z7mou z!;<@l>qWJKkD>E)^Rjgq_4T`7W;Ta@;w?O-02ijO0#&k!-mceSD)rdMi<(RHjpoDZ zU!jg!w!i1Z7hOT^4vdPza=1(3u(6!M2wXBT@r>z`6Fy}$9d=#=Sp4&_oLm!EiAjEc zlYH4P_|B=kKS__FsPk%`g+*XFFC*cU`qIcCH)obhJSjt5XcxtQHy@2vN9b2mb~XqJ zrGJOyD}PB1qHr_lbieN8ALeRCDaoi04DlrJt+upsh^B#Ngd5y&Co$}l2IG|nq6yvx zYH;Lu$b1}dTJqE;Ztt8Oh%Tc}W8d^t_lESzmy!n^$c`(ON33%(%4go-BCHhdFToAc z;uX1B<;OEyqWI%s6i}ZE@xuk{t1fQ+gd%YM?pghYHxnKmrTSytxO;7lt5A}{6K-S@ z_I<p7M`Lyt!WY>f945NnaP<_pFxC83)wy1mqyb~FChzSe4Ay-{Uqm?lY)k`m9K>U` zQ>D#h(JTDV8H8Z7Dx#=(lA#@;2C@O#eJ!Du&has8I|2rFH9Bwe`eS3mp%t5cShq60 zs5YCV8p^hhu#)|1`a^X4rQt%ra|aP;!g=DS4-NssyJaT>5J^LI++9OvU=LUew$KE5 zBbMv>Dx)HyD1aActGs%N;tPw1Qnmt4u^7f+klc_gI8{r06NmUftf{(NXJE^RH9u6` z)(9Ni1%d&gf?A%Kof2&}ht8l(T_9;e*mf569Rg*?=g*&*N3xKyh%JPEI!2-@dB+p$ z0y?>89&4o@VKAj_w!F>;-!Vi2!vR5!(NW$0mnY;Te+BAy<dI=N1Hk$}k}o(1?2_Cr z7_%)D0Z{8Q-rxF#JHHCiDoh(*YCsAs`v;gZq}gOXS$^$MGsW};={&3P|Mp28Z|o28 zMw`_|tKWGtCy>Ey*eNS4rxX)9f83&J=Imj7Y#T=VkQEwXkDux*@(Y7GgCPJlT|Ena zqPS)4QojpcKYxl>s}V1Zl)mTuP#nk@O~CW7Az$GFpSrqoYE2QGUZ5tR5LVy`@Sr{- zU&js4^C>Jb_l&+DXW7e|V6bAS7Dv{OqL;{g>uGlTI{r%x<2|Jt#u?XDJ`+S0^tquU zR?>>qDjdJHB@kUE;@0QEBr<mftLmjAN%bpIfj;5%39pd=f=#9a&tVY=479b3Js*&} zYGn*4%X<!zJ~$UGb~ITA`%$N%bQ-2dJSAC!8;p`+ITYv1Xyl6F|8H{qkGlPzwQT!w zIRcRWTs^f7%_vlX#1rxWs)L&|;jtddh?`zR8jVt5>A%!AulO=FrU|I6X$ji1G4sd0 z`|8?$C4!oz*ZfcxdI;jlIYo6el}0I`42qN7?Z4n|8se(-|BCDXIsN}fQnx=D9i`dN z^<)CAV2RjrQ2s+`ng7c{q%^kC^6m=Ei*WK}UV{IfK6%N}8_Ds1Y2<SggJly@@$m5_ zNwuKnTnqet@7i0AT>r<hSRHxy#2yz~>WmCjKEslKC?k6O&z!R+<qD!B!7!_a_q!2B zgacN`i|M2jTqZG6H1O+UwC$AiX;Xdx<95$Do3-4{Z<a9^s23xZN{V)ei+Dt)6|G%K zx_$>YN+-NSC0KI*ZFS<|ki+JaDKV)_Q>vz>ASr`yeEKWjOQGhRBUa=a_SIKWEs5(L z*nbM@na0puohd|(=cP&s#8_65Mj{oM39*0q+Da_JP?Vawt6tvGYj{Vs0%MWHFuDSs zLmyDk(Er;=%@qx_MLvxRkvr)g$4XB4uL=Hrbnh-jttZ9(uF|qM0RN<tqlb)CEh;&- z(@;gBY>u4$cURopymOJ`WwoeKU6M)HVKknqU(-m~XLzSO2z%y8ZvTU`r+#r*IbB{? zD9M3K_AQ6<B~r_e&bO{p9p$J|*t&xf(}TYo5?I0J)kL{STD?SBLt3T*R3R!8cvoQU zYnS0D1<E5CQ|uH81pMIQ!OETdPISX_EQg}R|EGYt%-<6(U43}l<D|kU_2Q)e@yY(% z)TILe{QmxhnoOj1G3XqkmFc^|AZ-BMCH>QGAM;b@joANaAE#uDoY@uFVj|3a(gQiq zwLhRy92kq}RT?COBTy4rmEA<-qgA`Ea#ii3+DWmSY%|qvT*WQnzR$v>Vgnrf98yg| z<7H7|7PcI>5JCv;-;zj3Ae7?8vD8#$W^;=)m!60La6nm)l{(-`;1W8T4p@D)Ef_v- zGw@PL4h!CpO;dAJ=$lf(JnG|Zt(uUN0$%e9syXzx9RFMra7yonBN?_DvK!C=Ch{S5 z1Z10>1csbyFGng`=pek!OtTWk#?vYsvIrwDH`p#kjC0eno_)7?&UHr=*rR{P-xXbr z{qE2{g2CJE=>w73@fu99AqpaAqy1bcwG{X?;goFL1zmaolh6hb>2es{jkE<iE<bWo zRi1X54zah?)jF=}r%i+pp1=o96McQcv_Qnm;BiuB{(IvZS=&O{^w6BRM~WrU<2P`{ zQmjMmZ5r1QeIPWeft;(c_n2;ra%<#j3Kb)`)i+tmT>w_~mYajFUR~?4yCvUag)!$y zFNSCGw5>0R)a>H~m}^~0v{p8_7}#+Cyn#NSSNdWaP`}j--}XWmk8o;jA74M^JKW8@ z31>WP8CKZM*)|RG4@WNGbxi{vhtw4ocEr(yt+tj;h*k=6-?*}mH%P_Gw5iEtcur;r zE%KNNzm<_STVC!Vtu<k`>NBkO^EJ{1-2y9s0%$rflPHb}@<WolNnL;*=Ao>Tssrs7 z8MV7#(!Zctfkre-8w<q;?FCWlNMDy70w_$MUXU0`<I1Rex%q=?Z@_iXMXOWH(j_#U ztC;}6OZn5TkA;`qzZ0c8`f0=!PvD<;%f0JVVNF1Chyj5~cKcI#J3n|?hDR&Akl_iJ zte!qLJ*CYwPvZAbmc9y_O01B`X{mc;wSQ(;Y@|wS5Ax2qp-{RYr`!D=9(z5Db3`-X zh)0-wg|v5L#Fh$#AqyqcF;$~gB+@JBqm4bj5+^WeWP|788Ueq%yT=xPH4_!~9oxh) z+%RhU)TU`ttMMM6?>iwxxy&&D0>wzbsF&qR8a*Yrs4aa(((M+7#PmEKv8RM$P&Kk( zOoIRuUF>d`Zv~vH#PmF+A+Cj4$xNEvVPg`^l-3l7{0n;1A?{C~7F7x4<<18@*DTCz z&gyE3kfcv?RBYGLh$Wa2FdESBK0@6a`mAj4M^zgHg~h9>yoKQ@xDP?YEkJA@b_f0X zqUpMEw#L#fE6)8CpY9+dvpNCZY*Shwb_i%&({&CTVC*$o?Vo{TG8MH2T&62xdB*Oe z8Ou5I1zHQFF>E{!a(`#J2R8&hUcyh`m}3sBU9dl%HfOAzj)wyPq$HTx27a>q+z~@4 z$_5Ie-c^<jRZT)g?U5+2=ycgXNZsmN#=TA~UDvu4n2<>`3-LgCxtG6y=6is`Qdmq^ zy4anU<^J(qo=syD`;lx+Yel<9)(px--+JN@6+nWKA0IcTZRosM@>u`1j{Dbm$O-7n zh=jr(%Y$SY-#k_&K9lHjn@bgOLe!H?Qf=&i*gB_1KS_WM<AJ}w1pj7*^|M(-{GI?E zwBTV@8$kGnh&x12kp5jrmK}_ZDRC1f1b-GbUIfT4DjR+d2No2nSdCCPkkC=X)?m0M z0Bx1WIFHsu@%-u{G|M=e>fHQAiRFgQYC=1ojDx8L7ofbb4K+yroYu=&Yu*`C=}Vvh z(9h)?1ql?^*4%)9yvBR|D6YWfs?f_iVLADb*-lsZahosjZs)Hau9s#G^$_G^RA605 zUEhuV3pYMHNp;dESg(7>w(6wv`BGr$&8s32cv2rd8DH0l4c^w4Ar_I`eEudnQ<u(= zwowM;^8^MziLGl*UhGNbS(a-_Lh~-(7s6*#yP#pgw4vKw)?ZgT!IZ-yTEoMff||w- z6X++qy}`VBKt2WPIt58WZ}l|h4hc=rX2|v2#N0(5+D?%GRd!%@Zn}*y#KYXFDX48B zutwvfCQM4+p|Z03D%{{f%!mm7ijhEa!9`1xropaD4o1+YPnPYM0Ghe)?LfUizOV<~ zxcp_u4YuY=uVR$yYtD8xWMISSq|$~=|I+RrKMwn5N5!uu&y<$^SiMq6!tBwtDES45 zcG{<o0l~;hP&{)PseE-ELYTJs?i$Evsrxl!x}JiQMF}n`pCxkzr)Ukcb)AwwPea?U zXmOKLBtF@<sMQd{f{GW9emv_7aTd9(oJN-UhFG>ar?Z*BR{XqQ!l(es<9U_F#iEt= zz*ch>?K?*QksVIj@%PSffD{DT(B)IDD?wD2kx6$Xf@xVtm!iE`cYCU@@F4l+yj5G# ze{;9V_q`RPWYTf<#(6NVg6ho9)Z=h&cj8l(3(WUor(fu<%gXOKfxK)POf4ITVcYOI zXf*n2M)OSD@-CZN>>cPK!YPspWd0YH9owi&G*>#nw);t;pH5tNw$LX>0CX*$0k~dx z;AM$VxL7_w!U-Ao3rcWls>z8bA(rv)=c`$4hT6z$;kemc=5!8j_M<MXG*`fu9dCT4 z0TvWVbbB`k>e*J_7ocIKQRL^92d$Us*}sh$?go~J74|mPv2PhVhl$I0A<!Q^HmfnA zU~1j^#3z-XGoiP*o*9qwwz$&?KpqI6CulkiruHQ#s2>qb(`b8u{mG5=(LZ$)Hy%rL zEO$3?i-ZBU*owKEYUzU<%D4{k`E`1yx0?Zlpvq389Lym}j%=RUBFgW{00=?k!u!P0 zXB}QDAd-cw?bs4}#Mq-QR9?mADv&|()H;I<Sd19pT_l(CbcycFT~XG3|L=Q182ka1 zNvo8Qr+gH}dCp)08xRj$z_CYinI&@H=qT%0iGg5dIcgNN%>2|2AFw*`W1<o0*rUvE zDYlAI(_;{!{LkV`+znrdp3$F2PnvSx?8#=3Px*RNEF2l7J<vOrfuGDxe3D9GH@9ft z!=P%83-lhAt|Fx(i!dK%Sm+1vLf-W45chHw?o0{Gmt(QPx+CYqa?dVooN~{Q=Pz{F zvc6IXRktqCnkLXM!Aztxd$Y0s-!*cK<dI?z?TbV-8A8>;@jJe3)+6|_$^bqsJ%vVs z;swuZmfM9MKOYP-fX3`a7#@`8kTBdsbu<z60$h9ZYirHuzbE@G<*L{1mn0jC%KB)7 z!}E(!uEN$i8uLD~hRWb!1kNqGI|vc0aEa2Le4&x~{h0wtf#f5v6rV46$r>rb#u_YC z?--=J#9u31FAd9KAj9b!BW`)BS_S*77sS!!eP>F5y)kD|iZ2)Q?}+ueu(e_IHcb3} z&^<L^=lJtP&8~y(l=LJD$z+mABvVL?1<gYAeiS;4QPBS5V^nLBt;vw!Z4Lf~8*Ox- zGV_3Xfg2o&_oSL+(g_^&9TnSNihKY7U|$5-#|`+Drkt}5HS0EkaAm{QGB?Re++}7J zTxEkOVvL&uD~99)OJgd?d$9rYsl4{EWEd-^p6+JEono9GKFl2<%m?&U$8z-t|L~Jv z*sPHw1JNEMuov6{<3vHktvM`k2jKf^pToN*3C0`}MEe<?eJSL%iHPfFta@wPp}tQB zJ;T$5&5>DIE3>nn>((&ic_3_ul75Rizg1QN-A1-E2%HId(*{Y%uDOjC>*%beGzBBj z_R!LzU3zT7zX9K<(y~zbkXQvB#to*0gg!741Q(Mex;M!fHj%7eLm>z;(H1;_oP*Yy zUyZDdU0eAAH>zJ(VXj%T5@f_6Tp(5HfEdn@<bJTEe2mu<v6u{NBSgRaMG1a_(|WG9 z*mF;UYC8AcH4PH+kQ-Z<v5exRBWTY0VK$fS*;OPKqt$xO`KbYMg}%S}V&Ude-aF&{ z3LQT!xx1zUt-H8xjMCLb1@02}&n2s%!=Ci{d2Sfhk@@&U1eh%2O?^8o3r~p)ut+a* zBQ*o2sT2sQiiF(}2f}lV^aeqi^O{JyFDe*2RtISBCJZtf`oAVTXjBjY7JyusRmXFZ z+&=2VIF47aqHp|{&gfA*X}^&oSJ<2a-JGBWaNLJ}321emlVBCRfP`8EZL(FWNYk;8 zsktfJiH-&Zoy!QC6j$wh@K3UWl3DH%5L3-`uE2i-BqH?*QEmK3dUDTy`84RBtOVw3 z6LZ78G#RxVDLo5d?t%L!v<dEsS39U`k90YP5Dhw}PTUB6WlFBsOxv4mgU5y_*s6xW zyvR!6vx(kLz)@aHIb2tM(T@m>r|^|D15mow)yI5>th=Cw3O<aJy;9L;rZI;uG;sc$ zFp_<qkC}0lHB83TI;(T=Oa8%#QrlymU;8?H%*40GG5RydWfO^pwN^$nqQg1zj=r*J zv(tW*P5U(p@`L<c&cN!>A-hxF{Y8~0m2)P@8+R3A&=>>GJiXVFboheaJZqhvqA221 zrpfVRL|2Kqc&c3Qjrqy3Bq`$#4MwIY7jH6YO#snXV>hxkV<EAvbi?(Y6>7fn;ibzq zQdlok?~0|Q2D&inj(n9(`FLJUpT-6K0RIbI48Oa|S2d-DCVF?rC7HCuDZCLsWtUMP z29s20E^WIPpGB}RsBQuqd?Se54nk*?BE6O@w+(?uHrZ}IO1I);HS{QQ+lL{aT{?Ec z+WiC*o@SILfOKlbWoahO(=%Zv>lX?tFcS4+`MWXPX#Z%*{TrFNWhv>t{Q(+r6l2=% zNg5tLikFB-`7XZleH^k28?7=?GvBkY8Q4kA{mT*g>Uq{M9Ktqzhze~%wy<s~8jr^y zi(I`-*>)=wc3CW%WwB7k{*(>oTRT_%Nz%OE<c<=Wu|WGgsK9;WVr>zQ`E{K_rQ~y; zTPJJ&0{64yH(`sdnt0og(`fC(ikrswO_>Cjh`rafn5zt@;nkNWp;Txx+GjnGuDXZe zTF;@J2Dqf5{!kT6HdV@jn1;0=ATF{Ha&8r_*6IFwHTWBgQ}TTNl!syfiELA)9%z6Y z;3_8_h5Rr+`eEgS_epknQeJa?#Fy*Eyx%yeg(M^oaNYJ<OIoY75km0yz}=*@G?WcQ zsC)6GpZWZM(?lyK=Z@ku8w$_fVwrCERYL2uU~WTLG@c<})a_}w$FMaVjHsRIDa+xT zKK;y?h8Ok~ocFsss0Mg#&Yy@_Ym)fe`*WztU25i5pZkm#u`iq#=dGcRTJ6j#Dgg2? zx@ga?({?YNml7Tf%3q6BV~)Wp1A<q`MPvO^o;PGgm&n?g4Os!LYWMbno2L}$CA}~Y zBVOZ6qSH^KZrfm|BS-?pN*=c+z~B@kzj{;yU@4M}W?_S-%T|mTI!F(ncBm*EXLg9$ zc9&421Mrhxjd<h0BpxDEg>Dtufx>aL=h$qMf(Swoa%uw%Ox<SQqb?dxtiwVA-ewc` z_1&!3%O3MjQC2~Cb@3xQe#G`}(}W$0CP^hO8(h;~b(puM==#ks!^Su>-$I)sDCozY zLh4Y1Y6T2~tag^<7U@0?G5R{T`5h_l5lyeWLQ?)130PFtusfr8|1<lmELaQT`fhxK zeXaFCap>sRZ~dSb^?z_<%o!#XpGgaU^2Wh@<%B}Q>iz^1YEgMIXPj}U0dl+gE_o;` z_MlSfZ5b?WdW7)ef<iQWtzR2V=f=jx73}~r**OGWP-esq)t(rUh&b)$2<E_$w19?* z8AP|LuAtiNfkq6z&au~@nnTvtZ$jg0`eM;O*1M4+guxpRp`pu@OqY-+^jhHmjs#$c z`ME5uq~A5PDu-9pSR_dLX*<7WhGnvRhfG+~w>KZMQcz}mGaapNLdSqve8x3O1N9<o z{k$RI>6T+CV=@)gz~-#nJobiRq?mtDK|s9j;*Ip6k{}@t>$4@Y4B^^cdmz3$F7{iM zvI)xA4Y;cI_e(@!f?Of>q-bXydZKEuTxjWGk#!!srHqRNla$zhIuQmM(GRtb1O*7% z%hD|(AGAjuP%G~_o9dDbMQTe}!*<WM96@p3Tzl}BxZbPvlvqoE(=OG!*F{B4<GHCd z<HPmK#<JeA?;zpbzffN0GxJCv&S<@epBGh9Y>z|Z^Jk-0lPaafU)&$$$6>HZ>lBd| zdTF86|BW{_yx-s)cf_=N*R{74LG5PBs@~S`i|k#n1;jp`8Za`oL__|-s3?;@*K=gm zO>+#_uuFPsY3cjoNmndWeM|SQ^+;+$f*+!_4h;@L)Gy~OIYLUQ#G^aCOd7O@m_t6q zdJHK2Dkat04nKj3=Izf*ogouS2o<)E)0~U|X<n~glxOT!pwBO8fU(+3a)<)cTH-ES zrlF8q>gNVt_!|4uBprp<;^MdWN|%CQ-2i#pl14UoZi`X7Us^JHLAUm?23T8B)~Hs8 z;cst{s{*GTch)sE(`Eqt>n)@i60T<CMNd(jY~a_!`JyW2JpD@;HGVB}5U=4Utt6Zf zg#dz2w2*a9L)$1cAUK;u#sW=<a&gv(fFwJd0u4pzh8(mq3&pZx!lXYPv$47ORNTJW zUj%j>Y^HTn(GcaN%E$k_Lu|7N{i_3`>Jex%&jor2hN3;r^0on!kwKU_nhqtLpBEas z7Evrm4<EI{L0gX2r*dCp4@QfCi1#%{_>>z$rY3nA6vM?pKKRZvSqn2`AYXImy<|Xa zz-^#;@y7Qg5%!dul-V0&DX%FztqhoeTK!>PD;^GoEB}D2x8LN)0LEju`Yt+yZ?dV+ zWFc|UK<%w$WtbsW3dBS)J@d7tUH}944cFe;Eyo~w=J8ZvP7g?C@BWnf4!Ms4p$e#t zYJl}zgnmzapfXrk@Y>MhU(1^Ri#Dg5?<NVyKxN^8imu{FcHSPt;ZDevCy#x@*O#JN zDS!q#XT-l7`%7c6f^EIW3-az17aKDLx)Zxfy*4w51yi${l7M&Va@9D$D0a+mQvlsp z=s+SXSUB9p;*7jhrRKIJt9kc^fQ2qn{%qYpb>ihyhvo20CCY3YKM#Y@AE~cw6`IgR zwfM-E->=2KI~q6QSq|<92+JoQy2#3H)=O7@VIm5cE!;|jmr6@Al-pcu=v33NKhL#@ z?h{=(7;}@Ona2pj)>Vr;n|yYoa%{pa^FIHk;HHW{iieH|-H}pCS~p?Dx>VS;kXS0! z^cCIA<)Po9Ua0^0qP`I<&BM58x`~~Sz!hU5obYL6=Dl4$WN*<I!Zih~-vn7j1j+Qr zefRly{xKoTtiiMH;-rQbwM9*FA|jH1DKn_};DSqK0xdM0Ui5u-V+~9%C#hAdSL9M6 zd0B^wU58Mv{u%`7h1a&eg@iuu;aMzFxc~d|BAETSVJ5gGdPD$s9-dtC>(*G6mm*;= z2b#cbhX%VQWg6Z}>(mza&F6aN9_OYp#lHcIkzU)jVvX7Lpy}F<q!WGLvRTJ5o+0I* z-T@n5R~lVEp9P`gU!w@Qd`%oE|1(A17dAKSa20_XEnN>o5Lwaxc{p1_VzN6#XfVIB z0|Hv4VsdriBk;7DUenYx1GZG;HY-6@p3_3li9tzPcvK?0umVkIoCqR!il(?q{sz^& z-lQV|vv8AcWI6#JNdN@y`1;n%=V6&S)^p`s{{xPZle01Zl|iW-R0ro(<vmqFb&7rh zq$s51wZ#IwRbWbav6!wL-KOhMx40oX&@CFega(%dSdzB{uC0Ncr30Kb+g@M9riTaB z_*aw}G2gQ(V%=Ypg$v~FI3{5H`Y$RyH_CR2RzcAnGZ7N6j&O~_tbT!1BECcHggQK# zVoIk}tn=sE{YIHZbAP&v4l`zBZh)G}m(Pm7hix17wo+1}szD91Ou(4G--PITLOLYQ zBd1N>_p5K%6C33F$KLe&fizP)u%|Q}tTn1gc2juz>#ef6CM7sxMhL9)j*6~=TQ6*= z1|K_4&iq==1Tiq%zgqgm$~2AQmqONV%aA|DRaW6Rm2oM;R&Wc^R{YEd#`vlQP6h%s zi>m-U7}&Y<D|{Jr$wLSZk1jwyJCLxY*awDb8EgpEhYQ|stmGrQZG#fHd`-iQm?s=Z z)OE~FW3UH4Op6bnKrHkgQKs9%`z8Y=WZ-3NZa7B0Q*Ky9&!qff&H!Lo1oP-|sM-79 zu%U?IWnX=|Ao+K87;}Us(xIE4k)zk?s|J77`Tc8Cv9zJeE0quVGkLrOb>rY2K7ZJ7 zpjYlATp!QrP(e(H2I)NsKK8!^qVHm9Am<7UCBbY~^vd4nKGBcwX!jKrNu8y{6By2X z=&-dVq%U}<5=6XSfH3?+X+sI@eyQlR0-3>YCB_Ha?66rQ;LLmS?*i>^O}OnV*fb!r z?`c-sLJwi<)az-G1Go$vNU0HA27m+P1?LFSg(TrI>exIDS=DMa3L}5R0X}XpS*{<O zF2|L#pkT-lTTvogoM%{k2Da6*I!*it<Je}XX%E>za+%vWiu}(#nwz4x9-kld^w6<{ zi88Vd95)#m4TuF})9m#j{t;;ZP8`RG>pW3N$m07$-%$VRsMNwFN#^v&uIY~fuB8K4 z@k=uRT02w^UQFqZeVGievgndT<iHEXW+oFnho;QS4mh`X9Ar+-g{irBri_W@^v^u{ zaK_qdSDFx8w{qTL&!EidD_)_SfgzV&j($_yS4E*6mHMdf2vOvlo?!IB6u+Ampc7)v zh*=wlc3NV`^*&8ou)MAb@!_nYX=pvfbElHWQ!(#Zs_=m1yh|gVNam|SWW*tJ9ao@L zV?5WX0Y`@QT{@}kW5ejs;**X>%d8#H8ysZ{syXow*r&%pWb1)L1$qYu-OsUNVZW84 zLueiyYDe;EBF7^ISmxqZn&(rW0(fDtuKTyOJeU$&6&dy@Curqn#!oiWk6AF159ek0 zO5fmZjNa#uO=K)wfwHtRim`VRpLgbLB1#Oa^VfnPuyf;@xEG0FF>k2Fr%_9{$WIQ( z9Bjfp$}=KKfa(I~(auoHyp&rAm7J|)?0sBA5ir}X`OUGtqkDzG>Z+4ZG3EGd_nJx5 zfPtXaNttE)D`%mT<1gO2-z<v|QaKAGS6Wi}+e3~~c>5<Humr-tigAHh_YjWsx)dqH zic|g>mud33(Fh}xROR6<Rk+wiB!9oPAP+1jvww8m{#wIy42iG7VVqpgu%4wL1uNru z$q8RWS}rToDkd0D#JY*+N^mWYZqHC!TG7<Gy$Wy)Hq5SUZwO7w*1OD)Uv#=zRx{b5 zebR>@!v+i&@wEaNoUx&kmGgQWVyLrr6W1zp?{0N9BRCxd?3}`z4dE6!IIcRmWz%I} zj2M1D^>7)2W19UbLJayCr!)tsK{1f(58(CQ`RF>@qMSJ%dfA>sdFP^k`>~Oshcr|7 z9Cx`{l>I-xH2(looXokQf~6=r5ckr%vhM0DwJB=NxLT!5oURTn|8pG$VU2~b%zF4k zmX+mnofPlHgJGeJQh-$qZl3o(KB*wY;-A|(q4kbY;OO$+X*0;&l#ahpcj8tdqECUs z*xHrps9#s}fcf$jCxoo`UISqvC>A$`(n+*m>p`j)(s1I4DaMpTv9QMxR<jGfqbS*L z{DYV$y&0#Dm=G5t%8mi8COGF4Tw|_pS)8`iaqXP08i_bLUaSNl&v_lXTj=|BSeyH# z{q7ZXNuUZTk6(NX;O)H|CW9{<r|{cYa$YK%{@f0;RSf*KK7#Iffme*xM+W^5%jfgk zKD2P(V}C4Ycb>+H)HiCdc+44}jc_R$@sTY$C+K(@ha=94$j8#J5SK4DL(PUd0)nm6 z7{q+d{(ylreGL-vWLr2W7*oPPv@|)*;!cqn{D>FMhzWmM<G)|84FlX#<Y-4zZiL&# zj;|6GU6vGVp&uc8s}Ghp_%nU@Ibvdz%RT*So_`xwqWu2q*ZkykX*bhU!IR;CPE0or zfpRrn&ehwZYq|34{THyWrqmw29_{<71Xo|!^OX$lDj<NRkXU14JBP;zfRvo$ohj~_ z5S~9Y*`|HD=a>8_tuDcO7-yY$kk<b3Ufk??O-WldW54JBLan)j<`QNW!=#*wt902O z`Je1af`1N7oW%aLtn<J|!x?cv7g!1|c;=hqzR)2_FLn%(%cY*3spYu+IL>sEqD(O} zB3EVV*<U>{O}d^`Z37%YD~Wb&ql2WH&6h!|@^M;mP&nd>_>6+XV72I!$RJvXjS`9` z+IyopIk}){YIAJ&5`@fcv@pyoU`V3``)CHP!zGb9Q>h_4PX9fZXria!wgiOYciFy< zItKzpZ7FR<{SKFUDVWAZQAi!|0VuNCU$f)1Qc_*7pff<%#Zk&WR!^9d4s?R%My4b! zGLk#&Jl(ieOA09gJD#Rw|Hs+Dv-b_qLd4|Hhr!GfIO=C0-86CD=A*?KfT;yi8AmG( zHc9tm8n&68CzO`d^^mMX&D;28p71o8<dAqI@CcIhv1aHh0JL^A{`lk}#$*i3i-=)X zikz`;<`jo>NqK0MC||X)37TIbZ4FF5w^J*p_@4_P+nQHYY(&8l^D>-NTF;)+OEwE5 z`%kuhd^t4+AmF-xmREs<)k~TjS=*uVVZ4)n4PfE>Cu%4P?)N!J!Yo8?*{tCJJE;hg z^6D~kl@vn6_8}%g$_ww`Tc;sJ5BA9l`CiYOLd`*~=(`I6c>tKVKSV;hp_~5vfTW}n z=vi$TmW|&eWDIpX6uIkT(X|tCWtHWPM|E1-%tD}u1g8wcABi#}c&X0{(iRqf&=m<z zUSl??A{CmXIw&9$@g&2j`@=xlKe<Q$W98WG3BDaxFLA}wJT9$`CQb=eQZJIiat7O| zt?Wy!JlD!=FXR!y-J!#MxphbwY&-hgi!-Lov>*-okQ&X1_nh`*sj@^CQjLBkmWT^M zfRXX69_skA<s8JyTATQ}Nlm2W)!EhWH}k^%h~ZO7)eObx1y-sD{)|{5^>t^(c#3C% zXERSX=Q>uFSI!Qi_Q;uav(1H&Yq?{ViwOE%%CPvC@k%;{)5(mt5?a~&5Wh3qH2~%_ zfIw!YX0|7ES8`_hva63<p7MA}zVG@meKKxWA<eVuGnV<zpWL5fM3r5Z*r5AwFmb{} zHEEjC79RWh;=sS2F7Stb$#^2ptue9$_R&mEY4SGg1XX0(2hltH5fWC|)4S0hcHY&0 z$?xNtlB{Lxh&pJ2DykMXq{Pp!tAEdstcNG>{kX|v=k38QMF2P%Y_bW%MxP77Vt!aR zz3L*0^9YDy$|84x_AFmFF;$SnWVuD+<+ZtmG0Q3LF8a!3IS54TFL}%d`Z7cN6!}T- zTuA)IE?@(jI^_g_Nqb@S$5@-e5t^y}IRwT+z$8?&x{LGpj!p8OG8w@!M0O*{O;y8` zZ>`AryXxlyeKmw8Qd76n4b-}T*e{F6@Z}+TQVgL<gs7^7K;9%H{yU&f+?vt^dtMg( z#RBq5<d9zHZ$~i8eI=vHOwU4$VHCy1+!U~ud*yW}ei>NJBg>KwlOx9la@qB`9Amib z-_&Wq4-j`~@S5!WOr8Ba!UW&M)!u`KZ7LLddDN=x4(2cK8MF$uLW2ryLfhsz3XE<b zJQ(M>^Ahz*T!hv^h54EV+>=-^3eY8I4&;SH+n36LM+xdokgoE{JaWJGT7x)e$Jg*4 zU}0P<D-l{Vlx>5sCS!a3xc!;DuG`GuY1|Qt%#fcNDvE<oUgSE5G-z+=?}r*q$$Xbg zz?0@(U;`x<+p)^HYQ<q}+{pAS1UJgmCWlM?V6&zDK<xL{fWTdWVt-|S=8{ts1YifZ zkddtEEW^BMN{aLEhRSJBX8nyMyzDX;h(Md5dp@VH^brC|VDd?^1IicIRLrTrV*wF1 zj7d#wpLGMbD0wFye<-@o-GM(YtzdgrRpB51u*%LQ2uJ?-9K{yIp0=o*66dWwL~Mp? zU(yJoVjMKE2>;%D#J1%}->5XOm$|ice!_CZVop{3%Eb|P%LBDGq9OcBUR--5ZSJi` z^sqZt)D^B2`KH{FFkJ)i*QJ-FeC2PBpa*yPyJqbH6HzA2k)m}3S#@B>=)j`^Q^@v@ z(<2jyH3WSNNo!%B>x09kZFx!mMoN~`NprjAKL2BO?Cp{k!gx=8%q{1&z{?!xpkSy; z#Cg6Q!cV9Of|+2YuIyi(h`N?{%05Tf6U|`Q`IK;so2qz^Mbcdi(+h1(&j!O_r|R49 z>La1#kxJCRA;`2pJjhaXR&if}*D!}6C~h^|=M3BeM;Uf}h<5hen(v#!hUPIei!mtJ z{s48p-lHKsctCfq82jwvHy!urlmjyF1V7o=EV8$uLX&-1w|+;*Paf>HDOGU#?`76k z3TIQ5O7&vYBh~BHA`|*J6@o8xZ~H7veEu`?U+kp78YqcTnRT1mKzvj<P(tf~!SSbS zG5z{Hf1(zEV=gQs)|?t#+Q2h7-c}UB1Y-@wcN2+KRejB`rJ3ifYwHe>ej-R{{=#tW zo~fD6G8_4=xO{FlQFYV`6NF%^kAx6h#ae?DKM;+IPyUs<lFFXc2EgQygGye7SG6Sj zr8R$BXQL7v(`eD|COP5I<!7ZGP_b`{1x{wnB*Eb=v??P2Ht*dnXonmO%1U5Z=;iXP zQw!;SC==*Wd~)Y~_fL@v*%i@BeU&{5ED>S_-qN{<96~<Y-^U&}(9m*}A}Xyji0JPk z7MtTlODr{NY#U<YptTG4RTln($z`<(dkhK1YfVKDFf(c=4&f`^9<)AyC5^_#5?w7l zXGGtNgcJ**d~2cHW`QI|a_=UE3}rqQQL6@yE&L*%M4We?81=FX?>&VMX!`Gngm%`q zMIJ!gNuK@$t2Zr`sSa@Lx19*V^Hj~(wFdjpoGhuuR1+Fq?tvUq8cC{hf$j4){QvAH zbz`wYD5vXYES!pe!)uQn-t-@r+TTnIo+yHSrYODw_*_-pl6gacFG$Ag&2y#dZsK^# znnPdRGOevwITFtXhrk)fVC~fEj5JHCtEH2CMHwy@k(;Jgv{3K~NnT`v6Prqei|4;0 z(2WW$r!~CX|6MJ}&i&(M7_`SOK}nLb00*$^q)6H4Rg>p~H#KMf9_L6e_y5mCB(p(b zSp7JKm)GyrNrwt9l9(oTquhVOmeI+@o}w()UjN+aO-K3?4j8LO-(TcQN=8)+@ERGc zayp78f*Pl&M93A`=#;WOtMcYY13VbeyDmyBu7R~AQ_+xYyRKh((~aTZ$Eh&*pK^e9 z@FW(nt6DAG(e(s8@c<n$_@)~|8_7B;gcP!fFsgUxo6!(Gz{-TlY&!827G=3lw-T+K zT5lse4}9}cv#1w`R*S*I`o@V^xF!6Lnc}0bab{;c!vn<=YvE0NHVj_BR&bkXuq=lF zeFCxfj#60mJ3%f;6uX&7KK+FdVwhg$H3Hxc4RdJN#M8Q5Jx|Ua&%78#ak<^D+)4kR zY*hy3>MuA8mU|dR79Lm58u$X7QvS5|uV4O=h+7od^_|X;^O)416+!6%s>-1sPgA@+ zLV~0-4yhb#>LQ_EbH>b7tQt@L?~Y3d-GFgQ+o3(ok8-$CeOa;M`wTOcOWJ)I!486~ zxOoQ~p*ujLTnl5)afitYG<&AHq4bBHt<vli)vQ+?b{qsKH(<51OF*cbg-OLZiI5k= zsV8^mL9D2!#_do5r)4CzBxdA6rE9_12WnwvltSfZ0b5{z6gDfislX`)38#EuEOc-| z?;yOGFH#-`8&}%Q;o+Rrpc`lUxNKW67K`a=BtND&PE5V)MY9RAU4{jbd58gCX{$`S zgIO7is@8`^(z;*l7oj*FZ5wbhKO<t7&~1l^qzF|-6MN-9fXk7BGc?}{QpM)-->Zol zUFW}WTTTTd{-*fwMu|r%`!1$G6L}`a&6V!nYWQ?`s<*x}L^Ng$rwDpee0<u@N2ea~ zPrH%IF{o7iwTFpD6G6VA<+~UMXEWS&;nfm^@C&$QP{fifGgxZpba>afB4)Y2x!;v9 zYP;^Lk2W$SU_}_DE4jfVxim#uHRn9(R7A;&4MgALYK0=>NDTkqttkun?b?(WZftM& z2ZZ*+vHYe9yAHYaM|;(W8+4_BEV_i)z57E<`L)y@gmmuk(XHoN5Q2aMw=NvrzEGl` z*wAv@X|O1dlHEt~7!Tvf;RZkyzqDNS^%=tv5@l<NM8IKG*G#F=AR`37k@iD|7+O8| zPx*XDv}x7ziI`3>x#p4&H1%YDiD~SAo4!;(qUo2NWg*LY&v)in38*c*fr~%aalbGw zI?p229e0Tb9S-L!gR43dopCrAZFkfoo&2hi;KM*MB?<SwNup&Sg}NNWY8*t;m?wgk zOPQ{VF4PMmrHqHVMWmBoCn9r}u}3^`e;l|tVIvyzS7ZQj$x`xJmpLc(!;0@41|hh^ zFv&G95QFw17Uur6lu6d2bQEuSK#c*zQ>+H~I>;eR$YIQV(<e0K`XH^ssbFAhi`IQL zVq4!)L6sP)0MSmrq4CkPIWm#GtF&WYNvjJn&Dk4eG5e3WJPwaDcx&%;n9a!&R~18> z#z4gu2RZpNBQsnLa?>%(INc=jE%F2(eyOMvuPa;uC=ww8WF6|z(V3^N?`{bLj9M5u z;FIm{t=$8{DCp$R$RfOtI28|#R<y`#IvmRW4=N2J_y`|t_{%v2E+~L<Jjj=vACp7# zF;<!30?$n;u-`m3G=!5=32Y#8p6md!Mxm}%&uL^mb!;qH!sqA+_qzt69#oe-XLRZy zfBOJf-~xa;v&T}sOD)QqJv|(b-q*&BOtDT4lX+B#G9l_^k6po<F+V!3lr@Rp!TQ}Q zJ|T&Y=P1RbrbYOSrYrLM+{2vj&iJ|50~^7K74hgvbmqXxm&0kJl|y>wF<VTlktq(l zVeZFSZG3f!6F{?*H@fZ19lqJ66@PMeUNF3mBVH{<1RJLaw>3pNvLX#Nq4%aCH8L`s z0B2e~FAMVz&h6QF+rZ`_%xo;sKTg))>KkWsmLiDbSkWEETi&7ZB7eo!T91rV{Rg`J z^t^Ld6ahfHv9_0$m32kr31d}_CXF)<Jd=?mWEFx$cVkrg1XvQc3}~h9TonwiNi_nx zjA|DaTn$|JL)8ynia`v<hjY}ZIBVA|^1J%0on=lY0x9M+lBcif3t{;d4%HRY1Z?bu z7_Vs44Bxt_5z+v%c`&PIvUF~Av^YfkgkfQ=<;j7}VWF+nh8>9)mvT*gkMB!cS;Q_$ zPG_l@YV=Ih6lkpNo3KbDE-LzBRHmtGX*ZoI<zI`8jUn786A2QX8sW&mrInAiK7D5y z5lw!vZ`q>UA%=FLAY1v>4X>2(ZjYSQW*z=atd?wbsg0F>>+%V=iCx22vZa{;vkw2+ zVC;|1Qo|qe81CilKsnmOBsEvREo+CkZ8Dld!5WOJOL8~3F+X@~{fJBNV4<rO><f^4 z0twfGe?)=dJQ`@F<K#UI0u3ovh**YsV%&-&7rkt#Wt|x)UhVi^d&C%fDl!0#xy(`O z_rWD*ih0j2c<@lV%Jwu<t!=^$SKhCtX@_NOYR&C7%G9Q;n28*GvWw7C*j$FEhv~S~ zJ$+SyeyZW;j3x&B_DB!}X15<DLqn8+asR-81$dgyCmM+$SRLe?RJP`gC+pORp`?pV z0jKp8PsrTn4*>E#wBV|5qb*d#R4iO=zJk|gmvY{ID??XB7epsfh^UIwsaPA7o?jRY zeVSHg*wj`}h@bNkPI)QiptQaH`ITiKbTL`wCnB{3+pl96HsYXqxsTp7EJUMSAS?BH z7f8KtG6dB{?P-sW-|3w1mD&DRKZ*Q&|A4=vl(F9p4i^mLeRoY&ya`wO+QJ;oPdnVy zgCe*>-9I?GorZaVBTg~|+*hCYRoljn9>L}*joB=72e-^4&Q9pa?Mg<_Z~&<Voq=C` z07HpZHX>?_VcYNV;_L-R5)ken;(I+gsQZK<RXy@FgRpaDkM(QCi%GX29(E*u@~aK= zIzVUoZ7?3{R{|aaU9mx*DZ<3N3&O&EuXvFKGsrfiAZq~z(CV$ngV0|?ng+9Y@Gv#% z%s`K>D5)jlifQY=6bpgbm&YbMdI5}ymN$~Au<~rxqOA)%43JVDJHHZ%NN-pNt=aSa zXF9oF@jPkl(Q)^e-za7stC7z??*W%_)UO<?ew1Mrp8$AiQ{CxTW0eRi0u}7(u)J2? z7+?@3Q=XfG(T;>}Z>Q;&+aoul2~&gKQLaqymaajEQ?ZH)ax*BAN{HNz0scaZ9cer$ zSvt#%2_mjxQC!gF2|2&byKYbv$1AXlSco)(J#Hcm2OS}xRb4@=GOPyJFHp7wJ~WIW z&v?)XJT_eF-j=%_Tg{O^^Fku1;vP0cnvEg~82uimfqc1plo=QGW)nrZyFIR*P}QV` zbG+aIo}r%cxFh*8Z9pl=AiQqh_aK~5osb+?KJ9mSnc~-6jo>%AslPMTq2yHBd`I4V zA+GJ!$N1{~zK*t6qUaynP`BnIXdxQuQXWV`AT2~Sf1qwh+E6H5)*-u<ez6l1Oa~+* zQH2tTTEP>eg1VuBxBaAc*J?$susC}}mt+)q?=W8G4&~`tR9iiOf|Kd~I@6SiL=`RL zY{26&G~8O+k@8zI-_(X@gW5klb+G;pD|gG#vAV%RI#i<n!JBN}<F14Ei^{M0)&CD( zLo5k!=VI~Pi$htmMnvOGtTD%l4=8cW41#g=mbo#O_x0%n{Xz@#r#TXJBw2q=gUhVG z_UF@^Lf~nn&4#iEE*FykC7*85HAe-yx4M?LgGl#J_w?!yud7afqi2I2(ry`*HJ@j8 z)&N6-2cTn|Fq9d!mY39Y{w2N;Oq@;g($NoAJ&Aw8tZ7!*rBfOAj|-g?qJrb%a{!)2 z$l#a6Yl}~|ITOD~5UU{OB3G$dh%0$ampyCeR31JbKbx|<0jz8OF1%P#J=_&bD;-z3 zv*ToOB!al8=sR5a!;xCTVL;z#A6|~M==!>9*Q(^9Dc_`l)xjpj8HHPJm&NaXPyxR} zHr*ZC3xY547YQZH$ozHx)9I7@5()Y-5NRR}TNBh?3?vH!so|t8!ilnGj+qiy*^ta1 z7tXBp(Dpif)EPkNcN(UDnpM0=;}eua8Pd9K`W+AyoiARC);nt$b;1Ul+<BR;zXphj z?d5|#JwUnWj+MnxX*?>fGw;E=Nne*`=883AP7%gu#!dH_#KwfV;KL<peUA)@e#~f^ zc1RNF+vSab7c7dOLi50BewDn3IVzcS@I6EJW@TMbP`b@f-80E*(?M*}6eb$>?#1CK zbin69e{*bw2J=5uyRrhc@#SDorKfos^r^;zi$07?Jr>}~<|+oRnh6)TaY$c?d==`Z z({W`AD?hx2Y*3lgbUA23hKQ3J=MI%({tBk2Kv8ZqB#w2qKN-stP@;3({klM`v<P9I zxF<$B2hIY$JTa8hyhBiK8uO1tS>|RCd`wbe5=kYToS%bv<diCS7;Hh-er^?@ba~QG zhK*NM6c}-SW#eWxfrfjzwp_G>0zrjcjc3?OzTTBDZ)9*QL02N+@H5#)7X;BLf+)*? zTT4q;C0>e~kE)5H>58?Al*0FoFGqdl?5TRjU(L=paaS2E?6i^L0OF!4ExI%tFR`o3 zgX-wnWh|#~<}=>xUZb?h6iLUn%cp&77uvEML+oypVa;BDE>Y@NJIMdE6m9uUIA<AO z)9@-$a;lVUMb+0<7W?pdb4A`(UjZj)w3~<kM3!~1Bjqu6su$8=3yF3LiaoxzUhuXB zNXyu2T1F4C#cVg0rM+aXw+-q43ZWBT>|QP0h4zJzGlnNV*cO(@hZPeej`He(==&<d z;S1Mc)t6J7v;xc7C$xno0^`xd2)<kFNK)t8a8M!*!hJ14OWg!Cw+)^T4Akm=TY=Ki zG%9$GpgAN4z4~&D)MNSo--l~<*O9(v4R4=#H=c!CN4Pop(BC}n8Ox#j_MPHCHoISo zg_d^%X3?{s?~hKdBg8K{nB<#EW6k<t^yc6mc+=&PxWf?t35NF3u~D1dZDjA#VQ(8p z@a_<SKp9UA9~r9FMjO6sO|Hz$p09m9_gLpec#@`jHuaj!ZurX-GfwF<5U(HlD^Y3> z5-9`zyUR1J)wQ%CA&REJwEe|~u{T+UTV<dCUhJmp)R<uVKErfR3?iibRC)(<hNRnE z2k5W{>@n4b4QlbDl<x&a)gW=OC+KT^<IwQNt}$716-;1}d}w_bl3Nc4y*^yessJsN z8_-mj8uc5HzyZX(tpzf(!$h36%~z31EVq&{Q>Q(FZKlCMwt_qQIYxt`5w3QrTD*sJ zIg4czd3B!^z%(Om&h0AL;nH2eVP^9Fek~pPc6p}ftk!0<E+ivH!rUHN=#h?hHjKW; zs9et)PMI{+KY13<aY_+-e`c7KTVnt}k(6dnJ9s=v@ehoifh(e01S3eBFz9ZE0&MF9 zlW=#Rma;1Mz>-g6;tVAAfM>+c$g@XNzW;@)kZ}9k^4M-VV~&V)59K1y<9Ew{@PXh4 zvGz*6m0m{CWJ)rV;i2iSgDfo{q?Dq)gLp6|sCO}dPRbv(I8VX}AS^iR{qGk1%v?P& zR7SI$(gW{+1%1_F&Hp9tK`U&W0zD8@Xhi(Bf_p#b(ygQ9SD89Q3U`^GeJyHXeBGoV znEuJdT*04{p8Sbp8dU12Lf`xdPz}f88kB)3SkoCqeBIINj$ErIz?R2pbg#|au3B*9 zNCKUnm#kSM$FMWDCamlsbBBZ>k?GFvpmin4FkGm=?j<!U<w+Lr>~KXQAL{o{+yI~} z!Uu{IZ$rPklXd&<-pqaDBUiWo(rEpg9Xp+kd+sTN^ZeppPyE?lkW^|JMFZ1O>2n~| z3(<;Ghc2kG>>T7eabM4#9<C9H15t;pJMe)eTiGtqrH;dhQ1mza0Vu~h((h0pTi{4+ zx(Mw}R`Kn&#*(6IcPMkes?cIJ^$&m1ybq9HG1QYgPZ{ca=hdo_y%^afbPAJ!Imz)C z&M9SS?W?WX@_J6z_ROQ<U#~e!3zK^AE9NT9CX?bFZ_p3vKthU5_m|SEa$m)uB0}C1 za_?lgx`4H-CqlrmH+m_T6jIK5@h5z-MTQ1!s^nkJ6kv~0iXh*=6Ph3>Zu|K?fn6Oe zs^N}7K<-hs*0~0rhb;uN*1gd>h#YlO+O5jZ;y$&P@Y^GVZ1?sqEK3|B&?C=EPyl~U z%G~&2&E-aA2s>!c8+QT>pBlHjAi9?ZCP8@Q9X{foGo=s%UyqyCW?u*$lS!V_fAkD- zsCfgR7yzOXaTi$wLzD{VshFO9g>B%cqN7KC9#uLvwWeiLR?oC^QEL>)+SdI02mp|` zi@d%9GM7T)YM!LKReh##Q7R<Hes2~bh=o66Mzw9_m-6(H^Ksx4G-)LEo*<f_{9cU2 zL?qo(6^(78FSvaYT_uBzYD@c(t!}$iJPR>tsqBAy|BgB;aF%c&Xg~jGmO@|6krj=q z55rX6Lyq?XW%R{HFp<aC{PLnYkeTl6^nZ>wY8`xZUSU*lPXiGSL6eN&%QD|xO=-eU z_sP@(Vl8!tuy-Sl-0e9q^FHIq1I;Lpky015y+x5BJ*3^Vi(1@(PDjrlUz?h&=DytG z`<d+_JQ<1sBGa}c4AyZJCf)Z<z!{p!L)wPK^@c6l$o~S^Uxcg{rZU<tiOi8{FzN9A zs{kN{0Awq`ejlPLoG@D}p6*G_Od`!IMK!FkZE*XN@-1FP46adZQ@Pww9)du>qsAkt zDL-{J`eFH&v8AK}_Zcen+;DVCRBc(Ox=SPa-q0y-n>Ve3Kps|!qgfDGJ8*EM<<$+M z|KZT~q@&70pP6`TIPu$1Y4}{ye&S;~hH1HeOIP4Xc}XpJ7&XYadTEe6>lbQ!!>unw zk`ijdh9+_iXA_PpROmXX@5lamqiW<;P*x$w;PBIC62~UkhIE7Q<(#~6qVkNDl-xpt zHjIx3yONX9ST=S4U#$iMrGGuKmbvsPSuuT9&O_+7A^BlzE_~z!pVT0_`GlwH%7I!{ zmjflsI%?h9%)~W1o)~R;wAt^VhLvct6GKQ=j_=N+)S3G0qK^Sn`z`KH`HxPhoiy=m z%Krq}v|&Q@;>>Vp#`l2#Ei6k%Q*6n9*V)aOb=!Vp=`dsC)c!$|0cH*h2G1E`iW>?b z+P~*mbuxK|US^R0N55N85w`B)E~X4gGa05^zg3^qiLTq5FUj8<Z&V*V=Iz5T_7)xG zggLn`-ZU?4k+Sl-IH?;1eK*ft)M$R)C2~pW4^l~@hE+7X2UPHbvPIYMX>Yl`c{M0e z`48u9x$_Ja5Uz165#8IR#5yr@lD$ov4jiSWGc>CT^n97OL|leW9zXZhB#^De3i$O_ z?$q)Ncabj{-+Gzp#8C~>gW*?EC$G&(N<u>4rJ%pLc8YC=NwrL2mGsl>l&z|!I@?lr zOg2iK?f9V509Q8CW?#M9?G@y-@oJd9QYt5MSCM*Bq%YNd%ol0+LI~QuZq^7#<o~$7 z<2m(*9mrsAObolj>~jKr*}Y_q;Gvs!Dx^iZnbpg9xuF)Vy^mciF%{85z?x3B6VEtz zo2*xfi^O+f9n*az-y`|wjekv1Gm%Qwvs$!tibUWSVN1XKcdP%$l2W($Sz$(yy)Rk8 z_rt*){dypPfiDcHZ$N}m?~K9c;K&U^kUl2iR(_Lcn-`jP=XnaMV)-wE2M4Pi@)Oqk zZZoNzqQJ+ZW>L<lk`$#bu{UO$d)uj-@B;Fkpcp9EhO}c&Luc{kA(g9RncUo?05^jR zrdT0FX^NqD+HbHuURf5yYu^wuQV?f9FrUSy!#Bb{2(o%OxAwQ$+!l?`3R|EBRfLg` z7vNs3`Y>E%A~B`V_@et%8ezXQyfZYo_ZMoKzl8EymV}IDH;3=Uz`CPsPmgcF#F2l~ zqkBHRr*L~A(-#>4qp$*1w9lq9X9sT?!rrvI(L?e%?!*WkZza`CvmEW)BkA-=m{jbK zaSbV2vlb3nQ%w>nzx32}{9#4GcOLkrsU+o9E9c=$LuvrK3%;bLEh+?vbf-CY<3<U1 z>g@8tZzVZ(T+Vq;KqPxBQTF?dHuv+ic0)G{f2B+1#R*!cb)osJ6m~I5_Xi-`rdak8 zmkhWx*7R6f&C|=vXP@`DoAmYzjSgdaLqtprKm$uPyBtF$rf2}SBmtWSK2}gkv{+X% zU{@i}>^Iz%plk_AeDx@6D?qWG%z?|@RX-C^YMv7jB!;soYC>8PXvw7zP%B>($3uyD z2QL({tKb7;Ly)<8|Lu^3k$d48^@ZK+{}v1<Es*UUdJN5k+n(jciH0mEDj;i*5UxoP zPe>b37=nZ$Y0=mSw%VIFseD$`=45w^IeGupgD4LTk2LK(>!)PmN-Qo|j!(Y!N3rAA zFh2%!B5PUJe8{a*Zfxq-4$xnu9U0G-|5N4h>2-V>W60R@q5<%OU|96a!$15^b$!U> z9$SWR{a<?NrnP>W%TMyq{!+!mcW=FUe#8@GJBXVn2<%O7jM}E`C4bR+Bi;a9{L&2z znUR!rhYYonOAs>*M+K`ycGglf@+DlR=+e6ENt!QuYXJ_taR*wClLjr1%U|8KvGd~~ z;n@mnd?Q6mVsSM)sp6$r0000gc^z3PCC(0V+L2B1;65xDKx{U<*O*tqcjFZrULjf> zb)6@|?SFW+6hIVa(ZGM|=|l;=v7cPw-9GAked?4z?Go9Kf=eO4HF3RPr@&nsBfV{U z%?SG8ANCZHB{eh~|I>@pZ_l>?3S|lD)y|9ShQ4>07M1IsR6&xeiyc51_NrwY!vDm= z-4!z8rc@f)WEMjK&-0k%R*#tRX=kP;XyV@en%%9b(R`?k0Wx>-=Hq!L#;o6;2C$Z4 zGaTo>9@-<ZZHD%aTXQ;PQNatkV4BPcYq7|JetfEu@jT)>FlZs}F)itP829Y6%DqiJ zbzX=ye|=0lRNSDw_wx=t(Q-g@ImiR{K;fYsQcDnEXuxtsMxT!rL0izeghD~CNQ41b zx(I0?!}yexxsh%8IrX?tQB4SK4{{fCMYI`rpnQJ_BUc<F>bMYFN4Nucn7Xf~AbH~r zmAw(Z1#DF+C_(+-&P%}rD1Y${n_McqF-{|*UoTzLQW0zr*vroo=igqRy74do00003 zB)c|EiFU)N%#;}88;=aH%Y`P10Y?C|5o_iNM*{V)X%4TPL-@+JT$n2nx$(XW9P`>d zmx>no(YBi;XTo=3IgCVQEy0{Cm#R_kOd8v*AJDr^s00OErT8I=6LDB)9Hurc*aEGG z1Q(k^?hwc_gXOuU#tBYfF>u<5_1E-%ko(OPZKYrYdoz_EY%1MlJX#M}PeISY4CFuw z$l-zUKM3E5irXRti}RcmYs~<00MHrGWmoqa-luVg(jno~O@Qw2mg>|WZv7pVtY8hX zSML*4ez;&}Tk`t`IXap2awvPDD45Aae;`n%*nG@h^v(<cg6Dj5lW~uK!|;?vF(vy6 zaaAjIf0SUbaK*t|6x*7wt3FqX^N#}Jw!iNrQKZoZ60;aOoGavdh2(2jw|J`vu*K75 zb+>|w&lg7p#)`zSC|SYndbz{d39cXwet7XCyKq^jjT-nVR(~sA*iVSPZ6FJAW3_hi z2z9$0U;s~sx(wk`x=3<x`sGG{tXWg{FkybSBSaO<ZmQaq+r<kN?%Woi<-aa(L<||K zVawmBG6<PnEs`#ZLY@VBsJ_Thf-J6Oi3yrccZnG&Mzlnt$CabK4q~}>Xu5zT*ehe? zl#<&6A)d$VNEGN}+R+BulUnt>!<#i>^u3A$WFT&|scy@;l_k(&GZd)fdOIZ>>8^aO z4Bxh;uXv<1PH^t34tdec$t<1R*48qQQJW{RlFKW(wHss=yCFfKEzyeANLJ*WMzlGl z7EV@8iFeo{bxVx2jIDczc=yg9u12u83faM~AKc7AzG3q&zuyFF9gjXdFDq(&1QwYy zg2r0>sg6~CcME(OBb9DR2uV17D<<^KHf>E0K8*zKcaq&xs2fOHEVJC~OVG>MsD$Xp zr^|8sMC+GDzI##$N62E0URw!=oiph8?9b9<udzng##aSl#v=xxl%HXzHBa66O)D!k zfXG!I*S6xD#H@$&i-aOxUjMI`4=8JB$u3O1dg$?wwaX@sr^0~Tsg^W$$uI8bDjL82 zb9WkFi%3h?O;Kz`f-24mAD6oTlLvh@Is@x4q^4hd&wvh}2H6u566pH^xO<s~yo`7H zsJUM=kZ<&8s?|B^)$%F8{6B|-m}V!xDF~YT9zCFg-&2*3X9_$(M|~I-;3L@{75ZAL zSwzopP~SGG#eSVllBfYCwy}sIG`9o+AqnR(YY}+Bj4yi5TwWH19WhTBAcIJ8<aun0 z&^e{B^nLaoIUHC0-+6tUrD}tOABF(#n+Mh$hyVr<oZy?5s+6pm2__{sk7ts^5$gal zS$-=enUQYh2Pg#a3qjBtgk4ZuNdg6h5rhCG`50v2l9J6mM0SG#Zu*HU?=P{iW))YK zAo9NHQ@wcu8&Cfp;A)tWTltVwTMi{PqKFQWWZeM_1}<CC0{U(dLSFKY_L&2Mc&evX zoUQ4*gGZEYm5kW=v_ew0KAZJe-@^`Iu`B<;CxGkE<$x~kXq;YVxqxzF>(slDgBrE# zgxWha2GoKwH*Q=;tm7#j0f_l70aZt~X;+PPUPufB;S&dJSI^~~RNu>T4M}ir#6;tb zp$`oiDOcum(FfiHvl@CGXowsc`e~10<2RPKd>sUuD1))ce~AA$c8c(x*vQ09GXSz? z_F^Z}?9<=$T!6Yp8X^}D3<Myr+?X3M=&TkKhCiNE{s+ptWrYfs7ooW?FktP*FcA*$ z7vw4uu=<<>2|WC*f_slQ^FajxdS3f!=81=Cfy6093QQyW08OUf5k1)G*?#M|Ra?Sb z6GP0=5P~#!_IQURUInu_^#=ohg~1IkYEjM_?7>=v4(Hf{T`v4&-`DncZ?~AU*b!pa z!a!QdU3O*v>$V3kf6-p;>mTapmlzixCtHyFos~C&gsR*5zrgpfuD91ad!J}1*ec6m ziu*&7!fS=tUZK9bV~hV9f2Yk6lCJ@oG3~OBztZilN>uMyL(a7R6wpP&rIy*y?6IzW zOPv_aykXLf!rOoYmeDMzgoT8~?M+TZn=TytXDE00z$Ln3Rp<&Xk0&C{t~w<DtL<<o z8$o@V%&5H_v8Q+mxHEe<lbxq)0%=;AR(Rad4UCd^H;#0aG^r&9NM7JgFO9Krz=8_u zDT}*k1Oq2DTJ+6ZV4a6sdVr4)YxRx-?d)O*hB*0L!G3lf{ZOZp68VXAaIq$2MBrem zX8f1i=D>|U?C2C@arX_%p7g6O3?rY0YjECMaE5lPgKN2)JkHBWiGt1_AnDK|{lvT| Jn<xMP0076bcf|kz diff --git a/apps/website/src/components/landing/HeroDemo.spec.tsx b/apps/website/src/components/landing/HeroDemo.spec.tsx index b1c53eafe..37b783cc9 100644 --- a/apps/website/src/components/landing/HeroDemo.spec.tsx +++ b/apps/website/src/components/landing/HeroDemo.spec.tsx @@ -101,9 +101,12 @@ describe('HeroDemo', () => { expect(HERO_POSTER_MOBILE).not.toBe(HERO_POSTER); expect(source.getAttribute('media')).toBe('(max-width: 767px)'); expect(HERO_POSTER_MOBILE_MEDIA).toBe('(max-width: 767px)'); - // 585x975 — the 3:5 phone capture, so `object-fit: cover` crops nothing. + // 585x1359 — the 65:151 phone capture (390x906 at the 1.5x ship scale), so + // `object-fit: cover` crops nothing. Moves with the recorder's viewport and + // the `.hero-demo-stage` ratio in landing.css; see that recorder's header + // for how 906 is measured from the replay's own block boundaries. expect(source.getAttribute('width')).toBe('585'); - expect(source.getAttribute('height')).toBe('975'); + expect(source.getAttribute('height')).toBe('1359'); expect([...picture.children].map((el) => el.tagName)).toEqual(['SOURCE', 'IMG']); }); @@ -118,10 +121,10 @@ describe('HeroDemo', () => { * files are re-recorded together, so re-recording the walkthrough shrank the * desktop capture 38.1KB -> 33.0KB and failed the phone poster for content it * does not contain. The phone poster is not justified on bytes anyway. Below - * 768px `.hero-demo-stage` is `aspect-ratio: 3 / 5` with `object-fit: cover`, - * so the 1200x720 desktop capture covering that portrait box shows about 36% - * of its own width — the phone poster exists because that crop is unusable, - * and it would still be worth shipping if it cost slightly more. + * 768px `.hero-demo-stage` is `aspect-ratio: 65 / 151` with `object-fit: + * cover`, so the 1200x720 desktop capture covering that portrait box shows + * about 26% of its own width — the phone poster exists because that crop is + * unusable, and it would still be worth shipping if it cost slightly more. * * The ceiling is what the recorder actually budgeted against when it chose to * ship 1.5x rather than 2x ("2x would cost ~51KB"): the mid-30s KB. Raise it diff --git a/apps/website/src/components/landing/HeroDemo.tsx b/apps/website/src/components/landing/HeroDemo.tsx index e0098a910..67268d1cd 100644 --- a/apps/website/src/components/landing/HeroDemo.tsx +++ b/apps/website/src/components/landing/HeroDemo.tsx @@ -7,7 +7,7 @@ export const HERO_DEMO_ORIGIN = 'https://demo.threadplane.ai'; export const HERO_DEMO_URL = `${HERO_DEMO_ORIGIN}/hero`; export const HERO_POSTER = '/screenshots/hero-walkthrough-poster.webp'; /** - * The phone-width capture of the same walkthrough beat (585x789, 195:263). It is + * The phone-width capture of the same walkthrough beat (585x1359, 65:151). It is * a separate render, not a crop: the desktop poster shrunk to a ~348px phone * stage is an unreadable smudge, and cropping it slices the right edge off * every line of prose. Recorded by @@ -17,7 +17,7 @@ export const HERO_POSTER_MOBILE = '/screenshots/hero-walkthrough-poster-mobile.w const POSTER_W = 1200; const POSTER_H = 720; const POSTER_MOBILE_W = 585; -const POSTER_MOBILE_H = 789; +const POSTER_MOBILE_H = 1359; const READY_TIMEOUT_MS = 8000; /** * 0, not 768: phones autoplay too. The poster is a capture displayed at ~0.86 @@ -29,11 +29,13 @@ const READY_TIMEOUT_MS = 8000; const MIN_AUTOPLAY_WIDTH = 0; /** * Kept in lockstep with the `@media (max-width: 767px)` block in landing.css - * that gives `.hero-demo-stage` its 195:263 portrait ratio. This pair is coupled - * to the PHONE POSTER'S GEOMETRY (390x526, shipped 585x789) — the poster is + * that gives `.hero-demo-stage` its 65:151 portrait ratio. This pair is coupled + * to the PHONE POSTER'S GEOMETRY (390x906, shipped 585x1359) — the poster is * served exactly where the stage is portrait, so `object-fit: cover` crops - * nothing. The ratio was 3:5 until the recorder's height budget had to move off - * 650 to stop the poster opening mid-table; see that recorder's header. + * nothing. The height is MEASURED from the replay's own block boundaries, not + * chosen: 906 frames the whole streamed backup table, and because this ratio + * also sizes the LIVE iframe below 768px it gives the phone demo more viewport + * than the earlier 3:5 and 195:263 budgets did. See that recorder's header. * * It used to be a triple including MIN_AUTOPLAY_WIDTH, which is no longer part * of it: autoplay is now width-independent and this breakpoint no longer has diff --git a/apps/website/src/styles/landing.css b/apps/website/src/styles/landing.css index 036f1eb80..c0698d6c5 100644 --- a/apps/website/src/styles/landing.css +++ b/apps/website/src/styles/landing.css @@ -2004,11 +2004,13 @@ * the iframe autoplays at every width now. */ @media (max-width: 767px) { .hero-demo-stage { - /* 195/263 is 390x526, the phone poster's capture geometry — not a round - number and not meant to be. It was 3:5 until the recorded walkthrough - started streaming a backup table taller than the frame; see - record-hero-poster-mobile.record.ts for how the height is derived. */ - aspect-ratio: 195 / 263; + /* 65/151 is 390x906, the phone poster's capture geometry — not a round + number and not meant to be. It was 3:5, then 195:263, as the recorded + walkthrough's streamed backup table changed height; 906 is the first + budget that frames that table whole, and it also sizes the LIVE iframe + here, so the phone demo gets more room than either predecessor gave it. + See record-hero-poster-mobile.record.ts for how the height is measured. */ + aspect-ratio: 65 / 151; } /* The phone poster shows the demo's whole frame, right down to its own "Take control ↗" button — which lands 20-29px above the stage floor and diff --git a/apps/website/src/styles/style-contracts.spec.ts b/apps/website/src/styles/style-contracts.spec.ts index 5b7b4f0c3..f0434ee1d 100644 --- a/apps/website/src/styles/style-contracts.spec.ts +++ b/apps/website/src/styles/style-contracts.spec.ts @@ -436,15 +436,24 @@ describe('style contracts', () => { /** * The stage box, not the image, is what `object-fit: cover` crops against. - * The phone poster is a 390x650 capture, so the stage has to hold 3:5 below - * the breakpoint; at the desktop 1200/720 it would letterbox the portrait - * frame down to a two-line sliver. This replaces a `4 / 5` + + * The phone poster is a 390x906 capture, so the stage has to hold 65:151 + * below the breakpoint; at the desktop 1200/720 it would letterbox the + * portrait frame down to a two-line sliver. This replaces a `4 / 5` + * `object-position: 40% top` pair that existed only to crop the DESKTOP * capture into something readable, which sliced the right edge off every * line of prose. + * + * The ratio has moved twice as the recorded walkthrough's streamed backup + * table changed height — 3:5 (390x650), then 195:263 (390x526), now 65:151 + * (390x906). It is NOT a free parameter: below 768px this ratio also sizes + * the LIVE autoplaying iframe, and the height is measured from the replay's + * own block boundaries so the poster's top edge lands in a gap between + * messages. Change it only together with the recorder's viewport and + * POSTER_MOBILE_W/H in HeroDemo.tsx; see + * examples/chat/angular/e2e/record-hero-poster-mobile.record.ts. */ it('holds the phone poster ratio below the breakpoint', () => { - expect(declarationsFor(phone, '.hero-demo-stage')).toMatch(/aspect-ratio:\s*3\s*\/\s*5/); + expect(declarationsFor(phone, '.hero-demo-stage')).toMatch(/aspect-ratio:\s*65\s*\/\s*151/); }); it('keeps the desktop stage at the desktop capture ratio', () => { diff --git a/examples/chat/angular/e2e/record-hero-poster-mobile.record.ts b/examples/chat/angular/e2e/record-hero-poster-mobile.record.ts index 374ca8f40..ef2126eda 100644 --- a/examples/chat/angular/e2e/record-hero-poster-mobile.record.ts +++ b/examples/chat/angular/e2e/record-hero-poster-mobile.record.ts @@ -27,39 +27,62 @@ * `public/hero-replay.json` changes. * * THE HEIGHT BUDGET IS DERIVED FROM THE REPLAY, not chosen. The timeline is - * pinned to the bottom, so the frame's top edge — the top of the chat's own + * pinned to the BOTTOM, so the frame's top edge — the top of the chat's own * scroll container, NOT y=0 — falls wherever (capture height) puts it, and it - * must land in a GAP between blocks or the poster opens mid-block. Measured - * against the 2026-09-18 `public/hero-replay.json`, with the edge at - * `62 + (650 - height)` in the content coordinates of a 650px capture: + * must land in a GAP between blocks or the poster opens mid-block. Growing the + * capture height therefore reveals more ABOVE; the bottom of the story (answer, + * composer, "Take control ↗") stays put at every height. * - * list_backups result table ends at 173 (669px tall — TALLER than the - * whole frame, so it can never be - * shown whole at phone width) - * delete_backups tool chip 197 .. 240 - * "Deleted 3 backups (...)" starts at 263 + * The windows below were MEASURED from the DOM at h=866, AFTER the responsive + * backup table landed (the `@media (max-width: 479px)` block in + * `examples/chat/angular/src/app/backup-table.component.ts`, which stacks each + * backup into a two-line block instead of a four-line-wrapped row and took the + * table from 583px to 268px tall). They are NOT projections, and they must be + * re-measured if EITHER that table layout OR `public/hero-replay.json` changes. * - * That leaves two gaps: height 516..538 puts the edge above the tool chip, and - * height 450..472 puts it above the answer. 526 is the middle of the first, - * which keeps the `delete_backups` chip in frame — the approval beat the whole - * walkthrough is about — and it halves to an integer at the 1.5x ship scale. + * The four `chat-message` boxes, in viewport coordinates at h=866 (the edge + * sits at y=62 and does NOT move with the height): + * + * user prompt -54 .. 10 + * list_backups result table 34 .. 388 + * `delete_backups` chip 412 .. 455 + * "Deleted 3 backups (...)" 479 .. 705 + * + * Because the timeline is bottom-pinned, raising h by Δ shifts every box down + * by Δ while the edge stays at 62, so a candidate height h clears the edge iff + * 62 falls in a gap once shifted — i.e. h = 928 - e for an edge position e in + * the h=866 coordinates above. That gives: + * + * h ∈ (449, 473) edge in the gap below the `delete_backups` chip + * h ∈ (516, 540) edge in the gap below the table + * h ∈ (894, 918) edge in the gap ABOVE the table ← this one + * h ≥ 983 edge above the user's prompt too (whole conversation) + * + * 906 is the middle of the third window: Δ=40 puts the prompt's bottom at 50, + * wholly above the edge and so cleanly scrolled out, and the table's top at 74, + * clear below it. It frames the WHOLE backup table — the result the approval + * beat is about — and, because this height also governs the live autoplaying + * iframe below 768px, it gives the phone demo more viewport than it has ever + * had. (526, the middle of the second window, framed the story but shrank the + * live stage; that trade was rejected.) 906 is even, so it halves to an integer + * at the 1.5x ship scale. * * 650 was the budget until the approval tools became executable (#1011). That * commit replaced a short prose answer with a run that streams a backup TABLE, - * and 650 has straddled that table's bottom edge ever since — the poster - * shipped opening on a table cut through horizontally, with its path column - * wrapped to four lines. The old rule of thumb ("the answer's opening line has - * to fit on ONE line at 390px") no longer decides anything on its own; re-derive - * the gaps from the DOM whenever the replay changes. The guard in the test body + * and 650 straddled that table's bottom edge — the poster shipped opening on a + * table cut through horizontally, with its path column wrapped to four lines. + * The old rule of thumb ("the answer's opening line has to fit on ONE line at + * 390px") no longer decides anything on its own. The guard in the test body * fails loudly with the measured numbers when it drifts again. * * Geometry: 390 is the phone design width the reviews already use. The ratio is - * therefore 390:526 (195:263), NOT the old 3:5 — `.hero-demo-stage` below 768px + * therefore 390:906, which reduces to 65:151 — `.hero-demo-stage` below 768px * and POSTER_MOBILE_W/H in HeroDemo.tsx carry the same pair so `object-fit: * cover` still crops nothing, and all three must move together. The frame is * captured at deviceScaleFactor 2 for crisp glyph rasterisation and shipped - * resized to 585x789 (1.5x): the poster is displayed ~348 CSS px wide on a - * phone, and 2x would cost ~51KB against the desktop poster's 37KB. + * resized to 585x1359 (1.5x, and 585:1359 is the same 65:151): the poster is + * displayed ~348 CSS px wide on a phone, and 2x would cost far more against the + * desktop poster's ~37KB. * * npx playwright test --config examples/chat/angular/e2e/record-hero.config.ts record-hero-poster-mobile */ @@ -73,7 +96,7 @@ const OUT = resolve( ); const SHIP_WIDTH = 585; -test.use({ viewport: { width: 390, height: 526 }, deviceScaleFactor: 2 }); +test.use({ viewport: { width: 390, height: 906 }, deviceScaleFactor: 2 }); test('capture mobile hero poster', async ({ page }) => { await page.goto('/hero'); @@ -133,6 +156,16 @@ test('capture mobile hero poster', async ({ page }) => { ); } const png = await page.screenshot({ type: 'png', fullPage: false }); - await sharp(png).resize({ width: SHIP_WIDTH }).webp({ quality: 55, effort: 6 }).toFile(OUT); + // quality 40, not the 55 this used to ship at. Going from a 526-tall capture + // to 906 added ~72% more pixels and pushed q55 to 39,016 bytes, over the + // 36,000-byte assertion in apps/website/src/components/landing/HeroDemo.spec.tsx. + // Measured from one capture, single-encode: q55 39,050 / q50 37,880 / + // q45 36,394 / q40 34,094 / q35 32,264. q45 still misses the budget by ~400 + // bytes; q40 clears it with ~1.9KB of headroom and is indistinguishable from + // q55 at 1:1 in the densest text (the table's monospace ids and s3 paths), + // let alone at the ~348 CSS px the poster is actually displayed at. Lower the + // quality before raising that budget: this poster is the LCP element on + // phones, and mobile autoplay was justified partly on LCP not regressing. + await sharp(png).resize({ width: SHIP_WIDTH }).webp({ quality: 40, effort: 6 }).toFile(OUT); console.log(`wrote ${OUT}`); }); From 6425cb862b7f3a2d8b05b95766f9f0a9de702954 Mon Sep 17 00:00:00 2001 From: Brian Love <brian@liveloveapp.com> Date: Fri, 18 Sep 2026 19:02:05 -0700 Subject: [PATCH 13/16] fix(website): drop the duplicated Angular eyebrow from both social cards Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --- apps/website/src/app/github-card/route.tsx | 2 +- apps/website/src/app/opengraph-image.tsx | 2 +- docs/brand/github-social-preview.png | Bin 68474 -> 70671 bytes 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/website/src/app/github-card/route.tsx b/apps/website/src/app/github-card/route.tsx index f50dba92b..1b7128cfd 100644 --- a/apps/website/src/app/github-card/route.tsx +++ b/apps/website/src/app/github-card/route.tsx @@ -32,7 +32,7 @@ export const runtime = 'nodejs'; export const GITHUB_CARD_SIZE = { width: 1280, height: 640 } as const; const RUNTIMES = POSITIONING_PROOF_POINTS[0].label; -const EYEBROW = 'OPEN SOURCE · ANGULAR'; +const EYEBROW = 'OPEN SOURCE'; export async function GET() { const fonts = await loadCardFonts({ mono: true }); diff --git a/apps/website/src/app/opengraph-image.tsx b/apps/website/src/app/opengraph-image.tsx index 26a9258c5..e71b625d4 100644 --- a/apps/website/src/app/opengraph-image.tsx +++ b/apps/website/src/app/opengraph-image.tsx @@ -28,7 +28,7 @@ export const contentType = 'image/png'; /** "LangGraph + AG-UI" — the first proof point is the runtime claim. */ const RUNTIMES = POSITIONING_PROOF_POINTS[0].label; -const EYEBROW = 'OPEN SOURCE · ANGULAR'; +const EYEBROW = 'OPEN SOURCE'; /** Describes what the card actually shows, not just the page it links to. */ export const alt = `${PRIMARY_TAGLINE}. ${HERO_SUBHEAD} Beside the copy, a browser frame shows the product pausing for a human: an agent proposes deleting three backups, with Approve and Decline. Works with ${RUNTIMES}.`; diff --git a/docs/brand/github-social-preview.png b/docs/brand/github-social-preview.png index 147f6c99a8a24cce0b9359c5cfa9d7c68627cdf5..9e31bac53188c250a9d58721717e18900a1ddeae 100644 GIT binary patch literal 70671 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 C%ohd# literal 68474 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 BkKX_Q From 7c5434c74c886c2a342203083a4dcf0d79ce9827 Mon Sep 17 00:00:00 2001 From: Brian Love <brian@liveloveapp.com> Date: Fri, 18 Sep 2026 19:07:28 -0700 Subject: [PATCH 14/16] docs(gtm): record the shipped hero and retire the drifted one Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --- README.md | 6 +++--- apps/website/public/assets/hero.svg | 6 +++--- docs/gtm/messaging.md | 31 ++++++++++++++++++++++------- gtm.md | 2 +- 4 files changed, 31 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 8c52c7df2..fbbaaf329 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,13 @@ <p align="center"> <img src="https://threadplane.ai/assets/hero.svg" - alt="Threadplane — the open-source thread-plane for agents" + alt="Threadplane — the open-source thread-plane for Angular agents" width="100%" /> </p> <p align="center"> - <em>The open-source thread-plane for agents.</em> + <em>The open-source thread-plane for Angular agents.</em> </p> <p align="center"> @@ -33,7 +33,7 @@ --- -**Threadplane is the open-source thread-plane for agents.** Chat, durable +**Threadplane is the open-source thread-plane for Angular agents.** Chat, durable threads, persistence, human approvals, tool progress, subagents, and generative UI — built on Angular Signals and dependency injection, for Angular 20–22. Your backend stays where it is: Threadplane adapts a LangGraph or AG-UI agent into a runtime-neutral diff --git a/apps/website/public/assets/hero.svg b/apps/website/public/assets/hero.svg index a25cc8f95..d17246672 100644 --- a/apps/website/public/assets/hero.svg +++ b/apps/website/public/assets/hero.svg @@ -1,4 +1,4 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 300" width="1200" height="300" role="img" aria-label="Threadplane — the open-source thread-plane for agents"> +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 300" width="1200" height="300" role="img" aria-label="Threadplane — the open-source thread-plane for Angular agents"> <!-- README banner. Kept in step with the social card (apps/website/src/app/card): the same tinted ground, rail rule, mono eyebrow in accent navy, serif @@ -22,7 +22,7 @@ font-weight="700" letter-spacing="1.8" fill="#15253E" - >OPEN SOURCE · ANGULAR</text> + >OPEN SOURCE</text> <!-- Wordmark: the paper plane at the same optical weight as the card's. --> <g transform="translate(72 150)"> @@ -44,7 +44,7 @@ font-family="Georgia, 'Times New Roman', serif" font-size="21" fill="#464646" - >The open-source thread-plane for agents.</text> + >The open-source thread-plane for Angular agents.</text> <!-- Right-aligned, on the tagline's baseline, so the band reads as a letterhead diff --git a/docs/gtm/messaging.md b/docs/gtm/messaging.md index 50c5c94c7..6f0ed7a3c 100644 --- a/docs/gtm/messaging.md +++ b/docs/gtm/messaging.md @@ -6,19 +6,36 @@ > For Angular teams building AI agents on LangGraph, AG-UI, or custom backends, Threadplane is the open-source thread-plane for agents: it turns streaming agent events into production-ready Angular experiences: chat, durable threads, interrupts, subagents, planning, memory, generative UI, fallbacks, observability, and tests. Unlike React-first agent UI stacks or raw streaming SDKs, Threadplane is Angular-native, DI-friendly, design-system-first, self-hostable, and built for enterprise Angular apps. -## Hero (locked for Spec 2 to implement) +## Hero (as shipped) -**H1:** Ship production agent UIs in Angular. +**H1:** The open-source thread-plane for Angular agents. -**Subhead:** Build enterprise-grade agent experiences in Angular: headless chat, durable threads, interrupts, subagents, planning, memory, and generative UI for LangGraph, AG-UI, json-render, and A2UI-compatible backends. +**Eyebrow:** `LangGraph & AG-UI` -**Primary CTA:** `Install @threadplane/chat` (copy-to-clipboard, fires `marketing:cta_click` with `cta_id=hero_install`, `track=developer`). +**Subhead:** Make agent work persistent, durable, visible, reviewable, and resumable. (Each capability links to its documentation.) -**Secondary CTA:** `Talk to our engineers` (routes to `/contact?source=home_hero&track=enterprise`, fires `marketing:cta_click` with `cta_id=hero_talk_to_engineers`, `track=enterprise`). +**Primary CTA:** `Install Threadplane` — opens the install dialog, which carries +the per-runtime commands. Fires `marketing:cta_click` with +`cta_id=hero_install_open`, `track=developer`, `surface=home`. -**Proof row:** `LangGraph + AG-UI · Durable threads · Interrupts · Subagents · Planning + memory · json-render + A2UI` +**Secondary CTA:** `See it running in the docs →` — routes to +`/docs/chat/guides/generative-ui?mode=run`, fires `marketing:cta_click` with +`cta_id=hero_live_demo`, `track=developer`, `surface=home`, and the destination +URL. -**Subline under proof row:** *Not another backend agent runtime. Keep LangGraph, Genkit, Mastra, CrewAI, or your own service. Threadplane solves the production Angular UI layer.* +**Trust line:** `MIT · Angular <range> · no account, no cloud` (the range is +generated from the supported majors, not typed). It is not rendered in the hero +itself: it appears in the install dialog the primary CTA opens, on the proof +masthead, and on the live stage. + +> Copy is single-sourced in `apps/website/src/lib/positioning.ts`. Change it +> there; this section records what ships, and is not itself the source. +> +> This replaces an earlier locked hero — H1 "Ship production agent UIs in +> Angular." with a `Talk to our engineers` enterprise CTA fork — which the site +> had drifted away from. The drift was resolved deliberately in +> `docs/superpowers/specs/2026-09-18-mobile-above-fold-design.md` §4: keep the +> category claim and add the stack to it. ## The five durable differentiation points diff --git a/gtm.md b/gtm.md index 1465ef250..a0a8794af 100644 --- a/gtm.md +++ b/gtm.md @@ -12,7 +12,7 @@ Threadplane is the open-source thread-plane for agents, built for Angular teams. ## 2. Category - **Primary:** Threadplane -- **Tagline (2026-09-06):** "The open-source thread-plane for agents." The description that follows it everywhere: "The open-source thread-plane for agents: chat, durable threads, persistence, human approvals, and generative UI for Angular, on LangGraph and AG-UI." +- **Tagline (2026-09-18):** "The open-source thread-plane for Angular agents." The description that follows it everywhere: "The open-source thread-plane for agents: chat, durable threads, persistence, human approvals, and generative UI for Angular, on LangGraph and AG-UI." - **Secondary (only after "Agent UI"):** Angular Agent UI Framework - **Do not use:** "Threadplane" (ambiguous with backend runtimes and coding agents), "Enterprise Angular agent framework" (reads sales-first). From 860af294d07d7c513cd39d6fb18e0a40da195993 Mon Sep 17 00:00:00 2001 From: Brian Love <brian@liveloveapp.com> Date: Fri, 18 Sep 2026 19:13:32 -0700 Subject: [PATCH 15/16] docs(plan): record the verification gaps this plan's own tasks exposed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three corrections learned by running it: nx build website needs GROWTH_FORM_POLICY=growth_v1; examples-chat-angular must be BUILT, not just tested, because its tsconfig compiles specs without dom.iterable; and card:github defaults to fetching production, so regenerating before deploy captures the copy being replaced. Also scopes hero.svg into Task 7 — it claims to mirror the social cards and nothing tests that claim. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --- .../plans/2026-09-18-mobile-above-fold.md | 80 ++++++++++++++++--- 1 file changed, 71 insertions(+), 9 deletions(-) diff --git a/docs/superpowers/plans/2026-09-18-mobile-above-fold.md b/docs/superpowers/plans/2026-09-18-mobile-above-fold.md index 2675b0328..c4ab16369 100644 --- a/docs/superpowers/plans/2026-09-18-mobile-above-fold.md +++ b/docs/superpowers/plans/2026-09-18-mobile-above-fold.md @@ -408,33 +408,57 @@ walkthrough…` tests with: // from. .hero-demo-stage sits ~44px lower inside the BrowserFrame chrome, // so budgeting it at 560 would be a much tighter guard than intended. const demo = page.locator('[data-hero-demo]'); + await expect(demo).toBeVisible(); const demoTop = (await demo.boundingBox())!.y; - expect(demoTop).toBeLessThanOrEqual(560); + expect(demoTop).toBeLessThanOrEqual(530); }); ``` - [ ] **Step 2: Run the hero e2e suite** -Run: `npx nx e2e website -- home-hero` +Run: `npx nx e2e website --grep "homepage hero"` Expected: all four tests PASS. -Per `feedback_examples_chat_e2e_orphan_servers`, if the run behaves as though it -is serving old code, kill orphaned dev servers first: +**Do not use `-- home-hero`.** This target is `@nx/playwright:playwright` with +only a `config` option, so a positional does not pass through and the run dies +with `error: unknown option '--_=home-hero'`. Use `--grep` as above. + +Per `feedback_examples_chat_e2e_orphan_servers`, an orphaned dev server from an +earlier task will break the run — but not in the way you would expect. The +failure is `Unable to acquire lock at .../apps/website/.next/dev/lock`, and the +lock is on `.next/dev` regardless of which port the orphan is serving, so a +port-matched pkill misses it. Kill by worktree instead: ```bash -pkill -f "next.*4308" || true +pkill -f "clever-sammet-6ce520.*next dev" || true ``` +Check `preview_list` first if you have browser tools — do not kill a managed +preview server out from under the session. + - [ ] **Step 3: Prove the fold guard is not vacuous** A guard that passes before the fix is worthless. Temporarily revert Task 2 by commenting out the `font-size: 36px` line in `landing.css`, then run: -Run: `npx nx e2e website -- home-hero` +Run: `npx nx e2e website --grep "homepage hero"` Expected: `the hero fits the fold at 375x812` FAILS with `headingHeight` about -207, exceeding 130. Restore the line and re-run to confirm PASS. +**259**, exceeding the 130 budget. + +Note 259, not the 311 quoted in `landing.css`. Both are real and they are +different mutations: 311px is blocks AND no font-size override (three spans each +wrapping at 48px); commenting out only `font-size` leaves `display: inline`, so +the sentence reflows to 5 lines at the 48px clamp floor — 5 x 48 x 1.08 = 259.2. +The guard bites either way. + +The heading assertion aborts the test before `demoTop` is reached, so to prove +that budget too, measure it in a throwaway spec during the same mutated run +(then delete it). Under this mutation it reads **643.94** against the 560 +budget. Both budgets are non-vacuous. + +Restore the line and re-run to confirm PASS. - [ ] **Step 4: Commit** @@ -560,7 +584,14 @@ spec.) - [ ] **Step 2: Regenerate the GitHub social preview** -Run: `npm run card:github` +```bash +node scripts/export-github-card.mjs --origin http://localhost:3000 +``` + +**Not the bare `npm run card:github`.** That script defaults to fetching +`https://threadplane.ai` — production, which still serves the OLD copy — so +running it before deploy regenerates the card from the very copy this work +replaces, and it looks like it worked. Point it at the local dev server. - [ ] **Step 3: Flag the manual upload** @@ -574,7 +605,7 @@ otherwise be forgotten. ```bash git status --short -git add -A apps/website/public +git add docs/brand/github-social-preview.png git commit -m "chore(website): regenerate social cards for the new H1" ``` @@ -623,6 +654,23 @@ generated from the supported majors, not typed). > category claim and add the stack to it. ``` +- [ ] **Step 1a: Fix the README banner, which mirrors the social cards** + +`apps/website/public/assets/hero.svg:25` hard-codes `OPEN SOURCE · ANGULAR` and +its header comment says it is "Kept in step with the social card." Task 6 changed +both cards to `OPEN SOURCE`, so it is now stale against the thing it claims to +mirror. Change the SVG's text to `OPEN SOURCE`. + +It also carries the tagline, so check the whole file for the pre-Angular wording +while you are in it. + +Note why nothing caught this: `brand-assets.spec.ts` checks brand assets against +`RETIRED_POSITIONING` in `public-copy-contract.ts`, and that list holds only six +retired *positioning* phrases — the eyebrow and the tagline are not in it. The +guard passes happily over this drift. Do not add the old strings to +`RETIRED_POSITIONING` as a fix: that list is for phrases barred from public copy, +and "OPEN SOURCE · ANGULAR" is not barred, it is merely superseded here. + - [ ] **Step 1b: Update the other two places that state the tagline** The Task 1 code-quality review found the plan had under-scoped this. Two more @@ -672,6 +720,20 @@ root panic, remove the stale dev directory and retry: rm -rf apps/website/.next/dev && npx nx build website ``` +- [ ] **Step 1b: Build the example app too** + +Run: `npx nx build examples-chat-angular` + +Expected: succeeds. + +This is not optional and it is not covered by anything else. `examples/chat/angular`'s +`tsconfig.app.json` includes `src/**/*.ts`, which pulls in `.spec.ts` files, and its +lib set is `["es2022", "dom"]` with no `dom.iterable`. So a spec that spreads a +`NodeListOf` (`[...el.querySelectorAll(...)]`) fails with TS2488 and breaks the +app build while `nx test examples-chat-angular` stays green — `nx test` does not +typecheck. That exact break shipped during this plan's Task 5b and was only found +when a later task could not start the dev server. + - [ ] **Step 2: Unit and lint** Run: `npx nx test website && npx nx lint website` From 2044fc30a62f1ac7ecd51c2cf001bdc956fd2765 Mon Sep 17 00:00:00 2001 From: Brian Love <brian@liveloveapp.com> Date: Fri, 18 Sep 2026 19:30:15 -0700 Subject: [PATCH 16/16] docs: correct the geometry comments the final review found stale MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The phone stage ratio moved three times on this branch and five comments still asserted a superseded value as current — including the outer comment sitting directly on the .hero-demo-stage rule, which claimed 390x650/3:5 fifteen lines above aspect-ratio: 65/151. That is the exact failure mode this branch exists to fix, so it is worth the sweep. Also drops two over-claims. The recorder header presented the taller live stage as an unambiguous win; it is not — at 375px only ~34% of the stage is ever on screen, and the honest justification for 906 is poster framing, with the live stage along for the ride because object-fit: cover is only a no-op while the ratios match. And the spec said the top-edge guard "converts a silent drift into a failing capture"; it converts it into a failing RE-RECORD, which is weaker, because nothing checks the committed poster in CI. Records why marketing/assets deliberately keeps ANGULAR in its eyebrow while the website's cards dropped it: those cards carry a blog title, not the hero H1, so the word adds information rather than repeating it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --- apps/website/e2e/home-hero.spec.ts | 16 ++-- .../src/components/landing/HeroDemo.spec.tsx | 5 +- apps/website/src/lib/positioning.ts | 9 +- apps/website/src/styles/landing.css | 14 ++- .../plans/2026-09-18-mobile-above-fold.md | 90 +++++++++---------- .../2026-09-18-mobile-above-fold-design.md | 20 ++++- .../e2e/record-hero-poster-mobile.record.ts | 24 +++-- .../angular/e2e/record-stage-stills.record.ts | 6 +- marketing/assets/src/brand.ts | 10 +++ 9 files changed, 117 insertions(+), 77 deletions(-) diff --git a/apps/website/e2e/home-hero.spec.ts b/apps/website/e2e/home-hero.spec.ts index a5038b8a4..b2f1bdd8c 100644 --- a/apps/website/e2e/home-hero.spec.ts +++ b/apps/website/e2e/home-hero.spec.ts @@ -34,14 +34,16 @@ test.describe('homepage hero', () => { await page.setViewportSize({ width: 390, height: 844 }); await page.goto('/'); // No scrollIntoViewIfNeeded, deliberately. Shortening the H1 lifted the demo - // to y=469 of this 844px fold, so ~60% of the stage is visible on load and - // the 25% IntersectionObserver threshold is met without any scroll. - // Asserting the mount from a standing start is what proves that. + // to y=469 of this 844px fold, leaving ~44% of it visible on load — the 25% + // IntersectionObserver threshold is met without any scroll, and asserting + // the mount from a standing start is what proves it. // - // This test does NOT defend the fold — the 25% threshold is a weak proxy - // for it. Measured under a deliberately broken H1, the demo sits at y=644 - // of an 812px viewport and is still 27.8% visible, so it still mounts. The - // fold budget below is what carries that; this one asserts the mount. + // This test still does NOT defend the fold; the budget below does. The 25% + // threshold is a proxy that only bites once the demo is pushed a long way + // down, and it moves whenever the stage's aspect ratio changes, so it is + // not a stable thing to reason about a fold with. Keep the two separate: + // this asserts that a phone autoplays, the budget asserts where the demo + // sits. const demo = page.locator('[data-hero-demo]'); await expect(demo.locator('iframe')).toHaveAttribute('src', 'https://demo.threadplane.ai/hero'); }); diff --git a/apps/website/src/components/landing/HeroDemo.spec.tsx b/apps/website/src/components/landing/HeroDemo.spec.tsx index 37b783cc9..4a45f6782 100644 --- a/apps/website/src/components/landing/HeroDemo.spec.tsx +++ b/apps/website/src/components/landing/HeroDemo.spec.tsx @@ -85,7 +85,7 @@ describe('HeroDemo', () => { * matching source, and an <img> that came first would win every time), and * the media query has to stay on the same 768px boundary as the stage's * portrait ratio in landing.css. Those two are the whole coupling, and both - * are tied to the phone poster's 390x650 geometry: the poster is served + * are tied to the phone poster's 390x906 geometry: the poster is served * exactly where the stage is portrait, so `object-fit: cover` crops nothing. * MIN_AUTOPLAY_WIDTH used to be a third leg and is not one any more — * autoplay is width-independent and this boundary says nothing about it. @@ -295,7 +295,8 @@ describe('HeroDemo', () => { /** * Reduced motion is the ONLY thing that still holds the iframe back, and a - * phone is where it matters most — the stage is 3:5 and the replay fills it. + * phone is where it matters most — the stage is portrait and the replay + * fills it. * The suite's other reduced-motion test runs at the default 1280, so without * this one nothing covers reduce at phone width. */ diff --git a/apps/website/src/lib/positioning.ts b/apps/website/src/lib/positioning.ts index 4ed8d0624..d102cb735 100644 --- a/apps/website/src/lib/positioning.ts +++ b/apps/website/src/lib/positioning.ts @@ -14,10 +14,11 @@ export const HERO_H1 = 'The open-source thread-plane for Angular agents.'; * github-card/route.tsx stack these as fixed lines at 60px and 62px. Measured * in Archivo Black at 60px with -0.02em tracking: 538 / 513 / 507px against a * ~536px column. "The open-source" is the widest and already shipped before - * "Angular" was added, so the worst case did not move. Below 767px Task 2 - * flows the spans inline (landing.css) so the browser breaks the sentence to - * the column instead; until it lands, this commit makes the phone H1 - * temporarily taller. + * "Angular" was added, so the worst case did not move. Below 767px landing.css + * flows the spans inline and drops the H1 to 36px, so the browser breaks the + * sentence to the column instead — three lines, 116.63px. Both halves are + * required: left as blocks at the shared token's 48px clamp floor, each span + * takes a line and then wraps again. */ export const HERO_H1_LINES: readonly string[] = [ 'The open-source', diff --git a/apps/website/src/styles/landing.css b/apps/website/src/styles/landing.css index c0698d6c5..5f91dd013 100644 --- a/apps/website/src/styles/landing.css +++ b/apps/website/src/styles/landing.css @@ -1933,8 +1933,7 @@ * shadow — but the poster it sits on is a near-black chat surface, so on a * phone it read as bare white text floating over the screenshot. A light pill * with a dark ring is legible on this poster and on any lighter one that - * replaces it, and - * the row is sized to a 44px touch target. + * replaces it, and the row is sized to a 44px touch target. * * This control is no longer the phone's default. Autoplay is width-independent * now, so it renders only on the reduced-motion path — at any width. */ @@ -1990,12 +1989,11 @@ } } /* Below the breakpoint the stage shows the phone-width poster, which is a - * 390x650 capture — exactly 3:5. Matching that ratio here is what makes - * `object-fit: cover` a no-op: the frame is shown whole, at 390/348 ≈ 1.12 - * scale, so every line of the chat is read at its designed size instead of - * being shrunk to 0.29 or cropped at the right edge. The stage governs the - * iframe too, so a phone that taps Play gets the same portrait chat viewport - * the poster promised rather than a 16:9 letterbox. + * 390x906 capture — exactly 65:151. Matching that ratio here is what makes + * `object-fit: cover` a no-op: the frame is shown whole, so every line of the + * chat is read at its designed size instead of being shrunk or cropped at the + * right edge. The stage governs the iframe too, so a phone gets the same + * portrait chat viewport the poster promised rather than a 16:9 letterbox. * * The breakpoint is shared two ways and must move as one: this ratio and the * <source media> in HeroDemo.tsx. The RATIO is shared three ways — here, diff --git a/docs/superpowers/plans/2026-09-18-mobile-above-fold.md b/docs/superpowers/plans/2026-09-18-mobile-above-fold.md index c4ab16369..675865895 100644 --- a/docs/superpowers/plans/2026-09-18-mobile-above-fold.md +++ b/docs/superpowers/plans/2026-09-18-mobile-above-fold.md @@ -42,7 +42,7 @@ Tasks 1–7 are ordered so the suite is green at every commit. - Modify: `apps/website/src/lib/positioning.ts:5-7`, `:46` - Test: `apps/website/src/lib/positioning.spec.ts:49-65` -- [ ] **Step 1: Update the failing test first** +- [x] **Step 1: Update the failing test first** In `apps/website/src/lib/positioning.spec.ts`, replace the first two `it` blocks of `describe('positioning: hero copy')` with: @@ -85,13 +85,13 @@ of `describe('positioning: hero copy')` with: `HOME_DESCRIPTION` is deliberately unchanged: it already contains "Angular" and sits within its 160-character budget. -- [ ] **Step 2: Run the test to verify it fails** +- [x] **Step 2: Run the test to verify it fails** Run: `npx nx test website -- positioning.spec` Expected: FAIL, with `expected 'Angular · LangGraph & AG-UI' to be 'LangGraph & AG-UI'`. -- [ ] **Step 3: Change the copy** +- [x] **Step 3: Change the copy** In `apps/website/src/lib/positioning.ts`, replace lines 5–12 (`HERO_EYEBROW` through the `HERO_H1_LINES` declaration) with: @@ -125,13 +125,13 @@ Then change line 46 (`PRIMARY_TAGLINE`) to: export const PRIMARY_TAGLINE = 'Threadplane — The open-source thread-plane for Angular agents'; ``` -- [ ] **Step 4: Run the test to verify it passes** +- [x] **Step 4: Run the test to verify it passes** Run: `npx nx test website -- positioning.spec` Expected: PASS. -- [ ] **Step 5: Fix the site-metadata spec** +- [x] **Step 5: Fix the site-metadata spec** `site-metadata.spec.ts:23` and `:70` hard-code the old tagline. Change both occurrences of: @@ -149,7 +149,7 @@ to: Leave `expect(LONG_SUBHEAD).toContain('open-source thread-plane for agents')` alone — `LONG_SUBHEAD` is unchanged and still contains that phrase. -- [ ] **Step 6: Run the full website unit suite** +- [x] **Step 6: Run the full website unit suite** Run: `npx nx test website` @@ -157,7 +157,7 @@ Expected: PASS. `Hero.spec.tsx` and `card/card.spec.ts` read their strings from `positioning`, so they should pass untouched. If either fails, it hard-coded a string — fix the hard-coding, do not revert the copy. -- [ ] **Step 7: Check for the generated-file rewrite, then commit** +- [x] **Step 7: Check for the generated-file rewrite, then commit** `nx test` rewrites a generated package-version file. Check before staging: @@ -185,7 +185,7 @@ git commit -m "copy(website): name Angular in the hero H1 and the title" **Files:** - Modify: `apps/website/src/styles/landing.css` (after the `.hero-heading-line` rule, ~line 29) -- [ ] **Step 1: Add the media query** +- [x] **Step 1: Add the media query** Insert immediately after the existing `.hero-heading-line { display: block; }` rule: @@ -220,7 +220,7 @@ rule: These rules must stay **unlayered** like the rest of the file — see the file header. Do not wrap them in `@layer`. -- [ ] **Step 2: Verify in a real browser at 375x812** +- [x] **Step 2: Verify in a real browser at 375x812** Start the dev server and measure. Do not judge by eye alone, and per `feedback_cold_next_dev_drops_fragment_scroll`, load the route once to warm it @@ -241,14 +241,14 @@ JSON.stringify({ ``` Expected: `fontSize: "36px"`, `h1Height` about 117 (must be <= 130), -`demoTop` about 502 (must be <= 560). +`demoTop` about 501 (must be <= 530). -- [ ] **Step 3: Verify desktop did not regress** +- [x] **Step 3: Verify desktop did not regress** At 1280x800 on `/`, confirm the H1 still renders as three forced lines and no line wraps a second time. Expected computed `font-size`: `72px`. -- [ ] **Step 4: Commit** +- [x] **Step 4: Commit** ```bash git add apps/website/src/styles/landing.css @@ -263,7 +263,7 @@ git commit -m "fix(website): fit the hero H1 to three lines on a phone" - Modify: `apps/website/src/components/landing/HeroDemo.tsx:22-30` - Modify: `apps/website/src/styles/landing.css` (the `@media (max-width: 767px)` block near the `.hero-demo-stage` rules, ~line 1964) -- [ ] **Step 1: Change the constant and its comment** +- [x] **Step 1: Change the constant and its comment** In `HeroDemo.tsx`, replace the `MIN_AUTOPLAY_WIDTH` line and the `HERO_POSTER_MOBILE_MEDIA` comment block (lines 22–30) with: @@ -295,7 +295,7 @@ check is inert, and the `prefers-reduced-motion` check still governs. Leave `needsClick`, the `playRequested` state and `.hero-demo-play` in place: they are now the reduced-motion path at any width. -- [ ] **Step 2: Update the matching CSS comment** +- [x] **Step 2: Update the matching CSS comment** In `landing.css`, the comment above the `@media (max-width: 767px)` block near `.hero-demo-stage` ends with: @@ -317,7 +317,7 @@ In the same block, the `.hero-demo-play` comment says the control is shown on "the only viewport that shows it: autoplay is off below 768px", which is now false. Change that parenthetical to "(now the reduced-motion path only)". -- [ ] **Step 3: Verify the iframe mounts at 375x812** +- [x] **Step 3: Verify the iframe mounts at 375x812** With `npx nx serve website` running, at 375x812 on `/`, scroll the demo into view, wait 3 seconds, then evaluate: @@ -331,7 +331,7 @@ Expected: `iframes: 1` and `state` reaching `"ready"`. The frame needs the visibility handshake to start replaying, so confirm visually that the chat animates rather than sitting on "How can I help?". -- [ ] **Step 4: Measure LCP before shipping it** +- [x] **Step 4: Measure LCP before shipping it** This is the spec's named risk. At 375x812, with the network throttled to Fast 3G, load `/` and record LCP: @@ -347,7 +347,7 @@ not regressed against the same measurement taken with `MIN_AUTOPLAY_WIDTH = 768` If it has regressed materially, **stop and report it** — restoring the 768 floor is the documented fallback. Do not ship a regression quietly. -- [ ] **Step 5: Commit** +- [x] **Step 5: Commit** ```bash git add apps/website/src/components/landing/HeroDemo.tsx apps/website/src/styles/landing.css @@ -361,7 +361,7 @@ git commit -m "feat(website): autoplay the hero demo on phones" **Files:** - Modify: `apps/website/e2e/home-hero.spec.ts:24-44` -- [ ] **Step 1: Replace the two demo tests** +- [x] **Step 1: Replace the two demo tests** Replace the `poster renders before the frame…` and `mobile shows Play walkthrough…` tests with: @@ -398,15 +398,15 @@ walkthrough…` tests with: // // Three lines at 36px/1.08 measure 117px; 130 leaves headroom for font // loading and metric variance. The demo stage lands at ~502px against an - // 812px fold; 560 is the ceiling at which it still clearly breaks the fold. + // 812px fold; 530 trips on a single extra H1 line, which 560 would not. const heading = page.locator('.hero-heading'); await expect(heading).toBeVisible(); const headingHeight = (await heading.boundingBox())!.height; expect(headingHeight).toBeLessThanOrEqual(130); // Measure [data-hero-demo], the same element the 502px projection was taken - // from. .hero-demo-stage sits ~44px lower inside the BrowserFrame chrome, - // so budgeting it at 560 would be a much tighter guard than intended. + // from. .hero-demo-stage sits ~48px lower inside the BrowserFrame chrome, + // so budgeting the stage at this number would be a far tighter guard. const demo = page.locator('[data-hero-demo]'); await expect(demo).toBeVisible(); const demoTop = (await demo.boundingBox())!.y; @@ -414,7 +414,7 @@ walkthrough…` tests with: }); ``` -- [ ] **Step 2: Run the hero e2e suite** +- [x] **Step 2: Run the hero e2e suite** Run: `npx nx e2e website --grep "homepage hero"` @@ -437,7 +437,7 @@ pkill -f "clever-sammet-6ce520.*next dev" || true Check `preview_list` first if you have browser tools — do not kill a managed preview server out from under the session. -- [ ] **Step 3: Prove the fold guard is not vacuous** +- [x] **Step 3: Prove the fold guard is not vacuous** A guard that passes before the fix is worthless. Temporarily revert Task 2 by commenting out the `font-size: 36px` line in `landing.css`, then run: @@ -455,12 +455,12 @@ The guard bites either way. The heading assertion aborts the test before `demoTop` is reached, so to prove that budget too, measure it in a throwaway spec during the same mutated run -(then delete it). Under this mutation it reads **643.94** against the 560 +(then delete it). Under this mutation it reads **643.94** against the 530 budget. Both budgets are non-vacuous. Restore the line and re-run to confirm PASS. -- [ ] **Step 4: Commit** +- [x] **Step 4: Commit** ```bash git add apps/website/e2e/home-hero.spec.ts @@ -480,7 +480,7 @@ must fit one line at 390px "or the whole block shifts up and the first line is sliced off the top edge." Nothing enforces it. That is why the shipped poster slices a tool-result table across its top edge. -- [ ] **Step 1: Add the top-edge assertion** +- [x] **Step 1: Add the top-edge assertion** In the test body, immediately after the existing `await expect(page.locator('a2ui-surface')).toHaveCount(0);` line, add: @@ -512,7 +512,7 @@ last `chat-message` is the answer the header describes, not a later element. If the selector is wrong, fix the selector — do not weaken the assertion to make it pass. -- [ ] **Step 2: Run the recorder** +- [x] **Step 2: Run the recorder** Run: @@ -529,13 +529,13 @@ the `aspect-ratio` in `landing.css` together, preserving the 3:5 ratio that makes `object-fit: cover` a no-op. Per the header, runs drift by up to a second, so re-run once before retuning any timing. -- [ ] **Step 3: Inspect the regenerated poster** +- [x] **Step 3: Inspect the regenerated poster** Open `apps/website/public/screenshots/hero-walkthrough-poster-mobile.webp` and confirm by eye: nothing is sliced at the top edge, and no line of prose wraps to four lines. This is a judgement the assertion cannot make. -- [ ] **Step 4: Commit** +- [x] **Step 4: Commit** ```bash git add examples/chat/angular/e2e/record-hero-poster-mobile.record.ts apps/website/public/screenshots/hero-walkthrough-poster-mobile.webp @@ -553,7 +553,7 @@ git commit -m "fix(website): re-record the mobile hero poster and guard its top Neither file needs a code change — both map `HERO_H1_LINES`, which stays length-3. This task is verification plus the manual upload. -- [ ] **Step 1: Render both cards and check for overflow** +- [x] **Step 1: Render both cards and check for overflow** With `npx nx serve website` running, open in a browser: @@ -564,7 +564,7 @@ Expected on both: the H1 renders as three lines, and neither the subhead nor the pills below it are overlapped. The measurement in the spec predicts no change to the vertical rhythm — confirm that is what you see. -- [ ] **Step 1b: Drop the now-duplicated eyebrow from both cards** +- [x] **Step 1b: Drop the now-duplicated eyebrow from both cards** Both renderers hard-code `const EYEBROW = 'OPEN SOURCE · ANGULAR'` — `opengraph-image.tsx:31` and `github-card/route.tsx:35` — rendered immediately @@ -582,7 +582,7 @@ Re-render both cards afterwards and confirm the rail still reads well at its reduced length. (Found by the Task 1 code-quality review; not in the original spec.) -- [ ] **Step 2: Regenerate the GitHub social preview** +- [x] **Step 2: Regenerate the GitHub social preview** ```bash node scripts/export-github-card.mjs --origin http://localhost:3000 @@ -593,7 +593,7 @@ node scripts/export-github-card.mjs --origin http://localhost:3000 running it before deploy regenerates the card from the very copy this work replaces, and it looks like it worked. Point it at the local dev server. -- [ ] **Step 3: Flag the manual upload** +- [x] **Step 3: Flag the manual upload** GitHub's social preview has no API (`project_github_social_preview_pipeline`). The generated card must be uploaded by hand at @@ -601,7 +601,7 @@ The generated card must be uploaded by hand at the PR description as a required manual step — it cannot be automated and will otherwise be forgotten. -- [ ] **Step 4: Commit any regenerated asset** +- [x] **Step 4: Commit any regenerated asset** ```bash git status --short @@ -619,7 +619,7 @@ demand and there may be no checked-in artifact. **Files:** - Modify: `docs/gtm/messaging.md:9-21` -- [ ] **Step 1: Replace the stale hero section** +- [x] **Step 1: Replace the stale hero section** Replace the `## Hero (locked for Spec 2 to implement)` section, through the "Subline under proof row" line, with: @@ -654,7 +654,7 @@ generated from the supported majors, not typed). > category claim and add the stack to it. ``` -- [ ] **Step 1a: Fix the README banner, which mirrors the social cards** +- [x] **Step 1a: Fix the README banner, which mirrors the social cards** `apps/website/public/assets/hero.svg:25` hard-codes `OPEN SOURCE · ANGULAR` and its header comment says it is "Kept in step with the social card." Task 6 changed @@ -671,7 +671,7 @@ guard passes happily over this drift. Do not add the old strings to `RETIRED_POSITIONING` as a fix: that list is for phrases barred from public copy, and "OPEN SOURCE · ANGULAR" is not barred, it is merely superseded here. -- [ ] **Step 1b: Update the other two places that state the tagline** +- [x] **Step 1b: Update the other two places that state the tagline** The Task 1 code-quality review found the plan had under-scoped this. Two more tracked files assert the old tagline as fact: @@ -687,7 +687,7 @@ tracked files assert the old tagline as fact: opening claim) — update all three to "for Angular agents", preserving each one's existing capitalisation and punctuation. -- [ ] **Step 2: Commit** +- [x] **Step 2: Commit** ```bash git add docs/gtm/messaging.md gtm.md README.md @@ -698,7 +698,7 @@ git commit -m "docs(gtm): record the shipped hero and retire the drifted one" ### Task 8: Full verification -- [ ] **Step 1: Build — the only typecheck** +- [x] **Step 1: Build — the only typecheck** `nx test` and `nx lint` do **not** typecheck this app. Only the build catches a broken production build. @@ -720,7 +720,7 @@ root panic, remove the stale dev directory and retry: rm -rf apps/website/.next/dev && npx nx build website ``` -- [ ] **Step 1b: Build the example app too** +- [x] **Step 1b: Build the example app too** Run: `npx nx build examples-chat-angular` @@ -734,14 +734,14 @@ app build while `nx test examples-chat-angular` stays green — `nx test` does n typecheck. That exact break shipped during this plan's Task 5b and was only found when a later task could not start the dev server. -- [ ] **Step 2: Unit and lint** +- [x] **Step 2: Unit and lint** Run: `npx nx test website && npx nx lint website` Expected: both PASS. Per `feedback_ci_lint_errors_vs_warnings_apidocs`, lint warnings are acceptable; errors are not. -- [ ] **Step 3: Full website e2e, including the public-copy gate** +- [x] **Step 3: Full website e2e, including the public-copy gate** The public-copy contract gate runs in production mode only: @@ -753,7 +753,7 @@ WEBSITE_E2E_MODE=production npx nx e2e website Expected: PASS, including `public-copy.spec.ts`. The new H1 and tagline make no absolute claim and name no retired route, so this should be clean. -- [ ] **Step 4: Final browser verification at 375x812** +- [x] **Step 4: Final browser verification at 375x812** Against the production build, not `next dev`: @@ -776,10 +776,10 @@ JSON.stringify({ }); ``` -Expected: `h1Lines: 3`, `h1Height <= 130`, `demoTop <= 560`, `demoState` reaching +Expected: `h1Lines: 3`, `h1Height <= 130`, `demoTop <= 530`, `demoState` reaching `"ready"`, and `title` containing "Angular". Take a screenshot as evidence. -- [ ] **Step 5: Check for generated-file drift and push** +- [x] **Step 5: Check for generated-file drift and push** ```bash git status --short diff --git a/docs/superpowers/specs/2026-09-18-mobile-above-fold-design.md b/docs/superpowers/specs/2026-09-18-mobile-above-fold-design.md index c9d481736..c70f8ee4d 100644 --- a/docs/superpowers/specs/2026-09-18-mobile-above-fold-design.md +++ b/docs/superpowers/specs/2026-09-18-mobile-above-fold-design.md @@ -1,6 +1,8 @@ # Mobile above-the-fold rework — homepage hero -> Design spec. Status: approved, not yet implemented. +> Design spec. Status: IMPLEMENTED on branch blove/sharp-shaw-c45f8c. +> Two things stayed open and are named in §8: a CI check on the committed +> poster, and an equality guard across the card eyebrow surfaces. > Scope: `apps/website` hero at phone widths. Desktop rendering is unchanged. ## 1. Why @@ -293,8 +295,20 @@ reported rather than shipped quietly, and the fallback is to restore a `MIN_AUTOPLAY_WIDTH` floor. **`hero-replay.json` is load-bearing for the poster's framing.** It already was, -silently — that is defect 2. The new top-edge guard is what converts a silent -drift into a failing capture. +silently — that is defect 2. + +The top-edge guard narrows this but does not close it, and the distinction +matters: it converts a silent drift into a failing **re-record**, not a failing +CI run. It lives inside the recorder, which only executes when someone +deliberately re-records. So a change to `hero-replay.json` or to the backup +table's phone layout can still land with the committed poster going stale and +nothing red. Closing it properly would mean asserting the committed poster in +CI, which is OPEN. + +The guard is also deliberately narrow in a second way: it rejects a message +*straddling* the scroll edge, and allows one wholly above it. If the geometry +ever drifts far enough that the backup table scrolls entirely out of frame, the +capture passes while no longer showing the thing the beat is about. **The H1 is consumed by two generated images.** `opengraph-image.tsx` and `github-card/route.tsx` both lay out `HERO_H1_LINES`. The re-split in 5.1 was diff --git a/examples/chat/angular/e2e/record-hero-poster-mobile.record.ts b/examples/chat/angular/e2e/record-hero-poster-mobile.record.ts index ef2126eda..c1458b528 100644 --- a/examples/chat/angular/e2e/record-hero-poster-mobile.record.ts +++ b/examples/chat/angular/e2e/record-hero-poster-mobile.record.ts @@ -61,11 +61,23 @@ * 906 is the middle of the third window: Δ=40 puts the prompt's bottom at 50, * wholly above the edge and so cleanly scrolled out, and the table's top at 74, * clear below it. It frames the WHOLE backup table — the result the approval - * beat is about — and, because this height also governs the live autoplaying - * iframe below 768px, it gives the phone demo more viewport than it has ever - * had. (526, the middle of the second window, framed the story but shrank the - * live stage; that trade was rejected.) 906 is even, so it halves to an integer - * at the 1.5x ship scale. + * beat is about. 906 is even, so it halves to an integer at the 1.5x ship + * scale. + * + * Be honest about what this height buys, because it is ONE number serving two + * goals that do not actually agree. The poster needs its top edge in a gap, so + * the capture height is forced. The same ratio then sizes the live autoplaying + * iframe below 768px, and there a taller box is not straightforwardly better: + * at 375px the stage is ~773px starting at y=550, so it runs ~511px past an + * 812px fold and only ~34% of it is ever on screen unscrolled. The honest + * justification for 906 is POSTER FRAMING. The live stage is along for the + * ride, because `object-fit: cover` is only a no-op while the two ratios match. + * + * (526, the middle of the second window, also framed cleanly and kept the live + * stage nearer the fold; it was rejected for shrinking the live viewport 19%. + * If the fold ever matters more than framing the whole table, that is the trade + * to revisit — and decoupling the poster's capture ratio from the stage's would + * dissolve the conflict entirely, at the cost of a real `cover` crop.) * * 650 was the budget until the approval tools became executable (#1011). That * commit replaced a short prose answer with a run that streams a backup TABLE, @@ -82,7 +94,7 @@ * captured at deviceScaleFactor 2 for crisp glyph rasterisation and shipped * resized to 585x1359 (1.5x, and 585:1359 is the same 65:151): the poster is * displayed ~348 CSS px wide on a phone, and 2x would cost far more against the - * desktop poster's ~37KB. + * desktop poster's ~32KB. * * npx playwright test --config examples/chat/angular/e2e/record-hero.config.ts record-hero-poster-mobile */ diff --git a/examples/chat/angular/e2e/record-stage-stills.record.ts b/examples/chat/angular/e2e/record-stage-stills.record.ts index c1f898be9..438a1236f 100644 --- a/examples/chat/angular/e2e/record-stage-stills.record.ts +++ b/examples/chat/angular/e2e/record-stage-stills.record.ts @@ -13,8 +13,10 @@ * Geometry: the desktop frame is the 1200x720 the stage is authored for, with * the devtools docked right. Below 768px the stage renders NO devtools (see * `readStageDock` — the phone path is chat only, a docked panel would eat the - * transcript), so the phone still is the chat at 390x650 (3:5, the phone - * ratio the hero poster uses). `deviceScaleFactor: 2` applies to BOTH sizes: + * transcript), so the phone still is the chat at 390x650 (3:5). This is the + * stage stills' OWN ratio and is no longer shared with the hero poster, which + * moved to 390x906 (65:151) so its capture frames the streamed backup table + * whole; the two assets are independent now. `deviceScaleFactor: 2` applies to BOTH sizes: * the desktop still is a 2400-wide raster downscaled to 1200, and the phone * still a 780-wide raster downscaled to 585 — crisp downscales rather than a * 1x raster shipped as-is or a 1.5x upscale of a 390px one. diff --git a/marketing/assets/src/brand.ts b/marketing/assets/src/brand.ts index 5e56e5c2e..b3172af1b 100644 --- a/marketing/assets/src/brand.ts +++ b/marketing/assets/src/brand.ts @@ -55,5 +55,15 @@ export const brand = { display: 'Archivo Black', sans: 'Archivo', mono: 'JetBrains Mono', + /** + * Deliberately still names Angular, where the website's own cards no longer + * do. `apps/website/src/app/opengraph-image.tsx` and `github-card/route.tsx` + * dropped it in 2026-09 because their H1 is the hero headline, which now + * reads "…for Angular agents" — the eyebrow was repeating the line below it. + * These cards carry a BLOG TITLE instead, with no tagline, so here the word + * is the only thing naming the stack. Dropping it would remove information, + * not de-duplicate it. Do not "fix" this to match the website in a brand + * sweep. + */ defaultEyebrow: 'OPEN SOURCE · ANGULAR', } as const;