diff --git a/apps/landing/src/components/enterprise.tsx b/apps/landing/src/components/enterprise.tsx new file mode 100644 index 00000000..bacf26f4 --- /dev/null +++ b/apps/landing/src/components/enterprise.tsx @@ -0,0 +1,56 @@ +import { Lock, Server, Users } from "lucide-react"; + +import { FadeIn } from "./fade-in"; + +const features = [ + { + title: "Data Sovereignty", + description: + "Your images never leave your network. No external API calls, no cloud dependencies. Full GDPR, HIPAA, CCPA compliance by architecture.", + icon: Lock, + }, + { + title: "Enterprise Controls", + description: + "Multi-user authentication, team permissions, API key management, and audit logging. Everything you need for regulated environments.", + icon: Users, + }, + { + title: "Deploy Anywhere", + description: + "Docker, Kubernetes, bare metal. ARM and x86. Air-gapped networks. One container, any infrastructure.", + icon: Server, + }, +]; + +export function Enterprise() { + return ( +
+
+ +

+ Built for organizations that take data seriously. +

+

+ Healthcare, legal, defense, finance — when images are sensitive, SnapOtter keeps them on + your infrastructure. +

+
+ +
+ {features.map((feat, i) => ( + +
+
+ +
+

{feat.title}

+

{feat.description}

+
+
+ ))} +
+
+
+ ); +} diff --git a/apps/landing/src/components/how-it-works.tsx b/apps/landing/src/components/how-it-works.tsx new file mode 100644 index 00000000..6ae652f7 --- /dev/null +++ b/apps/landing/src/components/how-it-works.tsx @@ -0,0 +1,55 @@ +import { FadeIn } from "./fade-in"; + +const steps = [ + { + number: "1", + title: "Pull", + code: "docker pull snapotter/snapotter", + description: "One image. Everything included.", + }, + { + number: "2", + title: "Deploy", + code: "docker run -p 8080:8080 snapotter/snapotter", + description: "One command. Any server.", + }, + { + number: "3", + title: "Use", + code: null, + description: "Browser UI, REST API, or pipeline automation.", + }, +]; + +export function HowItWorks() { + return ( +
+
+ +

+ Up and running in 60 seconds. +

+
+ +
+ {steps.map((step, i) => ( + +
+
+ {step.number} +
+

{step.title}

+ {step.code && ( +
+ {step.code} +
+ )} +

{step.description}

+
+
+ ))} +
+
+
+ ); +}