Skip to content
Open
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
14 changes: 7 additions & 7 deletions satgate-landing/app/components/HomeClient.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -186,17 +186,17 @@ const LandingPage = () => {
Humans and platforms set policy. Agents consume approved primitives. Upstreams get receipt-backed proof.
</p>
<div className="flex flex-wrap gap-4">
<a href="https://cloud.satgate.io/cloud/login" target="_blank" rel="noopener noreferrer" className="bg-gradient-to-r from-purple-600 to-cyan-600 hover:from-purple-500 hover:to-cyan-500 text-white px-8 py-3 rounded-lg font-bold transition flex items-center gap-2 shadow-lg shadow-purple-500/20">
Start Free <ArrowRight size={16} />
</a>
<Link href="/sandbox#golden-path" className="bg-gradient-to-r from-purple-600 to-cyan-600 hover:from-purple-500 hover:to-cyan-500 text-white px-8 py-3 rounded-lg font-bold transition flex items-center gap-2 shadow-lg shadow-purple-500/20">
Run authority proof <ArrowRight size={16} />
</Link>
<Link href="/build" className="border border-cyan-700/50 bg-cyan-900/15 px-8 py-3 rounded-lg font-bold hover:bg-cyan-900/30 transition flex items-center gap-2 text-cyan-300">
Build with SatGate <ArrowRight size={16} />
</Link>
<Link href="/sandbox" className="border border-purple-700/50 bg-purple-900/20 px-8 py-3 rounded-lg font-bold hover:bg-purple-900/40 transition flex items-center gap-2 text-purple-300">
<Play size={16} /> See Demo
<Link href="/sandbox#golden-path" className="border border-purple-700/50 bg-purple-900/20 px-8 py-3 rounded-lg font-bold hover:bg-purple-900/40 transition flex items-center gap-2 text-purple-300">
<Play size={16} /> Run the 90-second SatGate proof
</Link>
<Link href="/agent-control-plane" className="border border-cyan-700/50 bg-cyan-900/15 px-8 py-3 rounded-lg font-bold hover:bg-cyan-900/30 transition flex items-center gap-2 text-cyan-300">
Agent Control Plane <ArrowRight size={16} />
<Link href="/evidence-pack-demo" className="border border-cyan-700/50 bg-cyan-900/15 px-8 py-3 rounded-lg font-bold hover:bg-cyan-900/30 transition flex items-center gap-2 text-cyan-300">
See an Evidence Pack <ArrowRight size={16} />
</Link>
</div>

Expand Down
5 changes: 4 additions & 1 deletion satgate-landing/app/evidence-pack-demo/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,10 @@ export default function EvidencePackDemoPage() {
<div className="space-y-3">
{receipts.map((receipt) => (
<article key={receipt.receipt_id} className="grid gap-4 rounded-2xl border border-white/10 bg-white/[0.03] p-5 md:grid-cols-[0.25fr_0.9fr_1fr_0.8fr] md:items-center">
<div className="font-mono text-xs text-gray-500">#{receipt.seq} · {receipt.ts.slice(11, 19)}</div>
<div className="font-mono text-xs text-gray-500">
<div>#{receipt.seq} · {receipt.ts.slice(11, 19)}</div>
<div className="mt-1 break-all text-cyan-300">{receipt.receipt_id}</div>
</div>
<div>
<p className="font-bold text-white">{receipt.type}</p>
<p className="text-xs text-gray-500">{receipt.action}</p>
Expand Down
44 changes: 34 additions & 10 deletions satgate-landing/app/protect/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import {
Key, Shield, Lock, Unlock, Play, ArrowLeft, Copy, Check,
ChevronRight, AlertTriangle, CheckCircle, XCircle, User,
Bot, GitBranch, Clock, RefreshCw, Eye, Trash2, Wifi, WifiOff,
Ban, ShieldOff, Zap, Activity
Ban, ShieldOff, Zap, Activity, ArrowRight
} from 'lucide-react';
import Link from 'next/link';

Expand Down Expand Up @@ -124,7 +124,7 @@ const faqJsonLd = {
name: 'Why use revocable capability tokens for agents?',
acceptedAnswer: {
'@type': 'Answer',
text: 'Revocable capability tokens give agents narrow, expiring authority that can be delegated safely and killed instantly without rotating global API keys or service-account credentials.',
text: 'Revocable capability tokens give agents narrow, expiring authority that can be delegated safely and denied on the next governed request without rotating global API keys or service-account credentials.',
},
},
{
Expand Down Expand Up @@ -855,6 +855,30 @@ export default function ProtectDemoPage() {
</div>
</div>

<section id="proof-path" className="border-b border-gray-800/50 bg-cyan-950/10">
<div className="mx-auto max-w-6xl px-4 py-8 sm:px-6">
<div className="rounded-2xl border border-cyan-500/30 bg-black/40 p-6">
<p className="mb-2 text-xs font-mono uppercase tracking-[0.22em] text-cyan-300">Deterministic public proof path</p>
<div className="flex flex-col gap-5 lg:flex-row lg:items-center lg:justify-between">
<div>
<h3 className="text-2xl font-bold text-white">Need the buyer-safe allow/deny/revoke proof?</h3>
<p className="mt-2 max-w-3xl text-sm leading-6 text-gray-300">
The one-click Control scenes are useful for protocol exploration. The deterministic buyer proof lives on the public demo path and shows 401 no authority, 200 allowed, 402/403 denial, revoke/replay denial, and Evidence Pack export without auth or hidden shortcuts.
</p>
</div>
<div className="flex shrink-0 flex-col gap-3 sm:flex-row lg:flex-col xl:flex-row">
<Link href="/sandbox#golden-path" className="inline-flex items-center justify-center gap-2 rounded-lg bg-white px-5 py-3 text-sm font-bold text-black transition hover:bg-gray-200">
Run the 90-second proof <ArrowRight size={16} />
</Link>
<Link href="/evidence-pack-demo" className="inline-flex items-center justify-center gap-2 rounded-lg border border-cyan-400/40 bg-cyan-400/10 px-5 py-3 text-sm font-bold text-cyan-100 transition hover:border-cyan-200">
View Evidence Pack <ArrowRight size={16} />
</Link>
</div>
</div>
</div>
</div>
</section>

<div className="max-w-6xl mx-auto px-4 sm:px-6 py-8">

{/* Scene Progress */}
Expand Down Expand Up @@ -1044,7 +1068,7 @@ export default function ProtectDemoPage() {
<User size={18} /> CISO Role
</div>
<p className="text-gray-400 text-sm">
Issues root credentials. Retains authority. Can revoke instantly.
Issues root credentials. Retains authority. Can revoke before the next governed request.
</p>
</div>
<div className="p-4 bg-black rounded-xl border border-gray-800">
Expand Down Expand Up @@ -1377,11 +1401,11 @@ export default function ProtectDemoPage() {

<div className="bg-gradient-to-r from-orange-950/30 to-red-950/30 rounded-xl p-4 border border-orange-800/30">
<h4 className="font-semibold text-white mb-2 flex items-center gap-2">
<Zap size={16} className="text-yellow-400" /> Instant Propagation
<Zap size={16} className="text-yellow-400" /> Next-request Enforcement
</h4>
<p className="text-gray-400 text-sm">
Unlike traditional IAM where revocation can take minutes/hours to propagate,
SatGate's ban list is checked on every request. The token is dead <strong>now</strong>.
SatGate checks revocation on every governed request. The next replay is denied at policy check.
</p>
</div>

Expand Down Expand Up @@ -1425,8 +1449,8 @@ export default function ProtectDemoPage() {

<div className="grid grid-cols-2 gap-4">
<div className="p-4 bg-black rounded-xl border border-orange-800/50 text-center">
<div className="text-2xl font-bold text-orange-400 mb-1">Instant</div>
<div className="text-gray-400 text-xs">Revocation Time</div>
<div className="text-2xl font-bold text-orange-400 mb-1">Next request</div>
<div className="text-gray-400 text-xs">Denied after revoke</div>
</div>
<div className="p-4 bg-black rounded-xl border border-red-800/50 text-center">
<div className="text-2xl font-bold text-red-400 mb-1">Global</div>
Expand Down Expand Up @@ -1498,10 +1522,10 @@ export default function ProtectDemoPage() {
<RefreshCw size={18} className={isLoading ? 'animate-spin' : ''} /> Run Again
</button>
<Link
href="/pay"
href="/evidence-pack-demo"
className="flex-1 py-3 bg-gradient-to-r from-purple-600 to-cyan-600 text-white rounded-xl font-bold hover:opacity-90 transition flex items-center justify-center gap-2"
>
Try Charge Mode <ChevronRight size={18} />
View Evidence Pack <ChevronRight size={18} />
</Link>
</div>
{!useSimulation && adminToken && (
Expand Down Expand Up @@ -1783,7 +1807,7 @@ export default function ProtectDemoPage() {
<div className="grid gap-4 md:grid-cols-3">
{[
['What does SatGate Control protect?', 'SatGate Control protects agent API and MCP tool calls by enforcing scoped capability tokens, budgets, delegation limits, revocation, and audit policy before requests reach upstream services.'],
['Why use revocable capability tokens for agents?', 'Revocable capability tokens give agents narrow, expiring authority that can be delegated safely and killed instantly without rotating global API keys or service-account credentials.'],
['Why use revocable capability tokens for agents?', 'Revocable capability tokens give agents narrow, expiring authority that can be delegated safely and denied on the next governed request without rotating global API keys or service-account credentials.'],
['How does Control differ from Prove?', 'Control enforces access, budget, scope, and revocation policy for agent activity. Prove preserves Evidence Pack receipts for paid-rail context and other agent decisions before API access is unlocked.'],
].map(([question, answer]) => (
<div key={question} className="rounded-xl border border-gray-800 bg-gray-900 p-5">
Expand Down
Loading