From a4e8af683e9b56781f2841b201a22b19a8fad679 Mon Sep 17 00:00:00 2001 From: Brian Love Date: Fri, 10 Apr 2026 13:19:35 -0700 Subject: [PATCH] =?UTF-8?q?fix(website):=20address=20code=20review=20?= =?UTF-8?q?=E2=80=94=20responsive=20grid,=20unique=20IDs,=20iframe=20sandb?= =?UTF-8?q?ox,=20design=20tokens?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. FeaturesGrid: minmax(440px) → minmax(min(440px, 100%)) for mobile 2. WhitePaperGate: unique IDs per library (angular-, render-, chat-) 3. Iframes: add sandbox="allow-scripts allow-same-origin" 4. Design tokens: add renderGreen (#1a7a40) and chatPurple (#5a00c8), replace all hardcoded color values across 15 component files Co-Authored-By: Claude Opus 4.6 --- apps/website/src/components/landing/LibrariesSection.tsx | 4 ++-- .../components/landing/angular/AngularFeaturesGrid.tsx | 3 ++- .../components/landing/angular/AngularWhitePaperGate.tsx | 2 +- .../landing/chat-landing/ChatLandingCodeShowcase.tsx | 4 ++-- .../landing/chat-landing/ChatLandingComparison.tsx | 6 +++--- .../landing/chat-landing/ChatLandingFeaturesGrid.tsx | 5 +++-- .../landing/chat-landing/ChatLandingFooterCTA.tsx | 4 ++-- .../components/landing/chat-landing/ChatLandingHero.tsx | 6 +++--- .../landing/chat-landing/ChatLandingWhitePaperGate.tsx | 8 ++++---- .../src/components/landing/render/RenderCodeShowcase.tsx | 2 +- .../src/components/landing/render/RenderComparison.tsx | 6 +++--- .../src/components/landing/render/RenderFeaturesGrid.tsx | 3 ++- .../src/components/landing/render/RenderFooterCTA.tsx | 2 +- apps/website/src/components/landing/render/RenderHero.tsx | 2 +- .../components/landing/render/RenderProblemSolution.tsx | 4 ++-- .../components/landing/render/RenderWhitePaperGate.tsx | 8 ++++---- libs/design-tokens/src/lib/colors.ts | 4 ++++ 17 files changed, 40 insertions(+), 33 deletions(-) diff --git a/apps/website/src/components/landing/LibrariesSection.tsx b/apps/website/src/components/landing/LibrariesSection.tsx index 3c06b0dc0..9cc213d4b 100644 --- a/apps/website/src/components/landing/LibrariesSection.tsx +++ b/apps/website/src/components/landing/LibrariesSection.tsx @@ -19,7 +19,7 @@ const LIBRARIES = [ id: 'render', tag: 'Gen UI', pkg: '@cacheplane/render', - color: '#1a7a40', + color: tokens.colors.renderGreen, rgb: '26,122,64', oneLiner: 'Agents that render UI — without coupling to your frontend', chips: ['', 'defineAngularRegistry()', 'signalStateStore()', 'JSON patch'], @@ -30,7 +30,7 @@ const LIBRARIES = [ id: 'chat', tag: 'Chat', pkg: '@cacheplane/chat', - color: '#5a00c8', + color: tokens.colors.chatPurple, rgb: '90,0,200', oneLiner: 'Batteries-included agent chat — fully featured from day one', chips: ['', '', '', ''], diff --git a/apps/website/src/components/landing/angular/AngularFeaturesGrid.tsx b/apps/website/src/components/landing/angular/AngularFeaturesGrid.tsx index b201c518a..ddfd39e97 100644 --- a/apps/website/src/components/landing/angular/AngularFeaturesGrid.tsx +++ b/apps/website/src/components/landing/angular/AngularFeaturesGrid.tsx @@ -40,7 +40,7 @@ export function AngularFeaturesGrid() {
{FEATURES.map((feat, i) => (
diff --git a/apps/website/src/components/landing/angular/AngularWhitePaperGate.tsx b/apps/website/src/components/landing/angular/AngularWhitePaperGate.tsx index 2d4b1eb6a..3f3ee75ab 100644 --- a/apps/website/src/components/landing/angular/AngularWhitePaperGate.tsx +++ b/apps/website/src/components/landing/angular/AngularWhitePaperGate.tsx @@ -37,7 +37,7 @@ export function AngularWhitePaperGate() { }; return ( -
+
Developer Experience

@@ -73,7 +73,7 @@ export function ChatLandingCodeShowcase() { }}> {s.title} diff --git a/apps/website/src/components/landing/chat-landing/ChatLandingComparison.tsx b/apps/website/src/components/landing/chat-landing/ChatLandingComparison.tsx index 8af4abc86..dfdfa56b8 100644 --- a/apps/website/src/components/landing/chat-landing/ChatLandingComparison.tsx +++ b/apps/website/src/components/landing/chat-landing/ChatLandingComparison.tsx @@ -28,7 +28,7 @@ export function ChatLandingComparison() {

Head to Head

@@ -61,7 +61,7 @@ export function ChatLandingComparison() {
{h}
@@ -88,7 +88,7 @@ export function ChatLandingComparison() {
{row.theirs}
-
+
{row.ours}
diff --git a/apps/website/src/components/landing/chat-landing/ChatLandingFeaturesGrid.tsx b/apps/website/src/components/landing/chat-landing/ChatLandingFeaturesGrid.tsx index ab4930bc1..783375779 100644 --- a/apps/website/src/components/landing/chat-landing/ChatLandingFeaturesGrid.tsx +++ b/apps/website/src/components/landing/chat-landing/ChatLandingFeaturesGrid.tsx @@ -24,7 +24,7 @@ export function ChatLandingFeaturesGrid() {

Features

@@ -39,7 +39,7 @@ export function ChatLandingFeaturesGrid() {
{FEATURES.map((feat, i) => (
diff --git a/apps/website/src/components/landing/chat-landing/ChatLandingFooterCTA.tsx b/apps/website/src/components/landing/chat-landing/ChatLandingFooterCTA.tsx index 235394b70..1c14eb33a 100644 --- a/apps/website/src/components/landing/chat-landing/ChatLandingFooterCTA.tsx +++ b/apps/website/src/components/landing/chat-landing/ChatLandingFooterCTA.tsx @@ -27,7 +27,7 @@ export function ChatLandingFooterCTA() { @@ -36,7 +36,7 @@ export function ChatLandingFooterCTA() { @cacheplane/chat @@ -39,7 +39,7 @@ export function ChatLandingHero() { @@ -50,7 +50,7 @@ export function ChatLandingHero() { display: 'inline-flex', alignItems: 'center', gap: 6, background: tokens.glass.bg, backdropFilter: `blur(${tokens.glass.blur})`, WebkitBackdropFilter: `blur(${tokens.glass.blur})`, - color: '#5a00c8', fontFamily: 'Inter, sans-serif', + color: tokens.colors.chatPurple, fontFamily: 'Inter, sans-serif', fontSize: 15, fontWeight: 600, padding: '0.875rem 1.75rem', borderRadius: 8, textDecoration: 'none', border: '1px solid rgba(90,0,200,0.2)', minHeight: 44, }}> diff --git a/apps/website/src/components/landing/chat-landing/ChatLandingWhitePaperGate.tsx b/apps/website/src/components/landing/chat-landing/ChatLandingWhitePaperGate.tsx index 6e04697a3..6bbe75de3 100644 --- a/apps/website/src/components/landing/chat-landing/ChatLandingWhitePaperGate.tsx +++ b/apps/website/src/components/landing/chat-landing/ChatLandingWhitePaperGate.tsx @@ -37,7 +37,7 @@ export function ChatLandingWhitePaperGate() { }; return ( -
+
Free Download

@@ -76,7 +76,7 @@ export function ChatLandingWhitePaperGate() {
{s.title} diff --git a/apps/website/src/components/landing/render/RenderComparison.tsx b/apps/website/src/components/landing/render/RenderComparison.tsx index daee9e573..24defef59 100644 --- a/apps/website/src/components/landing/render/RenderComparison.tsx +++ b/apps/website/src/components/landing/render/RenderComparison.tsx @@ -60,7 +60,7 @@ export function RenderComparison() {
{h}
@@ -87,8 +87,8 @@ export function RenderComparison() {
{row.theirs}
-
- +
+ {row.ours}
diff --git a/apps/website/src/components/landing/render/RenderFeaturesGrid.tsx b/apps/website/src/components/landing/render/RenderFeaturesGrid.tsx index 54177382c..fc67081ca 100644 --- a/apps/website/src/components/landing/render/RenderFeaturesGrid.tsx +++ b/apps/website/src/components/landing/render/RenderFeaturesGrid.tsx @@ -40,7 +40,7 @@ export function RenderFeaturesGrid() {
{FEATURES.map((feat, i) => (
diff --git a/apps/website/src/components/landing/render/RenderFooterCTA.tsx b/apps/website/src/components/landing/render/RenderFooterCTA.tsx index 4f6def963..00a3d1784 100644 --- a/apps/website/src/components/landing/render/RenderFooterCTA.tsx +++ b/apps/website/src/components/landing/render/RenderFooterCTA.tsx @@ -27,7 +27,7 @@ export function RenderFooterCTA() {
diff --git a/apps/website/src/components/landing/render/RenderHero.tsx b/apps/website/src/components/landing/render/RenderHero.tsx index ec9453cf9..3077cb1ee 100644 --- a/apps/website/src/components/landing/render/RenderHero.tsx +++ b/apps/website/src/components/landing/render/RenderHero.tsx @@ -39,7 +39,7 @@ export function RenderHero() { diff --git a/apps/website/src/components/landing/render/RenderProblemSolution.tsx b/apps/website/src/components/landing/render/RenderProblemSolution.tsx index c2d5a1410..c13840aae 100644 --- a/apps/website/src/components/landing/render/RenderProblemSolution.tsx +++ b/apps/website/src/components/landing/render/RenderProblemSolution.tsx @@ -66,7 +66,7 @@ export function RenderProblemSolution() { With @cacheplane/render @@ -79,7 +79,7 @@ export function RenderProblemSolution() {
    {SOLUTIONS.map(s => (
  • - {s} + {s}
  • ))}
diff --git a/apps/website/src/components/landing/render/RenderWhitePaperGate.tsx b/apps/website/src/components/landing/render/RenderWhitePaperGate.tsx index 042f08226..03ba37a18 100644 --- a/apps/website/src/components/landing/render/RenderWhitePaperGate.tsx +++ b/apps/website/src/components/landing/render/RenderWhitePaperGate.tsx @@ -37,7 +37,7 @@ export function RenderWhitePaperGate() { }; return ( -
+
✓ Thanks! We'll reach out when the guide is updated.
@@ -121,7 +121,7 @@ export function RenderWhitePaperGate() { padding: '10px 24px', borderRadius: 9, background: email ? 'rgba(26,122,64,.08)' : 'rgba(0,0,0,.04)', border: `1px solid ${email ? 'rgba(26,122,64,.22)' : 'rgba(0,0,0,.08)'}`, - color: email ? '#1a7a40' : tokens.colors.textMuted, + color: email ? tokens.colors.renderGreen : tokens.colors.textMuted, fontFamily: 'var(--font-mono,"JetBrains Mono",monospace)', fontSize: '0.72rem', fontWeight: 700, textTransform: 'uppercase', letterSpacing: '0.08em', cursor: email ? 'pointer' : 'not-allowed', diff --git a/libs/design-tokens/src/lib/colors.ts b/libs/design-tokens/src/lib/colors.ts index 4cce60993..850b10478 100644 --- a/libs/design-tokens/src/lib/colors.ts +++ b/libs/design-tokens/src/lib/colors.ts @@ -29,6 +29,10 @@ export const colors = Object.freeze({ sidebarBg: 'rgba(255, 255, 255, 0.45)', /** Angular brand red */ angularRed: '#DD0031', + /** Render library — green */ + renderGreen: '#1a7a40', + /** Chat library — purple */ + chatPurple: '#5a00c8', } as const); export type Colors = typeof colors;