Skip to content

Commit 9df7083

Browse files
bloveclaude
andauthored
feat(website): design-program follow-ups — showcase rails, Angular proof cell, closer order (#919)
* docs(website): follow-ups spec Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * feat(website): design-program follow-ups Showcase intros join the rail grammar (the last centered kickers); the ProofStrip regains its Angular cell — revival condition met, npm @latest publishes ^20||^21||^22, value derived from angular-support.mjs; RecentArticles moves above the dark FinalCTA so the closer closes; the gitignored-but-tracked tsbuildinfo is untracked. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
1 parent bb2db99 commit 9df7083

9 files changed

Lines changed: 59 additions & 14 deletions

File tree

apps/website/src/app/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,8 @@ export default async function HomePage() {
126126
<Promises />
127127
<ProofStrip />
128128
<HomeFAQ />
129-
<FinalCTA variant="dark" />
130129
<RecentArticles />
130+
<FinalCTA variant="dark" />
131131
</>
132132
);
133133
}

apps/website/src/components/landing/ProofStrip.spec.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ import { describe, it, expect } from 'vitest';
33
import { ProofStrip, PROOF_CELLS } from './ProofStrip';
44

55
describe('ProofStrip', () => {
6-
it('renders three cells, each with a source link', () => {
6+
it('renders four cells, each with a source link', () => {
77
render(<ProofStrip />);
8-
expect(PROOF_CELLS).toHaveLength(3);
8+
expect(PROOF_CELLS).toHaveLength(4);
99
for (const cell of PROOF_CELLS) {
1010
expect(screen.getByText(cell.caption)).toBeTruthy();
1111
const link = screen.getByRole('link', { name: cell.sourceLabel });

apps/website/src/components/landing/ProofStrip.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { Container } from '../ui/Container';
22
import { Section } from '../ui/Section';
33
import { SectionHeader } from '../ui/SectionHeader';
4+
import { WEBSITE_SUPPORTED_ANGULAR_MAJORS } from '../pricing/angular-support.mjs';
45

56
interface ProofCell {
67
/** Big Garamond numeral, or null when the cell renders a live badge. */
@@ -41,6 +42,14 @@ export const PROOF_CELLS: readonly ProofCell[] = [
4142
sourceLabel: 'hvtracker.net/agents/threadplane',
4243
sourceHref: 'https://hvtracker.net/agents/threadplane/',
4344
},
45+
{
46+
// Revived per the homepage design spec's condition: npm @latest publishes
47+
// ^20 || ^21 || ^22 (verified 2026-08-31). Derived, never hardcoded.
48+
value: `${WEBSITE_SUPPORTED_ANGULAR_MAJORS[0]}${WEBSITE_SUPPORTED_ANGULAR_MAJORS.at(-1)}`,
49+
caption: 'Angular majors supported, CI-tested',
50+
sourceLabel: 'npmjs.com/@threadplane/langgraph',
51+
sourceHref: 'https://www.npmjs.com/package/@threadplane/langgraph',
52+
},
4453
];
4554

4655
export function ProofStrip() {

apps/website/src/components/landing/chat-landing/ChatLandingCodeShowcase.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,12 @@ export async function ChatLandingCodeShowcase() {
3939
return (
4040
<section className="chat-code">
4141
<div className="chat-show-intro">
42-
<p className="chat-show-eyebrow">
42+
<div className="show-intro-rail">
43+
<p className="chat-show-eyebrow">
4344
Developer Experience
44-
</p>
45+
</p>
46+
<span className="show-intro-rail-line" aria-hidden="true" />
47+
</div>
4548
<h2 className="chat-show-heading">
4649
Full-featured chat in a few lines
4750
</h2>

apps/website/src/components/landing/langgraph/LangGraphCodeShowcase.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,12 @@ export async function LangGraphCodeShowcase() {
4747
return (
4848
<section className="angular-code">
4949
<div className="lg-show-intro">
50-
<p className="lg-show-eyebrow">
50+
<div className="show-intro-rail">
51+
<p className="lg-show-eyebrow">
5152
Developer Experience
52-
</p>
53+
</p>
54+
<span className="show-intro-rail-line" aria-hidden="true" />
55+
</div>
5356
<h2 className="lg-show-heading">
5457
Production streaming in a few lines
5558
</h2>

apps/website/src/components/landing/render/RenderCodeShowcase.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,12 @@ export async function RenderCodeShowcase() {
2525
return (
2626
<section className="render-code">
2727
<div className="render-show-intro">
28-
<p className="render-show-eyebrow">
28+
<div className="show-intro-rail">
29+
<p className="render-show-eyebrow">
2930
Developer Experience
30-
</p>
31+
</p>
32+
<span className="show-intro-rail-line" aria-hidden="true" />
33+
</div>
3134
<h2 className="render-show-heading">
3235
Generative UI in a few lines
3336
</h2>

apps/website/src/styles/landing.css

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1005,7 +1005,6 @@
10051005
}
10061006
@media (max-width: 767px) { .render-code { padding: 60px 20px !important; } }
10071007
.render-show-intro {
1008-
text-align: center;
10091008
margin-bottom: 48px;
10101009
}
10111010
.render-show-eyebrow {
@@ -1054,7 +1053,6 @@
10541053
}
10551054
@media (max-width: 767px) { .angular-code { padding: 60px 20px !important; } }
10561055
.lg-show-intro {
1057-
text-align: center;
10581056
margin-bottom: 48px;
10591057
}
10601058
.lg-show-eyebrow {
@@ -1103,7 +1101,6 @@
11031101
}
11041102
@media (max-width: 767px) { .chat-code { padding: 60px 20px !important; } }
11051103
.chat-show-intro {
1106-
text-align: center;
11071104
margin-bottom: 48px;
11081105
}
11091106
.chat-show-eyebrow {
@@ -1337,7 +1334,7 @@
13371334
}
13381335
.proof-strip-cells {
13391336
display: grid;
1340-
grid-template-columns: repeat(3, 1fr);
1337+
grid-template-columns: repeat(4, 1fr);
13411338
gap: 18px;
13421339
list-style: none;
13431340
margin: 0;
@@ -1464,3 +1461,16 @@
14641461
text-transform: uppercase;
14651462
color: var(--color-text-muted);
14661463
}
1464+
1465+
/* Shared rail for the three CodeShowcase intros — the last centered kicker
1466+
* grammar, unified with the sitewide rail anatomy. */
1467+
.show-intro-rail {
1468+
display: flex;
1469+
align-items: baseline;
1470+
gap: 14px;
1471+
}
1472+
.show-intro-rail-line {
1473+
flex: 1;
1474+
height: 1px;
1475+
background: var(--color-border);
1476+
}

apps/website/tsconfig.tsbuildinfo

Lines changed: 0 additions & 1 deletion
This file was deleted.
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Design-program follow-ups
2+
3+
**Date:** 2026-08-31 · **Status:** Approved. · **Branch:** `blove/followups`
4+
5+
1. **Showcase intros → rail.** The three CodeShowcase intros (lg/chat/render
6+
`*-show-intro`) are the last centered kicker grammar. Each eyebrow wraps
7+
in a shared `show-intro-rail` div + aria-hidden hairline; intros
8+
left-align. Headings/snippets untouched.
9+
2. **ProofStrip fourth cell (condition met).** npm @threadplane/langgraph
10+
@latest publishes `^20 || ^21 || ^22` (verified 2026-08-31 against the
11+
registry) — the shipped homepage spec's revival condition for the cut
12+
Angular cell. New cell: value derived from
13+
`WEBSITE_SUPPORTED_ANGULAR_MAJORS` (`20–22`, first–last, NOT hardcoded),
14+
caption "Angular majors supported, CI-tested", source
15+
npmjs.com/package/@threadplane/langgraph. Grid → repeat(4, 1fr); spec
16+
3→4 first.
17+
3. **RecentArticles moves above the dark FinalCTA** so the closer closes.
18+
4. **Untrack `apps/website/tsconfig.tsbuildinfo`** (gitignored but tracked).

0 commit comments

Comments
 (0)