diff --git a/apps/website/public/logos/README.md b/apps/website/public/logos/README.md new file mode 100644 index 000000000..de0892bd5 --- /dev/null +++ b/apps/website/public/logos/README.md @@ -0,0 +1,36 @@ +# Logo Assets + +These assets support the homepage ecosystem strip. They are compatibility marks, not customer logos. + +## Local Sources + +- `langgraph.svg` copied from `~/repos/dawn/apps/web/public/logos/langgraph.svg`. +- `providers/openai.svg` copied from `~/repos/dawn/apps/web/public/logos/providers/openai.svg`. +- `providers/anthropic.svg` copied from `~/repos/dawn/apps/web/public/logos/providers/anthropic.svg`. +- `providers/bedrock.svg` copied from `~/repos/dawn/apps/web/public/logos/providers/bedrock.svg`. +- `providers/google.svg` copied from `~/repos/dawn/apps/web/public/logos/providers/google.svg`. +- `runtimes/copilotkit.svg` cropped from `~/repos/CopilotKit/docs/public/images/logo-light.svg`. +- `runtimes/mastra.svg` downloaded from `https://github.com/mastra-ai/mastra/blob/main/packages/playground/public/mastra.svg`. + +`providers/bedrock.svg` is also reused for the AWS Strands tile. +`providers/google.svg` is also reused for the Google A2UI tile. +`runtimes/copilotkit.svg` is also reused for the AG-UI tile. + +## Wikimedia Commons Sources + +- `providers/azure.svg` downloaded from `https://commons.wikimedia.org/wiki/File:Microsoft_Azure.svg`. +- `runtimes/microsoft.svg` downloaded from `https://commons.wikimedia.org/wiki/File:Microsoft_logo.svg`. + +These logo files are marked as simple geometric/text logos on Wikimedia Commons. They may still be subject to trademark restrictions. + +## Simple Icons Sources + +These were downloaded from `https://cdn.simpleicons.org//111827` for a compact monochrome style: + +- `runtimes/crewai.svg` from slug `crewai`. +- `runtimes/pydantic.svg` from slug `pydantic`. +- `surface/angular.svg` from slug `angular`. +- `surface/reactivex.svg` from slug `reactivex`. +- `surface/vercel.svg` from slug `vercel`. + +All ecosystem tiles currently have logo marks. diff --git a/apps/website/public/logos/cisco.svg b/apps/website/public/logos/cisco.svg deleted file mode 100644 index 8c7db1474..000000000 --- a/apps/website/public/logos/cisco.svg +++ /dev/null @@ -1 +0,0 @@ -Cisco \ No newline at end of file diff --git a/apps/website/public/logos/cloudflare.svg b/apps/website/public/logos/cloudflare.svg deleted file mode 100644 index 3cc28a680..000000000 --- a/apps/website/public/logos/cloudflare.svg +++ /dev/null @@ -1 +0,0 @@ -Cloudflare \ No newline at end of file diff --git a/apps/website/public/logos/coinbase.svg b/apps/website/public/logos/coinbase.svg deleted file mode 100644 index c95c647ff..000000000 --- a/apps/website/public/logos/coinbase.svg +++ /dev/null @@ -1 +0,0 @@ -Coinbase \ No newline at end of file diff --git a/apps/website/public/logos/databricks.svg b/apps/website/public/logos/databricks.svg deleted file mode 100644 index be2fd8dfe..000000000 --- a/apps/website/public/logos/databricks.svg +++ /dev/null @@ -1 +0,0 @@ -Databricks \ No newline at end of file diff --git a/apps/website/public/logos/elastic.svg b/apps/website/public/logos/elastic.svg deleted file mode 100644 index d01039c19..000000000 --- a/apps/website/public/logos/elastic.svg +++ /dev/null @@ -1 +0,0 @@ -Elastic \ No newline at end of file diff --git a/apps/website/public/logos/gitlab.svg b/apps/website/public/logos/gitlab.svg deleted file mode 100644 index d9e48fba3..000000000 --- a/apps/website/public/logos/gitlab.svg +++ /dev/null @@ -1 +0,0 @@ -GitLab \ No newline at end of file diff --git a/apps/website/public/logos/klarna.svg b/apps/website/public/logos/klarna.svg deleted file mode 100644 index 1793bd76b..000000000 --- a/apps/website/public/logos/klarna.svg +++ /dev/null @@ -1 +0,0 @@ -Klarna \ No newline at end of file diff --git a/apps/website/public/logos/langgraph.svg b/apps/website/public/logos/langgraph.svg new file mode 100644 index 000000000..38720e761 --- /dev/null +++ b/apps/website/public/logos/langgraph.svg @@ -0,0 +1 @@ +LangGraph \ No newline at end of file diff --git a/apps/website/public/logos/lyft.svg b/apps/website/public/logos/lyft.svg deleted file mode 100644 index 5db87d3fb..000000000 --- a/apps/website/public/logos/lyft.svg +++ /dev/null @@ -1 +0,0 @@ -Lyft \ No newline at end of file diff --git a/apps/website/public/logos/providers/anthropic.svg b/apps/website/public/logos/providers/anthropic.svg new file mode 100644 index 000000000..8eac343ae --- /dev/null +++ b/apps/website/public/logos/providers/anthropic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/website/public/logos/providers/azure.svg b/apps/website/public/logos/providers/azure.svg new file mode 100644 index 000000000..ff5dfa5c1 --- /dev/null +++ b/apps/website/public/logos/providers/azure.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/apps/website/public/logos/providers/bedrock.svg b/apps/website/public/logos/providers/bedrock.svg new file mode 100644 index 000000000..94eff5aaf --- /dev/null +++ b/apps/website/public/logos/providers/bedrock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/website/public/logos/providers/google.svg b/apps/website/public/logos/providers/google.svg new file mode 100644 index 000000000..bd2619df4 --- /dev/null +++ b/apps/website/public/logos/providers/google.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/website/public/logos/providers/openai.svg b/apps/website/public/logos/providers/openai.svg new file mode 100644 index 000000000..78c1c5bd3 --- /dev/null +++ b/apps/website/public/logos/providers/openai.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/website/public/logos/rakuten.svg b/apps/website/public/logos/rakuten.svg deleted file mode 100644 index 0e8f0e779..000000000 --- a/apps/website/public/logos/rakuten.svg +++ /dev/null @@ -1 +0,0 @@ -Rakuten \ No newline at end of file diff --git a/apps/website/public/logos/runtimes/copilotkit.svg b/apps/website/public/logos/runtimes/copilotkit.svg new file mode 100644 index 000000000..d0f1ab22b --- /dev/null +++ b/apps/website/public/logos/runtimes/copilotkit.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/website/public/logos/runtimes/crewai.svg b/apps/website/public/logos/runtimes/crewai.svg new file mode 100644 index 000000000..fcaa3bef0 --- /dev/null +++ b/apps/website/public/logos/runtimes/crewai.svg @@ -0,0 +1 @@ +CrewAI \ No newline at end of file diff --git a/apps/website/public/logos/runtimes/mastra.svg b/apps/website/public/logos/runtimes/mastra.svg new file mode 100644 index 000000000..c7241d57e --- /dev/null +++ b/apps/website/public/logos/runtimes/mastra.svg @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/apps/website/public/logos/runtimes/microsoft.svg b/apps/website/public/logos/runtimes/microsoft.svg new file mode 100644 index 000000000..1547267f6 --- /dev/null +++ b/apps/website/public/logos/runtimes/microsoft.svg @@ -0,0 +1 @@ + diff --git a/apps/website/public/logos/runtimes/pydantic.svg b/apps/website/public/logos/runtimes/pydantic.svg new file mode 100644 index 000000000..5a20c69b6 --- /dev/null +++ b/apps/website/public/logos/runtimes/pydantic.svg @@ -0,0 +1 @@ +Pydantic \ No newline at end of file diff --git a/apps/website/public/logos/shopify.svg b/apps/website/public/logos/shopify.svg deleted file mode 100644 index bc2dabcbc..000000000 --- a/apps/website/public/logos/shopify.svg +++ /dev/null @@ -1 +0,0 @@ -Shopify \ No newline at end of file diff --git a/apps/website/public/logos/snowflake.svg b/apps/website/public/logos/snowflake.svg deleted file mode 100644 index 84063c205..000000000 --- a/apps/website/public/logos/snowflake.svg +++ /dev/null @@ -1 +0,0 @@ -Snowflake \ No newline at end of file diff --git a/apps/website/public/logos/stripe.svg b/apps/website/public/logos/stripe.svg deleted file mode 100644 index 7a6e9f2dd..000000000 --- a/apps/website/public/logos/stripe.svg +++ /dev/null @@ -1 +0,0 @@ -Stripe \ No newline at end of file diff --git a/apps/website/public/logos/surface/angular.svg b/apps/website/public/logos/surface/angular.svg new file mode 100644 index 000000000..2cf16d8ae --- /dev/null +++ b/apps/website/public/logos/surface/angular.svg @@ -0,0 +1 @@ +Angular \ No newline at end of file diff --git a/apps/website/public/logos/surface/reactivex.svg b/apps/website/public/logos/surface/reactivex.svg new file mode 100644 index 000000000..99536503f --- /dev/null +++ b/apps/website/public/logos/surface/reactivex.svg @@ -0,0 +1 @@ +ReactiveX \ No newline at end of file diff --git a/apps/website/public/logos/surface/vercel.svg b/apps/website/public/logos/surface/vercel.svg new file mode 100644 index 000000000..16626b609 --- /dev/null +++ b/apps/website/public/logos/surface/vercel.svg @@ -0,0 +1 @@ +Vercel \ No newline at end of file diff --git a/apps/website/src/app/opengraph-image.tsx b/apps/website/src/app/opengraph-image.tsx index 1c24eb279..0566e8060 100644 --- a/apps/website/src/app/opengraph-image.tsx +++ b/apps/website/src/app/opengraph-image.tsx @@ -114,7 +114,7 @@ export default async function OpenGraphImage() { maxWidth: 980, }} > - Ship agentic Angular apps without rewriting your frontend. + Build fullstack agentic Angular apps. {/* Subhead */} @@ -127,8 +127,8 @@ export default async function OpenGraphImage() { marginBottom: 'auto', }} > - Signal-native streaming for LangGraph and AG-UI. Headless primitives plus - opinionated compositions for Angular 20+ teams shipping to production. + Build fullstack agentic Angular apps with signal-native streaming, + runtime adapters, generative UI, and production-ready primitives. {/* Footer row — pill trust signals + wordmark */} diff --git a/apps/website/src/app/page.tsx b/apps/website/src/app/page.tsx index 74782a6dd..dcab018d7 100644 --- a/apps/website/src/app/page.tsx +++ b/apps/website/src/app/page.tsx @@ -1,5 +1,5 @@ import { Hero } from '../components/landing/Hero'; -import { ProofStrip } from '../components/landing/ProofStrip'; +import { EcosystemStrip } from '../components/landing/EcosystemStrip'; import { Differentiator } from '../components/landing/Differentiator'; import { FeatureBlock } from '../components/landing/FeatureBlock'; import { BrowserFrame } from '../components/ui/BrowserFrame'; @@ -15,7 +15,7 @@ export default async function HomePage() { return ( <> - + {/* Stream */} diff --git a/apps/website/src/components/landing/Differentiator.tsx b/apps/website/src/components/landing/Differentiator.tsx index 3c7807658..f0e80bf35 100644 --- a/apps/website/src/components/landing/Differentiator.tsx +++ b/apps/website/src/components/landing/Differentiator.tsx @@ -13,16 +13,16 @@ interface PositionCard { const CARDS: PositionCard[] = [ { - eyebrow: 'Runtime', - headline: 'One Angular UI. Any agent runtime.', - body: 'Same primitives drive LangGraph, AG-UI, CrewAI, Mastra, Pydantic AI, AWS Strands, and your own backend.', + eyebrow: 'Runtime layer', + headline: 'One Angular contract for every agent runtime.', + body: 'Wire LangGraph, AG-UI, CrewAI, Mastra, Pydantic AI, AWS Strands, or your own backend behind the same Angular primitives.', }, { - eyebrow: 'Streaming', - headline: 'LangGraph streaming for Angular.', + eyebrow: 'Streaming state', + headline: 'Messages, status, errors, and tools as signals.', body: ( <> - agent() ships LangGraph streaming for interrupts, branch and history, tool progress, and tool results — plus{' '} + agent() exposes token streams, interrupts, tool progress, branch history,{' '} error(),{' '} status(), and{' '} reload(). @@ -31,26 +31,32 @@ const CARDS: PositionCard[] = [ }, { eyebrow: 'Generative UI', - headline: 'Generative UI, built in.', + headline: 'Agent output renders into your component system.', body: ( <> - Render Vercel json-render and Google A2UI specs into Angular components. No second framework to bolt on. + Render Vercel json-render and Google A2UI specs into Angular components you already own. ), }, { - eyebrow: 'License', - headline: 'MIT. Headless primitives, drop-in compositions.', - body: 'No tier gates on Angular. Use the unstyled primitives, or the opinionated chat shell — your call.', + eyebrow: 'Production surface', + headline: 'The pieces that move a demo into production.', + body: 'Fallbacks, reloads, persistence patterns, observability hooks, and MIT-licensed primitives you can own long term.', }, ]; export function Differentiator() { return ( -
+
{/* Editorial top */} -
+
Why this exists

