diff --git a/public/aigrader.mp4 b/public/aigrader.mp4
new file mode 100644
index 00000000..793b26e2
Binary files /dev/null and b/public/aigrader.mp4 differ
diff --git a/public/graphics/cyber-101.png b/public/graphics/cyber-101.png
new file mode 100644
index 00000000..faac7392
Binary files /dev/null and b/public/graphics/cyber-101.png differ
diff --git a/public/graphics/cyber-101.svg b/public/graphics/cyber-101.svg
new file mode 100644
index 00000000..b2df156e
--- /dev/null
+++ b/public/graphics/cyber-101.svg
@@ -0,0 +1,632 @@
+
+
+
+
diff --git a/public/graphics/mock2.png b/public/graphics/mock2.png
new file mode 100644
index 00000000..c044e11d
Binary files /dev/null and b/public/graphics/mock2.png differ
diff --git a/public/graphics/mockup.svg b/public/graphics/mockup.svg
new file mode 100644
index 00000000..b2749a52
--- /dev/null
+++ b/public/graphics/mockup.svg
@@ -0,0 +1,588 @@
+
+
+
+
diff --git a/public/terminalproof.mp4 b/public/terminalproof.mp4
new file mode 100644
index 00000000..e694ecf8
Binary files /dev/null and b/public/terminalproof.mp4 differ
diff --git a/public/videoproof.mp4 b/public/videoproof.mp4
new file mode 100644
index 00000000..de29125d
Binary files /dev/null and b/public/videoproof.mp4 differ
diff --git a/src/components/Footer.jsx b/src/components/Footer.jsx
index 0f5bcf16..dc807c4c 100644
--- a/src/components/Footer.jsx
+++ b/src/components/Footer.jsx
@@ -48,23 +48,7 @@ export function Footer() {
-
-
-
-
-
+
+
+
+
+
+
+
+
+ >
+ )
+ },
+ },
+ {
+ name: 'Submission Playback',
+ summary:
+ 'Review recorded student lab sessions.',
+ description:
+ 'We automatically records lab sessions, so you can review them later.',
+ image: '../../videoproof.mp4',
+ icon: function InventoryIcon() {
+ return (
+ <>
+
+
+
+
+
+ >
+ )
+ },
+ },
+ {
+ name: 'Virtual Machines',
+ summary:
+ 'Cloud machines streamed to the browser.',
+ description:
+ 'Easily access cloud machines from your browser, no need to install anything.',
+ image: '../../terminalproof.mp4',
+ icon: function ContactsIcon() {
+ return (
+ <>
+
+
+
+
+
+
+
+ >
+ )
+ },
+ },
+]
+
+function Feature({ feature, isActive, className, ...props }) {
+ return (
+
+
+
+
+
+ {feature.name}
+
+
+ {feature.summary}
+
+
{feature.description}
+
+ )
+}
+
+function FeaturesMobile() {
+ return (
+
+ {features.map((feature) => (
+
+
+
+
+
+
+
+ ))}
+
+ )
+}
+
+function FeaturesDesktop() {
+ return (
+
+ {({ selectedIndex }) => (
+ <>
+
+ {features.map((feature, featureIndex) => (
+
+
+ {feature.name}
+
+ ),
+ }}
+ isActive={featureIndex === selectedIndex}
+ className="relative"
+ />
+ ))}
+
+
+
+ {features.map((feature, featureIndex) => (
+
+
+
+
+
+
+
+
+
+ ))}
+
+
+
+ >
+ )}
+
+ )
+}
+
+export function SecondaryFeatures() {
+ return (
+
+
+
+
+ We're the best platform for teaching cybersecurity.
+
+
+
+
+
+
+
+
+
+ )
+}
diff --git a/src/images/screenshots/cyber-101.png b/src/images/screenshots/cyber-101.png
new file mode 100644
index 00000000..faac7392
Binary files /dev/null and b/src/images/screenshots/cyber-101.png differ
diff --git a/src/pages/index.jsx b/src/pages/index.jsx
index 596ad156..33608106 100644
--- a/src/pages/index.jsx
+++ b/src/pages/index.jsx
@@ -6,7 +6,7 @@ import { FeaturesPanel } from '@/components/home/FeaturePanel';
import { Stats } from '@/components/home/Stats';
import { LearningPanel } from '@/components/home/LearningPanel';
import { Enterprise } from '@/components/home/Enterprise';
-
+import { SecondaryFeatures } from '@/components/home/SecondaryFeatures';
export default function Home() {
return (
<>
@@ -39,7 +39,8 @@ export default function Home() {
-
+
+