diff --git a/apps/www/app/(products)/compute/_components/ComputeVisual.tsx b/apps/www/app/(products)/compute/_components/ComputeVisual.tsx
index c9520572ef0..c2f4922c572 100644
--- a/apps/www/app/(products)/compute/_components/ComputeVisual.tsx
+++ b/apps/www/app/(products)/compute/_components/ComputeVisual.tsx
@@ -1,5 +1,6 @@
'use client'
+import SectionContainerWithCn from 'components/Layouts/SectionContainerWithCn'
import { AnimatePresence, motion, useReducedMotion } from 'framer-motion'
import { Database } from 'icons'
import type { LucideIcon } from 'lucide-react'
@@ -7,7 +8,6 @@ import { Bot, User } from 'lucide-react'
import { useCallback, useEffect, useId, useRef, useState } from 'react'
import { cn } from 'ui'
-import SectionContainerWithCn from '../../../../components/Layouts/SectionContainerWithCn'
import styles from './compute-visual.module.css'
import { ComputeLogo } from './ComputeLogo'
@@ -185,6 +185,7 @@ function ComputeCardHeader({
{name}
+ {/* eslint-disable-next-line shadcn/no-arbitrary-values -- 11px is a deliberate micro-size for this diagram's dense card header, not a token gap */}
{runtime}
@@ -513,9 +514,9 @@ function buildConnectors(geometry: Geometry, live: Record): Con
const box = (key: NodeKey) => boxes[key] as Box
const top = (key: NodeKey) => box(key).y
const bottom = (key: NodeKey) => box(key).y + box(key).height
- const cx = (key: NodeKey) => box(key).x + box(key).width / 2
- const cy = (key: NodeKey) => box(key).y + box(key).height / 2
- const center = (key: NodeKey): Point => ({ x: cx(key), y: cy(key) })
+ const centerX = (key: NodeKey) => box(key).x + box(key).width / 2
+ const centerY = (key: NodeKey) => box(key).y + box(key).height / 2
+ const center = (key: NodeKey): Point => ({ x: centerX(key), y: centerY(key) })
const at = (x: number, y: number): Point => ({ x, y })
// Horizontal bands: the empty strips above and below the card grid, where
@@ -533,16 +534,16 @@ function buildConnectors(geometry: Geometry, live: Record): Con
// Each source feeds its own column.
connector('human-embeddings', [
center('human'),
- at(cx('human'), sourceBand),
- at(cx('embeddings'), sourceBand),
+ at(centerX('human'), sourceBand),
+ at(centerX('embeddings'), sourceBand),
center('embeddings'),
]),
connector(
'agent1-sandboxBottomMid',
[
center('agent1'),
- at(cx('agent1'), sourceBand),
- at(cx('sandboxBottomMid'), sourceBand),
+ at(centerX('agent1'), sourceBand),
+ at(centerX('sandboxBottomMid'), sourceBand),
center('sandboxBottomMid'),
],
live.sandboxBottomMid
@@ -551,8 +552,8 @@ function buildConnectors(geometry: Geometry, live: Record): Con
'agent2-sandboxBottomRight',
[
center('agent2'),
- at(cx('agent2'), sourceBand),
- at(cx('sandboxBottomRight'), sourceBand),
+ at(centerX('agent2'), sourceBand),
+ at(centerX('sandboxBottomRight'), sourceBand),
center('sandboxBottomRight'),
],
live.sandboxBottomRight
@@ -561,8 +562,8 @@ function buildConnectors(geometry: Geometry, live: Record): Con
// The always-on column serves the application.
connector('api-app', [
center('api'),
- at(cx('api'), appBand),
- at(cx('app'), appBand),
+ at(centerX('api'), appBand),
+ at(centerX('app'), appBand),
center('app'),
]),
]
@@ -592,6 +593,7 @@ function ConnectorLayer({
aria-hidden="true"
>
+ {/* eslint-disable-next-line shadcn/no-raw-colors -- SVG mask luminance requires literal white, not a theme color */}
{Object.entries(boxes).map(([key, node]) => (
))}
diff --git a/apps/www/app/(products)/compute/_components/TrustBoundarySection.tsx b/apps/www/app/(products)/compute/_components/TrustBoundarySection.tsx
index 424514d02a0..9c7c3323a70 100644
--- a/apps/www/app/(products)/compute/_components/TrustBoundarySection.tsx
+++ b/apps/www/app/(products)/compute/_components/TrustBoundarySection.tsx
@@ -5,32 +5,32 @@ const features = [
{
title: 'Short-lived credentials',
paragraph: 'Access runs through Supabase Auth with short-lived keys, not standing secrets.',
- icon: ,
+ icon: ,
},
{
title: 'Zero-config data access',
paragraph: 'Reach your database and Storage with the permissions your key already carries.',
- icon: ,
+ icon: ,
},
{
title: 'Per-workload firewalls',
paragraph: 'Define which external endpoints and ports each workload can reach.',
- icon: ,
+ icon: ,
},
{
title: 'Cloaked secrets',
paragraph: 'Scope secrets per workload, and cloak values so your code never sees them.',
- icon: ,
+ icon: ,
},
{
title: 'Patched automatically',
paragraph: 'Kernel-level security patches roll out automatically. Nothing to do on your part.',
- icon: ,
+ icon: ,
},
{
title: 'Dependency scanning',
paragraph: 'Dependencies are scanned at runtime, with alerts as new vulnerabilities land.',
- icon: ,
+ icon: ,
},
]
@@ -46,9 +46,9 @@ export function TrustBoundarySection() {
preconfigured
- Every sandbox and service inherits your project's auth, roles, and permissions the moment
- it starts, running in its own microVM with dedicated CPU and memory. Agents get a sandbox
- that is already scoped to the data it is allowed to touch — nothing more.
+ Every sandbox and service inherits your project's auth, roles, and permissions the
+ moment it starts, running in its own microVM with dedicated CPU and memory. Agents get a
+ sandbox that is already scoped to the data it is allowed to touch — nothing more.
diff --git a/apps/www/app/(products)/compute/_components/WorkloadsSection.tsx b/apps/www/app/(products)/compute/_components/WorkloadsSection.tsx
index 7dd9211b1fc..c8954b3874e 100644
--- a/apps/www/app/(products)/compute/_components/WorkloadsSection.tsx
+++ b/apps/www/app/(products)/compute/_components/WorkloadsSection.tsx
@@ -7,7 +7,6 @@ import {
Pause,
Server,
Shield,
- Terminal,
TrendingUp,
} from 'lucide-react'
@@ -89,7 +88,8 @@ export function WorkloadsSection() {
className="flex items-start gap-2 text-foreground-light text-sm"
>
{feature.text}