- Built for Angular, not retrofitted. + The fullstack agentic library for Angular.

- Most agent UI work assumes React or a vanilla web component. Angular teams glue together ad-hoc streaming, lose interrupts, and re-implement thread state — every project, every time. -

-

- Signals and DI are better substrates for agent UI than hooks — when they're used directly, not behind a port. So we built it that way. + NGAF brings the pieces of an agentic product into one Angular-first SDK: runtime adapters, signal-native streaming, tool events, generative UI, and production patterns. It is built from real agent UI experience, not a thin integration layer.

@@ -97,7 +92,7 @@ export function Differentiator() { style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(260px, 1fr))', - gap: 16, + gap: 14, }} > {CARDS.map((c) => ( diff --git a/apps/website/src/components/landing/EcosystemStrip.tsx b/apps/website/src/components/landing/EcosystemStrip.tsx new file mode 100644 index 000000000..194663199 --- /dev/null +++ b/apps/website/src/components/landing/EcosystemStrip.tsx @@ -0,0 +1,225 @@ +import { tokens } from '@ngaf/design-tokens'; +import { Container } from '../ui/Container'; +import { Section } from '../ui/Section'; +import { Eyebrow } from '../ui/Eyebrow'; + +interface EcosystemItem { + name: string; + note: string; + logoSrc?: string; +} + +interface EcosystemGroup { + title: string; + items: EcosystemItem[]; +} + +const ECOSYSTEM_GROUPS: EcosystemGroup[] = [ + { + title: 'Model providers', + items: [ + { name: 'OpenAI', note: 'model provider', logoSrc: '/logos/providers/openai.svg' }, + { name: 'Anthropic', note: 'model provider', logoSrc: '/logos/providers/anthropic.svg' }, + { name: 'Google Gemini', note: 'model provider', logoSrc: '/logos/providers/google.svg' }, + { name: 'Azure OpenAI', note: 'cloud provider', logoSrc: '/logos/providers/azure.svg' }, + { name: 'Amazon Bedrock', note: 'cloud provider', logoSrc: '/logos/providers/bedrock.svg' }, + ], + }, + { + title: 'Agent runtimes', + items: [ + { name: 'LangGraph', note: 'native adapter', logoSrc: '/logos/langgraph.svg' }, + { name: 'AG-UI', note: 'protocol adapter', logoSrc: '/logos/runtimes/copilotkit.svg' }, + { name: 'CrewAI', note: 'via AG-UI', logoSrc: '/logos/runtimes/crewai.svg' }, + { name: 'Mastra', note: 'via AG-UI', logoSrc: '/logos/runtimes/mastra.svg' }, + { name: 'Pydantic AI', note: 'via AG-UI', logoSrc: '/logos/runtimes/pydantic.svg' }, + { name: 'Microsoft Agent Framework', note: 'via AG-UI', logoSrc: '/logos/runtimes/microsoft.svg' }, + { name: 'AWS Strands', note: 'via AG-UI', logoSrc: '/logos/providers/bedrock.svg' }, + { name: 'CopilotKit Runtime', note: 'via AG-UI', logoSrc: '/logos/runtimes/copilotkit.svg' }, + ], + }, + { + title: 'Angular surface', + items: [ + { name: 'Angular', note: 'native DI + signals', logoSrc: '/logos/surface/angular.svg' }, + { name: 'RxJS', note: 'interop ready', logoSrc: '/logos/surface/reactivex.svg' }, + { name: 'Vercel json-render', note: 'render protocol', logoSrc: '/logos/surface/vercel.svg' }, + { name: 'Google A2UI', note: 'render protocol', logoSrc: '/logos/providers/google.svg' }, + ], + }, +]; + +function EcosystemTile({ item }: { item: EcosystemItem }) { + return ( +
+ {item.logoSrc ? ( + + ) : null} +
+
+ {item.name} +
+
+ {item.note} +
+
+
+ ); +} + +export function EcosystemStrip() { + return ( +
+ +
+ + Works with your agent stack + +

+ Bring the model, runtime, and UI protocol you already use. +

+

+ NGAF gives Angular teams signal-native primitives for LangGraph, AG-UI, chat, and generative UI without locking the backend to one provider. +

+
+ +
+ {ECOSYSTEM_GROUPS.map((group) => ( +
+
+ {group.title} +
+
+ {group.items.map((item) => ( + + ))} +
+
+ ))} +
+ + +
+
+ ); +} diff --git a/apps/website/src/components/landing/Hero.tsx b/apps/website/src/components/landing/Hero.tsx index a1b63c3b4..4b8b14864 100644 --- a/apps/website/src/components/landing/Hero.tsx +++ b/apps/website/src/components/landing/Hero.tsx @@ -37,7 +37,7 @@ export function Hero() { letterSpacing: '-0.02em', }} > - Ship agentic Angular apps without rewriting your frontend. + Build fullstack agentic Angular apps.

- Signal-native streaming for LangGraph and AG-UI. Headless primitives plus opinionated compositions, built for Angular 20+ teams shipping to production. + Build fullstack agentic Angular apps with signal-native streaming, runtime adapters, generative UI, and production-ready primitives.