From 847d0b1bbe8ea171bbeec30f4a17892d387656ed Mon Sep 17 00:00:00 2001 From: Brian Love Date: Tue, 19 May 2026 11:15:36 -0700 Subject: [PATCH 01/12] feat(website): homepage marketing refresh - positioning.ts: rework tagline / subheads to lead with "Agent UI for Angular" + durable threads, interrupts, subagents, planning, memory, generative UI; name Vercel json-render and Google A2UI explicitly. - Nav: trim Solutions, API, Pricing, Blog; rename primary CTA from "Get Started" to "Talk to Us" pointing at /contact (both desktop and mobile). - Hero: swap canonical demo screenshot to a generative-UI sample (airline operations dashboard rendered by the agent). - launch.json: add genui-python + genui-angular configs used to capture the new hero asset locally. Co-Authored-By: Claude Opus 4.7 (1M context) --- .claude/launch.json | 12 +++++++++ .../canonical-demo-generative-ui.webp | Bin 0 -> 57538 bytes apps/website/src/components/landing/Hero.tsx | 4 +-- apps/website/src/components/shared/Nav.tsx | 24 ++++++++---------- apps/website/src/lib/positioning.ts | 11 +++++--- 5 files changed, 31 insertions(+), 20 deletions(-) create mode 100644 apps/website/public/screenshots/canonical-demo-generative-ui.webp diff --git a/.claude/launch.json b/.claude/launch.json index 5ffcfcaf8..9c61833b2 100644 --- a/.claude/launch.json +++ b/.claude/launch.json @@ -25,6 +25,18 @@ "runtimeExecutable": "/bin/bash", "runtimeArgs": ["-c", "export PATH=/Users/blove/.nvm/versions/node/v22.14.0/bin:$PATH && npx nx serve examples-chat-angular --port 4400"], "port": 4400 + }, + { + "name": "genui-python", + "runtimeExecutable": "/bin/bash", + "runtimeArgs": ["-c", "set -a && source /Users/blove/repos/angular-agent-framework/.env && set +a && cd cockpit/chat/generative-ui/python && uv run langgraph dev --port 5508 --no-browser"], + "port": 5508 + }, + { + "name": "genui-angular", + "runtimeExecutable": "/bin/bash", + "runtimeArgs": ["-c", "export PATH=/Users/blove/.nvm/versions/node/v22.14.0/bin:$PATH && npx nx serve cockpit-chat-generative-ui-angular --port 4500"], + "port": 4500 } ] } diff --git a/apps/website/public/screenshots/canonical-demo-generative-ui.webp b/apps/website/public/screenshots/canonical-demo-generative-ui.webp new file mode 100644 index 0000000000000000000000000000000000000000..fdfec23cf5e5c49dec7d54f7efcb80bd4f3f5333 GIT binary patch literal 57538 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�lHg!fsAmX}C6QM=O<+R| zEWXN)>V6_K@6C-C3f<8&2nYAw=~TZd2L!iafZ;$+!S8An3($1>mWF;Ci6I=(?4=GG z#4pj0A<|P2%h-O{fSgZ59IgDpbeZLWU=uFvZ<@iw-808hYwd4s?i%4|oAav*U=YXqEofap1YAzWmx^oc*({Rhw=$HSflkOD&g<9Q;2AIg`J3 zy&JO2+u^wUnuP3_PJ=MNG#O$^igA14-rN}Yy-wE zVTz=rJ`-o$8;t7b2)BHbt8FpwYHBDnPM;kM?s%GJHhgA%59`WecQOgFs?cWL5X|yz zASBnTt?=0%vMSUm-Zy1P1-_{LS5lT2mSSLY9c$TjP4-JZ9z!D8HP%gpR!9B=@)YSGqHR6c%HN&7a!px1=zUs4{ z`jF}lODcI>yG*7=pp}}0->QKk?l`gEW8c5&j)#L9BLutE*<|b(yh4}CqWSC$=SY{k zgOkn<)@aS(=%#6Y%lC~G)ik_0K&N|7s)j%wI<7sKm$43LA55Ax7tu$&fWV4vKh~un zCY)BCHNej|H6ebC@BskZy>uNhXxWq&%x*eZj%qxRObVDGVKXM`^GBBih>!21oL`~* z=En++rFs$cpCjzjC--tHa2%WuP~sw!lJ3SOv{G{Z4(q5YFps?Hw`t6l28Z2it*T4A z8ReR+NaM35#H~M*QtO{^^-s(3za7I#H?qK<8FKmk4!^tYf1p0oG-O?kk-bOLW!+h; z7Pvvi)o=dT?>_QxGx2v|RVc9|_*D`ArNihP8~#Q2o#Om^pfBOA)O$0sF>Les<6kh7 zu)7s~-2aL9zf+j!i&<;oGIZ2G`xN1vPjT!^ z`B28)N$Fx16%ftt`t~i8^(MqeXjMe2_1! zU*tuJ_(yCggku$znFZOor4EE697usgC0lxU{a5simpxI&uuc-?q&R*p+xICgT)%El z%&>7$#=mY5dBwfY1^+jyBaMI7OS=yu#|w{+RK@HSHcmiSem=)MHT)nSbkV%wO-J|0 z|BRLo5#PYFKP;To!ptK0wT-~RfH;)uxZ2KfmwVPFLe-uq+13lXHFwY+ zD|^LS%FJ?Zq`Ym@M75D{2GA$Jl9B9}x=yJ=66&U?I(ZVHqx`Owh}cDcCqIm&U2IWJ z@<>%XGS@FgP=Evy@-yx^NnwNusf+VYt#yFOG?(CP6wMa0o$gs&4bpQa^$EUa7 ziAfSaodkCpU0;MtQA}Z;jb?RONpJZ^cZ>`0U6hm(^&{71eYxYD_Z>o6J>N9_iY{eh z$n#8#5cS;D^E@G3z564Ji})*k-@Pt!^>dm5YwQ>t{iqA9zKTbl4|L&X&++|B-Px&5 z8lbT_vD*5+u7rSYCcM(pE~{rpI#ZXEQyAUF2LSD=yW0(=;R)Fh{xEnDg1}txhhFI} zb~syQX@GS)hOUL0%q6(;DPZi&UY<5lz<80kOPWOy@Ls@OqF2~)#}C$#4pttW4qx=i zd+$Cv#{hbWfGcA9v)@uj>Exhdl=@Xp}E@RAiPA7!yG``G%eYfA#rii4SBCGni8gIQPdA!pN4)Hc9xT)p5X2n1r_my z!-iD^Wn9P(NBRN9i!i!L8EA9=l3pT!nkr_v%*x^U$o=m2V#u~`Ig4Wc+U4kTqc-+A z5=qqf#U@LrAXf+LrqkK?%UZN7;Mb_TLEG#dnLWM{UY>6Fu&))H0Ee73S)mdh8Neo3 z4jGnRx6N8C=n$mdOVJNEs$n-HgYG1h2tOQUzROm$)cLhBH0!(D3H!*f@K;`B=|WNi zmgOM<-SzH2Lj%8M)X@dI-%f#?wK$|TV)<`&GPiP*OJL*#q^#PgMa4U*e$o?dx$obC zPX*d;5|ts8%_pLl)+2ViYrQ~5+v$8;8sM|DP)SBp;}gk*g(!y5i!G^BvEdUD5da;1916 zS$OL

eoSG`d_g_io~ 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 Canonical demo — streaming chat rendering a markdown response with code block and table trackCtaClick({ surface: 'nav', - destination_url: '/pilot-to-prod#whitepaper-block', - cta_id: 'nav_get_started', - cta_text: 'Get Started', + destination_url: '/contact', + cta_id: 'nav_talk_to_us', + cta_text: 'Talk to Us', })} > - Get Started + Talk to Us @@ -324,19 +320,19 @@ export function Nav() { diff --git a/apps/website/src/lib/positioning.ts b/apps/website/src/lib/positioning.ts index fc9750cf6..045672fb3 100644 --- a/apps/website/src/lib/positioning.ts +++ b/apps/website/src/lib/positioning.ts @@ -1,6 +1,8 @@ -export const PRIMARY_TAGLINE = 'Agent UI for Angular — Production-ready chat, threads, and generative UI for AI agents.'; -export const LONG_SUBHEAD = 'The enterprise-grade Angular UI framework for LangGraph and AG-UI-compatible agents: headless chat, durable threads, interrupts, subagents, planning, memory, and generative UI through json-render and A2UI-compatible specs.'; -export const HERO_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.'; +export const PRIMARY_TAGLINE = + 'Agent UI for Angular. Durable threads, interrupts, subagents, planning, memory, and generative UI.'; +export const LONG_SUBHEAD = + 'The fullstack agentic Angular framework for LangGraph and AG-UI-compatible agents: durable threads, interrupts, subagents, planning, memory, and generative UI using Vercel json-render and Google A2UI.'; +export const HERO_SUBHEAD = `Build fullstack agentic apps in Angular with: durable threads, interrupts, subagents, planning, memory, and generative UI using Vercel json-render and Google A2UI.`; export const POSITIONING_PROOF_POINTS = [ 'LangGraph + AG-UI', 'Durable threads', @@ -9,5 +11,6 @@ export const POSITIONING_PROOF_POINTS = [ 'Planning + memory', 'json-render + A2UI', ] as const; -export const SHORT_POSITIONING_DESCRIPTION = 'Production-ready chat, durable threads, interrupts, subagents, planning, memory, and generative UI for Angular agent apps.'; +export const SHORT_POSITIONING_DESCRIPTION = + 'Production-ready chat, durable threads, interrupts, subagents, planning, memory, and generative UI for agentic Angular apps.'; export const DEFAULT_META_DESCRIPTION = SHORT_POSITIONING_DESCRIPTION; From f1070d1c8a9fe0f978edbd3319e2f4c20babab8b Mon Sep 17 00:00:00 2001 From: Brian Love Date: Tue, 19 May 2026 11:15:42 -0700 Subject: [PATCH 02/12] docs(superpowers): spec + plan for "Why this exists" section redesign MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 10-row production-readiness checklist replacing the 4-card differentiator grid; dramatizes the demos→production gap and hands off to /pilot-to-prod. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../2026-05-19-why-this-exists-section.md | 484 ++++++++++++++++++ ...26-05-19-why-this-exists-section-design.md | 104 ++++ 2 files changed, 588 insertions(+) create mode 100644 docs/superpowers/plans/2026-05-19-why-this-exists-section.md create mode 100644 docs/superpowers/specs/2026-05-19-why-this-exists-section-design.md diff --git a/docs/superpowers/plans/2026-05-19-why-this-exists-section.md b/docs/superpowers/plans/2026-05-19-why-this-exists-section.md new file mode 100644 index 000000000..9bb15e029 --- /dev/null +++ b/docs/superpowers/plans/2026-05-19-why-this-exists-section.md @@ -0,0 +1,484 @@ +# "Why this exists" section redesign — 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:** Replace the 4-card "Why this exists" section in `apps/website/src/components/landing/Differentiator.tsx` with a 10-row production-readiness checklist that dramatizes the demos→production gap. + +**Architecture:** Single React Server Component rewrite. No new files except a co-located spec test. Section keeps its position on the landing page; only its internal content + layout change. Pulls data from a local `PRODUCTION_ROWS` array; renders each row as a flex layout `[check icon] [bold need] [muted description] [mono primitive]` with hairline dividers. Footer "Pilot to Prod" link is a tracked CTA. + +**Tech Stack:** Next.js 16 (Turbopack), React 19, TypeScript, `@ngaf/design-tokens`, Vitest (`vite.config.mts`), React Testing Library (project already uses `@testing-library/react` per existing landing specs), `apps/website/src/lib/analytics/client.ts` (`trackCtaClick`). + +**Reference:** Spec at `docs/superpowers/specs/2026-05-19-why-this-exists-section-design.md`. + +--- + +## File map + +- **Modify:** `apps/website/src/components/landing/Differentiator.tsx` + - Drop existing `CARDS` array, drop 4-card grid. + - Add `PRODUCTION_ROWS` array (10 entries). + - Add inline `CheckIcon` SVG component. + - Update headline + subhead + add footer link with `trackCtaClick`. + - Convert from server component (currently no `'use client'`) to client component — needed because `trackCtaClick` runs on click. +- **Create:** `apps/website/src/components/landing/Differentiator.spec.tsx` + - Vitest + React Testing Library. + - Asserts headline text, all 10 rows render with need/description/primitive, footer link points to `/pilot-to-prod`, click fires `trackCtaClick`. + +No changes to `positioning.ts`, `Nav.tsx`, `Hero.tsx`, `Section.tsx`, `Container.tsx`, `Eyebrow.tsx`, or any analytics events file (event shape is generic `trackCtaClick`, no new event type needed). + +--- + +## Task 1: Update Differentiator.tsx — content & structure + +**Files:** +- Modify: `apps/website/src/components/landing/Differentiator.tsx` + +- [ ] **Step 1: Replace the file contents** + +Overwrite `apps/website/src/components/landing/Differentiator.tsx` with: + +```tsx +'use client'; + +import { tokens } from '@ngaf/design-tokens'; +import { Container } from '../ui/Container'; +import { Section } from '../ui/Section'; +import { Eyebrow } from '../ui/Eyebrow'; +import { trackCtaClick } from '../../lib/analytics/client'; + +interface ProductionRow { + need: string; + description: string; + primitive: string; +} + +const PRODUCTION_ROWS: ProductionRow[] = [ + { + need: 'Durable threads', + description: 'Persist across reloads, resume, branch, replay.', + primitive: 'threadId signal + durable transports', + }, + { + need: 'Resumable interrupts', + description: 'Human-in-the-loop pause, resume token, retry, cancel.', + primitive: 'interrupt(), resume()', + }, + { + need: 'Tool calls as events', + description: 'Stream progress, structured args, surfaced errors.', + primitive: 'tool events on agent()', + }, + { + need: 'Streaming state as signals', + description: 'messages(), status(), error() — not promises.', + primitive: 'signal-native agent()', + }, + { + need: 'Generative UI on your design system', + description: 'Vercel json-render + Google A2UI rendered into your Angular components.', + primitive: '@ngaf/render', + }, + { + need: 'Recoverable errors', + description: 'Retry, reload, error boundaries, fallback content.', + primitive: 'error(), reload()', + }, + { + need: 'Backend portability', + description: 'LangGraph today; AG-UI / Mastra / CrewAI / your own tomorrow — same UI.', + primitive: 'runtime adapters behind one contract', + }, + { + need: 'Angular-native', + description: 'DI, signals, RxJS interop — no React rewrite.', + primitive: 'built on Angular primitives, not ported', + }, + { + need: 'Observability hooks', + description: 'Tracing seams; app telemetry off by default.', + primitive: 'event hooks, opt-in only', + }, + { + need: 'MIT + self-hosted', + description: 'Own the primitives long-term, no vendor lock-in.', + primitive: 'MIT-licensed, no runtime SaaS dependency', + }, +]; + +function CheckIcon() { + return ( + + ); +} + +export function Differentiator() { + return ( +

+ +
+ Why this exists +

+ Everything an Angular agent needs once the demo works. +

+

+ A streaming chat tutorial takes an hour. Shipping a real agent — durable, interruptible, observable, on your design system — takes most teams six months. NGAF gives the Angular surface that the rest of the stack assumes you've already built. +

+
+ +
    + {PRODUCTION_ROWS.map((row) => ( +
  • + +
    +
    + + {row.need} + + + {row.description} + +
    + + {row.primitive} + +
    +
  • + ))} +
+ +

+ Want help walking these on your codebase?{' '} + + trackCtaClick({ + surface: 'home', + destination_url: '/pilot-to-prod', + cta_id: 'home_why_pilot_to_prod', + cta_text: 'Pilot to Prod', + }) + } + style={{ color: tokens.colors.accent, textDecoration: 'none', fontWeight: 600 }} + > + Pilot to Prod → + +

+ + +
+
+ ); +} +``` + +- [ ] **Step 2: Type-check the file** + +Run: `npx nx typecheck website 2>&1 | tail -20` +Expected: no errors referencing `Differentiator.tsx`. (Other unrelated typecheck output is fine; just confirm the file isn't in the error list.) + +If the project has no `typecheck` target, run: `npx tsc -p apps/website/tsconfig.json --noEmit 2>&1 | grep -i differentiator || echo "ok"` +Expected: `ok`. + +- [ ] **Step 3: Visual check in dev server** + +The website-dev preview server should already be running (port 3000). If not, start it via the harness preview tool. + +Use `preview_eval` to reload, then `preview_resize` to 1280×820, then `preview_screenshot`. Verify: +- Eyebrow "Why this exists" visible. +- Headline reads exactly "Everything an Angular agent needs once the demo works." +- 10 rows render, each with a check icon, bold need, muted description, mono primitive on the right. +- Footer line "Want help walking these on your codebase? Pilot to Prod →" appears below the list. + +- [ ] **Step 4: Commit** + +```bash +git add apps/website/src/components/landing/Differentiator.tsx +git commit -m "$(cat <<'EOF' +feat(website): rewrite "Why this exists" section as production-readiness checklist + +Replaces the 4-card differentiator grid with a 10-row checklist that dramatizes +the demos→production gap. Each row pairs a production need with the concrete +NGAF primitive that covers it. Footer hands off to /pilot-to-prod. + +See docs/superpowers/specs/2026-05-19-why-this-exists-section-design.md. + +Co-Authored-By: Claude Opus 4.7 (1M context) +EOF +)" +``` + +--- + +## Task 2: Add Differentiator.spec.tsx + +**Files:** +- Create: `apps/website/src/components/landing/Differentiator.spec.tsx` + +- [ ] **Step 1: Confirm sibling test convention** + +Run: `ls apps/website/src/components/landing/*.spec.tsx 2>/dev/null | head -3` +Expected output may be empty (no landing specs yet) — that's fine; the test framework wiring still applies workspace-wide. + +Run: `grep -l "@testing-library/react" apps/website/package.json apps/website/vite.config.mts 2>/dev/null` +Expected: at least one match (RTL is already a dep). + +If RTL is *not* present, stop and add it before continuing: +```bash +npx nx run website:install --pkg=@testing-library/react --dev +``` +Expected: clean install. Then continue. + +- [ ] **Step 2: Write the failing test file** + +Create `apps/website/src/components/landing/Differentiator.spec.tsx`: + +```tsx +import { describe, it, expect, vi, beforeEach } from 'vitest'; +import { render, screen, fireEvent } from '@testing-library/react'; +import { Differentiator } from './Differentiator'; + +vi.mock('../../lib/analytics/client', () => ({ + trackCtaClick: vi.fn(), + trackExternalLinkClick: vi.fn(), +})); + +import { trackCtaClick } from '../../lib/analytics/client'; + +const EXPECTED_NEEDS = [ + 'Durable threads', + 'Resumable interrupts', + 'Tool calls as events', + 'Streaming state as signals', + 'Generative UI on your design system', + 'Recoverable errors', + 'Backend portability', + 'Angular-native', + 'Observability hooks', + 'MIT + self-hosted', +]; + +describe('Differentiator', () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + + it('renders the section headline', () => { + render(); + expect( + screen.getByRole('heading', { + level: 2, + name: 'Everything an Angular agent needs once the demo works.', + }), + ).toBeTruthy(); + }); + + it('renders all 10 production-readiness rows', () => { + render(); + for (const need of EXPECTED_NEEDS) { + expect(screen.getByText(need)).toBeTruthy(); + } + }); + + it('renders the @ngaf/render primitive for the generative UI row', () => { + render(); + expect(screen.getByText('@ngaf/render')).toBeTruthy(); + }); + + it('links the footer CTA to /pilot-to-prod', () => { + render(); + const link = screen.getByRole('link', { name: /Pilot to Prod/ }); + expect(link.getAttribute('href')).toBe('/pilot-to-prod'); + }); + + it('fires the home_why_pilot_to_prod CTA event when the footer link is clicked', () => { + render(); + const link = screen.getByRole('link', { name: /Pilot to Prod/ }); + fireEvent.click(link); + expect(trackCtaClick).toHaveBeenCalledWith({ + surface: 'home', + destination_url: '/pilot-to-prod', + cta_id: 'home_why_pilot_to_prod', + cta_text: 'Pilot to Prod', + }); + }); +}); +``` + +- [ ] **Step 3: Run the test — verify it passes** + +Run: `npx nx test website -- --run Differentiator 2>&1 | tail -30` + +Expected: 5 passing tests under `Differentiator`. Exit code 0. + +If a test fails with "trackCtaClick is not a function" or similar — the mock path is wrong; double-check the import path matches what `Differentiator.tsx` uses (`../../lib/analytics/client`). + +If a test fails with "cannot find @testing-library/react" — RTL isn't installed; add it per Step 1's fallback. + +- [ ] **Step 4: Commit** + +```bash +git add apps/website/src/components/landing/Differentiator.spec.tsx +git commit -m "$(cat <<'EOF' +test(website): cover Differentiator rows, headline, and pilot-to-prod CTA + +Co-Authored-By: Claude Opus 4.7 (1M context) +EOF +)" +``` + +--- + +## Task 3: Verification pass + +**Files:** none (verification only) + +- [ ] **Step 1: Run the website test suite** + +Run: `npx nx test website 2>&1 | tail -20` +Expected: all tests pass. If a pre-existing failure surfaces unrelated to `Differentiator`, leave it — note it in the PR description but do not fix it as part of this plan. + +- [ ] **Step 2: Confirm the page still renders end-to-end** + +With the website-dev preview server running on port 3000, navigate to `/`. Use `preview_snapshot` and confirm: +- Section h2 reads "Everything an Angular agent needs once the demo works." +- 10 list items rendered. +- Footer link present and points to `/pilot-to-prod`. + +- [ ] **Step 3: Capture a screenshot for the PR** + +Resize preview to 1280×820, scroll to the section (it sits below the "Works with your agent stack" matrix), and capture `preview_screenshot`. Save as `/tmp/why-this-exists-after.png` for inclusion in the PR description. + +- [ ] **Step 4: Update auto-memory if anything novel surfaced** + +If any non-obvious quirk turned up (e.g., the project required a special vitest config flag, or `tokens.colors.accent` had to be swapped for another token), capture it as a feedback memory in `~/.claude/projects/-Users-blove-repos-angular-agent-framework/memory/`. + +Otherwise skip. + +--- + +## Self-review + +**Spec coverage:** +- Wedge / GTM alignment — captured in commit message + spec reference. ✓ +- Eyebrow, headline, subhead — Task 1 Step 1, literal strings match spec. ✓ +- 10 rows with need / description / primitive — Task 1 Step 1; Task 2 covers all 10 needs by name. ✓ +- Compact rows with check icon, no card grid — Task 1 Step 1 (`