diff --git a/App.tsx b/App.tsx index 327140d..720d96a 100644 --- a/App.tsx +++ b/App.tsx @@ -7,6 +7,7 @@ import { SkillsCatalog } from './pages/SkillsCatalog'; import { SkillDetail } from './pages/SkillDetail'; import { AdvisoryDetail } from './pages/AdvisoryDetail'; import { WikiBrowser } from './pages/WikiBrowser'; +import { ProductDemo } from './pages/ProductDemo'; const App: React.FC = () => { return ( @@ -18,6 +19,7 @@ const App: React.FC = () => { } /> } /> } /> + } /> } /> diff --git a/components/Header.tsx b/components/Header.tsx index fe130d3..387115f 100644 --- a/components/Header.tsx +++ b/components/Header.tsx @@ -1,6 +1,6 @@ import React, { useState } from 'react'; import { NavLink } from 'react-router-dom'; -import { Menu, X, Terminal, Layers, Rss, Home, Github, BookOpenText } from 'lucide-react'; +import { Menu, X, Terminal, Layers, Rss, Home, Github, BookOpenText, PlayCircle } from 'lucide-react'; export const Header: React.FC = () => { const [isOpen, setIsOpen] = useState(false); @@ -9,6 +9,7 @@ export const Header: React.FC = () => { { label: 'Home', path: '/', icon: Home }, { label: 'Skills', path: '/skills', icon: Layers }, { label: 'Security Feed', path: '/feed', icon: Rss }, + { label: 'Product Demo', path: '/demo', icon: PlayCircle }, { label: 'Wiki', path: '/wiki', icon: BookOpenText }, ]; diff --git a/pages/ProductDemo.tsx b/pages/ProductDemo.tsx new file mode 100644 index 0000000..c4003d7 --- /dev/null +++ b/pages/ProductDemo.tsx @@ -0,0 +1,92 @@ +import React from 'react'; +import { ExternalLink, PlayCircle } from 'lucide-react'; +import { Footer } from '../components/Footer'; + +interface DemoVideo { + id: string; + title: string; + description: string; + videoSrc: string; + posterSrc: string; + videoContainerClassName?: string; +} + +const demoVideos: DemoVideo[] = [ + { + id: 'drift-demo', + title: 'Drift Detection Demo (soul-guardian)', + description: + 'Shows integrity monitoring in action: tamper detection, alerting, and restoration-oriented behavior for protected files.', + videoSrc: '/video/soul-guardian-demo.mp4', + posterSrc: '/video/soul-guardian-demo-poster.jpg', + }, + { + id: 'install-demo', + title: 'Install Demo (clawsec-suite)', + description: + 'Walkthrough of the one-command suite install flow and what gets configured for advisory monitoring and protection.', + videoSrc: '/video/install-demo.mp4', + posterSrc: '/video/install-demo-poster.jpg', + videoContainerClassName: 'md:max-w-[50%]', + }, +]; + +export const ProductDemo: React.FC = () => { + return ( +
+
+

+ + Watch It in Action +

+

+ Product demos for ClawSec installation and runtime protection behavior. These are the + same demo assets referenced in the repository README, presented as playable videos. +

+
+ +
+ {demoVideos.map((demo) => ( + + ))} +
+ +
+ ); +};