Commit 4ceea5e
feat(website): phone-width hero poster, re-recorded desktop poster, redesigned OG card (#1002)
* feat(website): redesign the Open Graph card for feed legibility
The old card put the product name in an 18px eyebrow, the runtimes and
the capability list inside a three-line 26px paragraph, and three 15px
mono pills along the bottom. At the ~500px a timeline actually renders a
share card, all of that is grey texture: the only legible element was the
headline, and the brand name was the smallest type on the card.
Rebuilt around what survives a 0.42x downscale. Four elements, none below
30px source: the wordmark at 100px, the category line (HERO_H1, now on one
line) at 52px, HERO_SUBHEAD at 36px for what you get, and a LangGraph +
AG-UI pill at 34px for what it plugs into. Centred rather than left-aligned
so a square thumbnail crop keeps the product name.
Moved onto the production dark-surface tokens from ui.css
([data-ui="section"][data-surface="dark"]) resolved to literals, since
Satori cannot read CSS variables, plus the radial accent glow from
landing.css .proof-strip::before and --color-angular-red for the seam.
Text contrast is 16.8:1 (primary), 11:1 (secondary) and 8.6:1 (accent).
Copy stays single-sourced: the wordmark is derived from PRIMARY_TAGLINE
rather than retyped, and the runtime claim is POSITIONING_PROOF_POINTS[0].
`alt` now describes what the card says instead of naming the page.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
* fix(website): ship the OG card's dimensions and alt text
Next's file-convention metadata (the alt and size exports in
app/opengraph-image.tsx) is overridden the moment openGraph.images is set
explicitly. Both layout.tsx and createPageMetadata passed a bare URL string, so
production emitted og:image alone — no width or height for a platform to lay
the card out before fetching it, and no alt text at all.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
* chore(examples): record the hero poster at phone width
A parallel to record-hero-poster.record.ts that drives /hero at 390x650 and
writes hero-walkthrough-poster-mobile.webp. Same beat as the desktop script —
the first streamed reply — because 650 CSS px is the shortest frame that holds
the whole answer from its first line, and because matching beats mean crossing
the breakpoint swaps the source without changing the story.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
* feat(website): ship a phone-width hero poster
The hero poster is the server-rendered LCP and the only thing a phone sees
until it taps Play. It was a 1200x720 desktop capture; at 390px it landed in a
348px stage, so the last change narrowed the stage to 4/5 and pushed
object-position to 40% so cover would crop rather than shrink. That bought
legibility and paid for it in credibility: every line of prose lost its right
edge, and the frame read as a broken screenshot.
Replaced with a second render of the same moment at phone dimensions
(585x975, 33,576 bytes against the desktop poster's 37,718), chosen by a
<picture> media source on the same 768px boundary the stage ratio and
MIN_AUTOPLAY_WIDTH already use. The stage below the breakpoint now holds 3/5 —
the capture's own ratio — so object-fit: cover crops nothing and the
object-position nudge is gone. currentSrc resolves to the phone poster at 390
and to the desktop one at 768 and 1440; the stage box measures the same with
the image aborted as with it loaded at all three widths, so the swap costs no
layout shift.
Two follow-on fixes the new asset exposed: the phone frame ends on the demo's
own "Take control" button, which read straight through the play control's
97% fill and sat half-uncovered beneath it. The fill is now opaque and the
control drops to 12px on phones so it lands squarely on the dead one.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
* fix(website): re-record both hero posters on the shipping layout
The desktop poster was stale. It showed "Take control" floating over the
composer — the absolutely-positioned layout replaced in #998 — and a beat
where the walkthrough's second prompt was already typed into the composer.
It is the LCP element for every desktop visitor, so the largest image on the
homepage was showing a UI that no longer exists.
Both recorders now hold 2500ms after the interrupt detaches instead of 1500ms.
That is about the scripted cursor, not the text: HOLD_AFTER_ANSWER_MS (2000)
plus CURSOR_MOVE_MS (650) means at 1500ms the arrow is still parked where it
pressed Accept, which at phone width dropped it onto the word `retain` in step
3 — an artifact rather than a hint that the demo is live. At 2500ms it has
reached the composer, which is the beat the desktop script's docstring has
always claimed. The beat intent is otherwise unchanged: the first streamed
reply, with the user turn, the tool call and the whole answer on screen.
Both scripts now assert what they captured — `.hero__take` visible in normal
flow, composer empty — so a drifted wait or another layout change fails the
recording instead of silently shipping a poster of a UI we no longer have.
Desktop 37,718 -> 38,114 bytes; phone 33,576 -> 33,624.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
---------
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>1 parent 971581c commit 4ceea5e
12 files changed
Lines changed: 466 additions & 134 deletions
File tree
- apps/website
- public/screenshots
- src
- app
- components/landing
- lib
- styles
- examples/chat/angular/e2e
Loading
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
13 | | - | |
| 13 | + | |
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
| |||
48 | 48 | | |
49 | 49 | | |
50 | 50 | | |
51 | | - | |
| 51 | + | |
52 | 52 | | |
53 | 53 | | |
54 | 54 | | |
55 | 55 | | |
56 | 56 | | |
57 | | - | |
| 57 | + | |
58 | 58 | | |
59 | 59 | | |
60 | 60 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
7 | 33 | | |
8 | 34 | | |
9 | | - | |
| 35 | + | |
10 | 36 | | |
11 | 37 | | |
12 | 38 | | |
13 | 39 | | |
14 | 40 | | |
15 | | - | |
16 | 41 | | |
17 | 42 | | |
18 | 43 | | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
19 | 78 | | |
20 | | - | |
| 79 | + | |
21 | 80 | | |
22 | 81 | | |
23 | 82 | | |
24 | 83 | | |
25 | 84 | | |
26 | 85 | | |
27 | 86 | | |
28 | | - | |
| 87 | + | |
29 | 88 | | |
30 | 89 | | |
31 | | - | |
32 | | - | |
| 90 | + | |
33 | 91 | | |
| 92 | + | |
| 93 | + | |
34 | 94 | | |
35 | 95 | | |
36 | | - | |
37 | | - | |
38 | | - | |
39 | | - | |
40 | | - | |
41 | | - | |
42 | | - | |
43 | | - | |
44 | | - | |
45 | | - | |
46 | | - | |
47 | | - | |
48 | | - | |
49 | | - | |
50 | | - | |
51 | | - | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
52 | 102 | | |
53 | 103 | | |
54 | | - | |
55 | | - | |
56 | | - | |
57 | | - | |
58 | | - | |
59 | | - | |
60 | | - | |
61 | | - | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
62 | 112 | | |
63 | | - | |
64 | | - | |
65 | | - | |
| 113 | + | |
66 | 114 | | |
67 | | - | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
68 | 121 | | |
69 | 122 | | |
70 | | - | |
71 | | - | |
72 | | - | |
73 | | - | |
74 | | - | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
75 | 126 | | |
76 | | - | |
77 | | - | |
78 | | - | |
| 127 | + | |
79 | 128 | | |
80 | | - | |
81 | 129 | | |
82 | 130 | | |
83 | 131 | | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
84 | 135 | | |
85 | | - | |
86 | | - | |
| 136 | + | |
| 137 | + | |
87 | 138 | | |
88 | 139 | | |
89 | | - | |
90 | | - | |
91 | | - | |
92 | | - | |
93 | | - | |
94 | | - | |
95 | | - | |
| 140 | + | |
96 | 141 | | |
97 | 142 | | |
98 | 143 | | |
99 | 144 | | |
100 | | - | |
| 145 | + | |
101 | 146 | | |
102 | | - | |
| 147 | + | |
103 | 148 | | |
104 | | - | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
105 | 195 | | |
106 | 196 | | |
107 | | - | |
108 | | - | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
109 | 226 | | |
110 | 227 | | |
111 | 228 | | |
| |||
116 | 233 | | |
117 | 234 | | |
118 | 235 | | |
119 | | - | |
120 | | - | |
121 | | - | |
122 | | - | |
123 | | - | |
124 | | - | |
125 | | - | |
126 | | - | |
127 | | - | |
128 | | - | |
129 | | - | |
130 | | - | |
131 | | - | |
132 | | - | |
133 | | - | |
134 | | - | |
135 | | - | |
136 | | - | |
137 | | - | |
138 | | - | |
139 | | - | |
140 | | - | |
141 | | - | |
142 | | - | |
143 | | - | |
144 | | - | |
145 | | - | |
146 | | - | |
147 | | - | |
148 | | - | |
149 | | - | |
150 | | - | |
151 | | - | |
152 | | - | |
153 | | - | |
154 | | - | |
155 | | - | |
156 | | - | |
157 | | - | |
| |||
0 commit comments