diff --git a/public/flash-walkthrough-poster.webp b/public/flash-walkthrough-poster.webp
new file mode 100644
index 00000000..3130db6f
Binary files /dev/null and b/public/flash-walkthrough-poster.webp differ
diff --git a/public/flash-walkthrough.webm b/public/flash-walkthrough.webm
new file mode 100644
index 00000000..74afe844
Binary files /dev/null and b/public/flash-walkthrough.webm differ
diff --git a/src/app/App.test.jsx b/src/app/App.test.jsx
index 206de720..5f251bf9 100644
--- a/src/app/App.test.jsx
+++ b/src/app/App.test.jsx
@@ -7,4 +7,5 @@ import App from '.'
test('renders without crashing', () => {
render()
expect(screen.getByText('flash.comma.ai')).toBeInTheDocument()
+ expect(screen.getByRole('button', { name: 'Watch walkthrough' })).toBeInTheDocument()
})
diff --git a/src/app/Flash.jsx b/src/app/Flash.jsx
index 18a650b6..3376027f 100644
--- a/src/app/Flash.jsx
+++ b/src/app/Flash.jsx
@@ -343,7 +343,37 @@ function Stepper({ steps, currentStep, onStepClick }) {
}
// Landing page component
+function WalkthroughDialog({ onClose }) {
+ return (
+
+ )
+}
+
function LandingPage({ onStart }) {
+ const [showWalkthrough, setShowWalkthrough] = useState(false)
+
return (

@@ -359,6 +389,14 @@ function LandingPage({ onStart }) {
>
Start
+
+ {showWalkthrough &&
setShowWalkthrough(false)} />}
)
}
diff --git a/src/utils/manifest.test.js b/src/utils/manifest.test.js
index 3167e825..73059a84 100644
--- a/src/utils/manifest.test.js
+++ b/src/utils/manifest.test.js
@@ -8,6 +8,11 @@ const CI = import.meta.env.CI
const MANIFEST_BRANCH = import.meta.env.MANIFEST_BRANCH
const imageManager = new ImageManager()
+const expectedImageCounts = {
+ release_mici: 32,
+ release_tizi: 32,
+ release_tici: 33,
+}
beforeAll(async () => {
globalThis.navigator = {
@@ -38,7 +43,7 @@ for (const [branch, manifestUrl] of Object.entries(config.manifests)) {
const images = await getManifest(manifestUrl)
// Check all images are present
- expect(images.length).toBe(33)
+ expect(images.length).toBe(expectedImageCounts[branch])
let countGpt = 0