Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions apps/website/e2e/website.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ test('landing page renders architecture section', async ({ page }) => {
await expect(page.getByText('Architecture').first()).toBeVisible();
});

test('landing page renders fair comparison section', async ({ page }) => {
test('landing page renders libraries section', async ({ page }) => {
await page.goto('/');
await expect(page.getByText('What Angular Agent Framework adds').first()).toBeVisible();
await expect(page.getByText('Three libraries. One architecture.').first()).toBeVisible();
});

test('pricing page shows 4 plan cards', async ({ page }) => {
Expand Down
3 changes: 0 additions & 3 deletions apps/website/src/app/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import { StatsStrip } from '../components/landing/StatsStrip';
import { ProblemSection } from '../components/landing/ProblemSection';
import { LibrariesSection } from '../components/landing/LibrariesSection';
import { ChatFeaturesSection } from '../components/landing/ChatFeaturesSection';
import { FairComparisonSection } from '../components/landing/FairComparisonSection';
import { WhitePaperSection } from '../components/landing/WhitePaperSection';
import { HomePilotCTA } from '../components/landing/HomePilotCTA';
import { tokens } from '../../lib/design-tokens';
Expand Down Expand Up @@ -41,8 +40,6 @@ export default async function HomePage() {
{/* 7. Depth — capability showcases */}
<LangGraphShowcase />
<DeepAgentsShowcase />
{/* 8. Fair comparison — honest LangChain + Angular Agent Framework table */}
<FairComparisonSection />
{/* 9. White paper free download */}
<WhitePaperSection />
{/* 10. Pilot program CTA */}
Expand Down
3 changes: 3 additions & 0 deletions apps/website/src/components/landing/ChatFeaturesSection.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -448,6 +448,9 @@ export function ChatFeaturesSection() {
gap: 16px !important;
padding: 0 !important;
}
.chat-features-grid > div:nth-child(2) {
height: 380px !important;
}
#feat-left, #feat-right {
flex-direction: row !important;
flex-wrap: wrap !important;
Expand Down
2 changes: 1 addition & 1 deletion apps/website/src/components/landing/LibrariesSection.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ export function LibrariesSection() {
<div style={{
maxWidth: 1000, margin: '0 auto',
display: 'grid',
gridTemplateColumns: 'repeat(auto-fit, minmax(280px, 1fr))',
gridTemplateColumns: 'repeat(auto-fit, minmax(min(280px, 100%), 1fr))',
gap: 24,
}}>
{LIBRARIES.map((lib, i) => (
Expand Down
7 changes: 6 additions & 1 deletion apps/website/src/components/landing/ProblemSection.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ export function ProblemSection() {
const showEnd = phase === 'done';

return (
<section style={{ padding: '80px 32px' }}>
<section className="problem-section" style={{ padding: '80px 32px' }}>
{/* Eyebrow + headline */}
<motion.div
initial={{ opacity: 0, y: 16 }}
Expand Down Expand Up @@ -205,6 +205,7 @@ export function ProblemSection() {
{/* Gap animation */}
<motion.div
ref={triggerRef}
className="problem-gap-card"
initial={{ opacity: 0, y: 20 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true }}
Expand Down Expand Up @@ -358,6 +359,10 @@ export function ProblemSection() {
<style>{`
@keyframes sr-pulse { 0%,100%{opacity:1;transform:scale(1)} 50%{opacity:.4;transform:scale(.6)} }
@keyframes sr-shake { 0%,100%{transform:translateX(0)} 20%{transform:translateX(-3px)} 40%{transform:translateX(3px)} 60%{transform:translateX(-2px)} 80%{transform:translateX(2px)} }
@media (max-width: 767px) {
.problem-section { padding: 60px 20px !important; }
.problem-gap-card { padding: 24px 20px !important; }
}
`}</style>
</section>
);
Expand Down
22 changes: 17 additions & 5 deletions apps/website/src/components/landing/WhitePaperSection.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,24 @@ export function WhitePaperSection() {

return (
<section style={{ padding: '80px 32px' }}>
<style>{`
.wp-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 56px;
align-items: center;
padding: 48px 56px;
}
@media (max-width: 767px) {
.wp-grid {
grid-template-columns: 1fr;
gap: 32px;
padding: 32px 24px;
}
}
`}</style>
<motion.div
className="wp-grid"
initial={{ opacity: 0, y: 20 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true }}
Expand All @@ -57,11 +74,6 @@ export function WhitePaperSection() {
WebkitBackdropFilter: `blur(${tokens.glass.blur})`,
border: `1px solid ${tokens.glass.border}`,
boxShadow: tokens.glass.shadow,
padding: '48px 56px',
display: 'grid',
gridTemplateColumns: '1fr 1fr',
gap: 56,
alignItems: 'center',
}}
>
{/* Left — form / soft gate */}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ export function AngularCodeShowcase() {

<div style={{
maxWidth: 900, margin: '0 auto',
display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(380px, 1fr))', gap: 24,
display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(min(380px, 100%), 1fr))', gap: 24,
}}>
{[{ title: 'Minimal Setup', code: SNIPPET_1 }, { title: 'Full Configuration', code: SNIPPET_2 }].map((s, i) => (
<motion.div
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,11 @@ export function AngularComparison() {
maxWidth: 860, margin: '0 auto', borderRadius: 20,
background: tokens.glass.bg, backdropFilter: `blur(${tokens.glass.blur})`,
WebkitBackdropFilter: `blur(${tokens.glass.blur})`,
border: `1px solid ${tokens.glass.border}`, boxShadow: tokens.glass.shadow, overflow: 'hidden',
border: `1px solid ${tokens.glass.border}`, boxShadow: tokens.glass.shadow, overflow: 'auto',
}}
>
<div style={{
display: 'grid', gridTemplateColumns: '1fr 1fr 1fr',
display: 'grid', gridTemplateColumns: 'minmax(100px, 1fr) minmax(120px, 1fr) minmax(120px, 1fr)',
background: 'rgba(255,255,255,.3)', borderBottom: `1px solid ${tokens.glass.border}`, padding: '14px 24px',
}}>
{['Capability', 'LangGraph Angular SDK', '@cacheplane/angular'].map((h, i) => (
Expand All @@ -75,7 +75,7 @@ export function AngularComparison() {
viewport={{ once: true }}
transition={{ delay: i * 0.05, duration: 0.35 }}
style={{
display: 'grid', gridTemplateColumns: '1fr 1fr 1fr', padding: '14px 24px',
display: 'grid', gridTemplateColumns: 'minmax(100px, 1fr) minmax(120px, 1fr) minmax(120px, 1fr)', padding: '14px 24px',
borderBottom: i < ROWS.length - 1 ? '1px solid rgba(0,0,0,.05)' : 'none', alignItems: 'center',
}}
>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ export function AngularProblemSolution() {
transition={{ duration: 0.5 }}
style={{
maxWidth: 900, margin: '0 auto',
display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(360px, 1fr))', gap: 32,
display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(min(360px, 100%), 1fr))', gap: 32,
}}
>
<div style={{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ export function AngularWhitePaperGate() {
background: tokens.glass.bg, backdropFilter: `blur(${tokens.glass.blur})`,
WebkitBackdropFilter: `blur(${tokens.glass.blur})`,
border: `1px solid ${tokens.glass.border}`, boxShadow: tokens.glass.shadow,
padding: '48px 56px', display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(320px, 1fr))', gap: 56, alignItems: 'center',
padding: '32px 24px', display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(min(320px, 100%), 1fr))', gap: 56, alignItems: 'center',
}}
>
<div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ export function ChatLandingCodeShowcase() {

<div style={{
maxWidth: 900, margin: '0 auto',
display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(380px, 1fr))', gap: 24,
display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(min(380px, 100%), 1fr))', gap: 24,
}}>
{[{ title: 'Prebuilt Chat', code: SNIPPET_1 }, { title: 'Custom Theming', code: SNIPPET_2 }].map((s, i) => (
<motion.div
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,11 @@ export function ChatLandingComparison() {
maxWidth: 860, margin: '0 auto', borderRadius: 20,
background: tokens.glass.bg, backdropFilter: `blur(${tokens.glass.blur})`,
WebkitBackdropFilter: `blur(${tokens.glass.blur})`,
border: `1px solid ${tokens.glass.border}`, boxShadow: tokens.glass.shadow, overflow: 'hidden',
border: `1px solid ${tokens.glass.border}`, boxShadow: tokens.glass.shadow, overflow: 'auto',
}}
>
<div style={{
display: 'grid', gridTemplateColumns: '1fr 1fr 1fr',
display: 'grid', gridTemplateColumns: 'minmax(100px, 1fr) minmax(120px, 1fr) minmax(120px, 1fr)',
background: 'rgba(255,255,255,.3)', borderBottom: `1px solid ${tokens.glass.border}`, padding: '14px 24px',
}}>
{['Capability', 'Build Incrementally', '@cacheplane/chat'].map((h, i) => (
Expand All @@ -75,7 +75,7 @@ export function ChatLandingComparison() {
viewport={{ once: true }}
transition={{ delay: i * 0.05, duration: 0.35 }}
style={{
display: 'grid', gridTemplateColumns: '1fr 1fr 1fr', padding: '14px 24px',
display: 'grid', gridTemplateColumns: 'minmax(100px, 1fr) minmax(120px, 1fr) minmax(120px, 1fr)', padding: '14px 24px',
borderBottom: i < ROWS.length - 1 ? '1px solid rgba(0,0,0,.05)' : 'none', alignItems: 'center',
}}
>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ export function ChatLandingProblemSolution() {
transition={{ duration: 0.5 }}
style={{
maxWidth: 900, margin: '0 auto',
display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(360px, 1fr))', gap: 32,
display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(min(360px, 100%), 1fr))', gap: 32,
}}
>
<div style={{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ export function ChatLandingWhitePaperGate() {
background: tokens.glass.bg, backdropFilter: `blur(${tokens.glass.blur})`,
WebkitBackdropFilter: `blur(${tokens.glass.blur})`,
border: `1px solid ${tokens.glass.border}`, boxShadow: tokens.glass.shadow,
padding: '48px 56px', display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(320px, 1fr))', gap: 56, alignItems: 'center',
padding: '32px 24px', display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(min(320px, 100%), 1fr))', gap: 56, alignItems: 'center',
}}
>
<div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ export function RenderCodeShowcase() {

<div style={{
maxWidth: 900, margin: '0 auto',
display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(380px, 1fr))', gap: 24,
display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(min(380px, 100%), 1fr))', gap: 24,
}}>
{[{ title: 'Registry Setup', code: SNIPPET_1 }, { title: 'Template Binding', code: SNIPPET_2 }].map((s, i) => (
<motion.div
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,11 @@ export function RenderComparison() {
maxWidth: 860, margin: '0 auto', borderRadius: 20,
background: tokens.glass.bg, backdropFilter: `blur(${tokens.glass.blur})`,
WebkitBackdropFilter: `blur(${tokens.glass.blur})`,
border: `1px solid ${tokens.glass.border}`, boxShadow: tokens.glass.shadow, overflow: 'hidden',
border: `1px solid ${tokens.glass.border}`, boxShadow: tokens.glass.shadow, overflow: 'auto',
}}
>
<div style={{
display: 'grid', gridTemplateColumns: '1fr 1fr 1fr',
display: 'grid', gridTemplateColumns: 'minmax(100px, 1fr) minmax(120px, 1fr) minmax(120px, 1fr)',
background: 'rgba(255,255,255,.3)', borderBottom: `1px solid ${tokens.glass.border}`, padding: '14px 24px',
}}>
{['Capability', 'Hardcoded Approach', '@cacheplane/render'].map((h, i) => (
Expand All @@ -74,7 +74,7 @@ export function RenderComparison() {
viewport={{ once: true }}
transition={{ delay: i * 0.05, duration: 0.35 }}
style={{
display: 'grid', gridTemplateColumns: '1fr 1fr 1fr', padding: '14px 24px',
display: 'grid', gridTemplateColumns: 'minmax(100px, 1fr) minmax(120px, 1fr) minmax(120px, 1fr)', padding: '14px 24px',
borderBottom: i < ROWS.length - 1 ? '1px solid rgba(0,0,0,.05)' : 'none', alignItems: 'center',
}}
>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ export function RenderProblemSolution() {
transition={{ duration: 0.5 }}
style={{
maxWidth: 900, margin: '0 auto',
display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(360px, 1fr))', gap: 32,
display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(min(360px, 100%), 1fr))', gap: 32,
}}
>
<div style={{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ export function RenderWhitePaperGate() {
background: tokens.glass.bg, backdropFilter: `blur(${tokens.glass.blur})`,
WebkitBackdropFilter: `blur(${tokens.glass.blur})`,
border: `1px solid ${tokens.glass.border}`, boxShadow: tokens.glass.shadow,
padding: '48px 56px', display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(320px, 1fr))', gap: 56, alignItems: 'center',
padding: '32px 24px', display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(min(320px, 100%), 1fr))', gap: 56, alignItems: 'center',
}}
>
<div>
Expand Down
Loading