'use client';
import { motion } from 'framer-motion';
const frictions = [
{
number: '01',
title: 'Fragmented Agent Scaffolds',
description:
'Claude Code, Codex, OpenCode, and Amp each have proprietary APIs. Swapping agents means rewriting your entire integration.',
solution: 'Unified control plane for all agent engines.',
visual: (
01{' '}
agent
.
spawn
(
"claude-code"
)
02{' '}
agent
.
spawn
(
"amp"
)
// Exactly same methods
),
accentColor: 'orange',
},
{
number: '02',
title: 'Deploy Anywhere',
description:
"Whether you're running locally, in Docker, or with E2B, Daytona, and Vercel — you shouldn't need different integration code for each.",
solution: 'One SDK, any environment. Deploy locally or to any cloud provider with a single config change.',
visual: (
# Works with all providers
SANDBOX_PROVIDER
=
"daytona"
),
accentColor: 'purple',
},
{
number: '03',
title: 'Transient State',
description:
'Transcripts and session data are usually lost when the agent process ends. Debugging and replay become impossible.',
solution: 'Standardized session JSON. Stream events to your own storage in real-time.',
visual: (
# Session persisted automatically
"events"
: [
{'{ '}
"type"
:
"tool_call"
{' }'}
{'{ '}
"type"
:
"message"
{' }'}
]
Streaming to Rivet Actors
),
accentColor: 'blue',
},
];
const accentStyles = {
orange: {
gradient: 'from-orange-500/20',
border: 'border-orange-500/30',
glow: 'rgba(255,79,0,0.15)',
number: 'text-orange-500',
},
purple: {
gradient: 'from-purple-500/20',
border: 'border-purple-500/30',
glow: 'rgba(168,85,247,0.15)',
number: 'text-purple-500',
},
blue: {
gradient: 'from-blue-500/20',
border: 'border-blue-500/30',
glow: 'rgba(59,130,246,0.15)',
number: 'text-blue-500',
},
};
export function PainPoints() {
return (
Integrating coding agents is hard.
Every agent has its own API, event format, and session model. Swapping agents means
rewriting your entire integration.
{frictions.map((friction, index) => {
const styles = accentStyles[friction.accentColor as keyof typeof accentStyles];
return (
{/* Top shine */}
{/* Hover glow */}
{/* Corner highlight */}
{/* Title */}
{friction.title}
{/* Description */}
{friction.description}
{/* Solution */}
{/* Visual */}
{friction.visual}
);
})}
);
}