{SELECTOR_OPTIONS.map((option) => (
,
+ title: "Open Source",
+ description:
+ "Fully open source codebase. Inspect, audit, and contribute to the code. No black boxes, no hidden functionality.",
+ },
+ {
+ icon:
,
+ title: "Offline First",
+ description:
+ "Your code stays on your machine. Work without an internet connection. All processing happens locally.",
+ },
+ {
+ icon:
,
+ title: "No Network Required",
+ description:
+ "Zero telemetry by default. No data leaves your machine unless you explicitly connect to external services.",
+ },
+];
+
+export function SecuritySection() {
+ return (
+
+
+ {/* Heading */}
+
+
+
+ Private by default
+
+
+ Your code never leaves your machine.
+
+
+
+
+ {/* Features Grid */}
+
+ {SECURITY_FEATURES.map((feature, index) => (
+
+
+ {feature.icon}
+
+
+ {feature.title}
+
+
+ {feature.description}
+
+
+ ))}
+
+
+
+ );
+}
diff --git a/apps/website/src/app/components/SecuritySection/index.ts b/apps/website/src/app/components/SecuritySection/index.ts
new file mode 100644
index 0000000000..5f93128603
--- /dev/null
+++ b/apps/website/src/app/components/SecuritySection/index.ts
@@ -0,0 +1 @@
+export { SecuritySection } from "./SecuritySection";
diff --git a/apps/website/src/app/components/TrustedBySection/TrustedBySection.tsx b/apps/website/src/app/components/TrustedBySection/TrustedBySection.tsx
new file mode 100644
index 0000000000..5355584b5f
--- /dev/null
+++ b/apps/website/src/app/components/TrustedBySection/TrustedBySection.tsx
@@ -0,0 +1,77 @@
+"use client";
+
+import { motion } from "framer-motion";
+
+const CLIENT_LOGOS = [
+ { name: "numbies", logo: "numbies.xyz" },
+ { name: "cadra", logo: "Cadra" },
+ { name: "onlook", logo: "Onlook" },
+ { name: "amazon", logo: "Amazon" },
+ { name: "google", logo: "Google" },
+ { name: "servicenow", logo: "ServiceNow" },
+ { name: "ycombinator", logo: "Y Combinator" },
+ { name: "scribe", logo: "Scribe" },
+] as const;
+
+const LOGO_SETS = ["set-a", "set-b", "set-c"] as const;
+
+export function TrustedBySection() {
+ return (
+
+
+
+
+ Trusted by engineers from
+
+
+
+
+
+
+ {/* Render logos three times for seamless loop */}
+ {LOGO_SETS.map((setId) => (
+
+ {CLIENT_LOGOS.map((client) => (
+
+ {client.logo}
+
+ ))}
+
+ ))}
+
+
+
+
+
+ );
+}
diff --git a/apps/website/src/app/components/TrustedBySection/index.ts b/apps/website/src/app/components/TrustedBySection/index.ts
new file mode 100644
index 0000000000..1327e1647e
--- /dev/null
+++ b/apps/website/src/app/components/TrustedBySection/index.ts
@@ -0,0 +1 @@
+export { TrustedBySection } from "./TrustedBySection";
diff --git a/apps/website/src/app/components/VideoSection/VideoSection.tsx b/apps/website/src/app/components/VideoSection/VideoSection.tsx
new file mode 100644
index 0000000000..ba727dc409
--- /dev/null
+++ b/apps/website/src/app/components/VideoSection/VideoSection.tsx
@@ -0,0 +1,52 @@
+"use client";
+
+import { motion } from "framer-motion";
+
+export function VideoSection() {
+ return (
+
+
+ {/* Heading */}
+
+
+
+ A Superset of your favorite tools
+
+
+ Do what you normally would do, ten times at once
+
+
+
+ Superset aims to be a superset of all the best AI coding tools. We
+ want to support and stay compatible with whatever CLI agents you
+ already use - improving your workflow instead of replacing it.
+
+
+
+ {/* Video Demo Area */}
+
+
+
+
+
+
+
+ );
+}
diff --git a/apps/website/src/app/components/VideoSection/index.ts b/apps/website/src/app/components/VideoSection/index.ts
new file mode 100644
index 0000000000..4957750571
--- /dev/null
+++ b/apps/website/src/app/components/VideoSection/index.ts
@@ -0,0 +1 @@
+export { VideoSection } from "./VideoSection";
diff --git a/apps/website/src/app/globals.css b/apps/website/src/app/globals.css
index a904e3aa5e..ac1796e9d4 100644
--- a/apps/website/src/app/globals.css
+++ b/apps/website/src/app/globals.css
@@ -2,7 +2,11 @@
@import "@superset/ui/globals.css";
@theme {
- --font-family-sans:
- var(--font-geist-sans), ui-sans-serif, system-ui, sans-serif;
- --font-family-mono: var(--font-geist-mono), ui-monospace, monospace;
+ --font-family-sans: var(--font-inter), ui-sans-serif, system-ui, sans-serif;
+ --font-family-mono: var(--font-ibm-plex-mono), ui-monospace, monospace;
+}
+
+html,
+body {
+ background-color: rgb(23, 23, 23);
}
diff --git a/apps/website/src/app/layout.tsx b/apps/website/src/app/layout.tsx
index 61709370be..4f606677b0 100644
--- a/apps/website/src/app/layout.tsx
+++ b/apps/website/src/app/layout.tsx
@@ -1,10 +1,22 @@
-import { GeistMono } from "geist/font/mono";
-import { GeistSans } from "geist/font/sans";
import type { Metadata } from "next";
+import { IBM_Plex_Mono, Inter } from "next/font/google";
import Script from "next/script";
+import { ThemeProvider } from "next-themes";
import { TRPCReactProvider } from "@/trpc/react";
import "./globals.css";
+const ibmPlexMono = IBM_Plex_Mono({
+ weight: ["300", "400", "500"],
+ subsets: ["latin"],
+ variable: "--font-ibm-plex-mono",
+});
+
+const inter = Inter({
+ weight: ["300", "400", "500"],
+ subsets: ["latin"],
+ variable: "--font-inter",
+});
+
export const metadata: Metadata = {
title: "Superset - Run 10+ parallel coding agents on your machine",
description:
@@ -19,7 +31,8 @@ export default function RootLayout({
return (
-
{children}
+
+ {children}
+
);
diff --git a/apps/website/src/app/page.tsx b/apps/website/src/app/page.tsx
index ac81bc4329..8c0dadc4c7 100644
--- a/apps/website/src/app/page.tsx
+++ b/apps/website/src/app/page.tsx
@@ -1,9 +1,12 @@
"use client";
-import { ClientLogosSection } from "./components/ClientLogosSection";
+import { CTASection } from "./components/CTASection";
import { Footer } from "./components/Footer";
import { Header } from "./components/Header";
import { HeroSection } from "./components/HeroSection";
+import { SecuritySection } from "./components/SecuritySection";
+import { TrustedBySection } from "./components/TrustedBySection";
+import { VideoSection } from "./components/VideoSection";
export default function Home() {
return (
@@ -11,9 +14,12 @@ export default function Home() {
-
-
+
+
+
+
+
>
);
}
diff --git a/assets/example.gif b/assets/example.gif
new file mode 100644
index 0000000000..9c3e84886f
Binary files /dev/null and b/assets/example.gif differ
diff --git a/bun.lock b/bun.lock
index 8c79bd6e3a..e7dae413cf 100644
--- a/bun.lock
+++ b/bun.lock
@@ -201,6 +201,7 @@
"framer-motion": "^12.23.24",
"geist": "^1.5.1",
"next": "^15.1.6",
+ "next-themes": "^0.4.6",
"react": "^19.1.1",
"react-dom": "^19.1.1",
"react-fast-marquee": "^1.6.5",