From d49a2fd045ce2dcf1983a900135c6949948308f2 Mon Sep 17 00:00:00 2001 From: KyleTryon Date: Fri, 11 Sep 2026 11:45:56 -0400 Subject: [PATCH] fix(www): version preview assets Import homepage preview videos through Astro so deployments fingerprint each capture. This prevents stale public video URLs from being paired with a newly hashed poster. --- .agents/skills/cliparr-www-assets/SKILL.md | 12 ++++++++---- .../{public => src/assets}/mobile-pwa-preview.mp4 | Bin .../{public => src/assets}/mobile-pwa-preview.webm | Bin apps/www/{public => src/assets}/preview.mp4 | Bin apps/www/{public => src/assets}/preview.webm | Bin apps/www/src/pages/index.astro | 12 ++++++++---- tools/www-assets/src/cli.ts | 2 +- 7 files changed, 17 insertions(+), 9 deletions(-) rename apps/www/{public => src/assets}/mobile-pwa-preview.mp4 (100%) rename apps/www/{public => src/assets}/mobile-pwa-preview.webm (100%) rename apps/www/{public => src/assets}/preview.mp4 (100%) rename apps/www/{public => src/assets}/preview.webm (100%) diff --git a/.agents/skills/cliparr-www-assets/SKILL.md b/.agents/skills/cliparr-www-assets/SKILL.md index b7e2b6a..8f7d0fc 100644 --- a/.agents/skills/cliparr-www-assets/SKILL.md +++ b/.agents/skills/cliparr-www-assets/SKILL.md @@ -99,15 +99,19 @@ supported text track. Failure diagnostics include the available track keys. ## Outputs and verification -| Scene | Poster | Videos | -| ------ | --------------------------------------------- | ------------------------------------------------------------------- | -| Hero | `apps/www/src/assets/screenshot.webp` | `apps/www/public/preview.mp4`, `preview.webm` | -| Mobile | `apps/www/src/assets/mobile-pwa-preview.webp` | `apps/www/public/mobile-pwa-preview.mp4`, `mobile-pwa-preview.webm` | +| Scene | Poster | Videos | +| ------ | --------------------------------------------- | ----------------------------------------------------------------------- | +| Hero | `apps/www/src/assets/screenshot.webp` | `apps/www/src/assets/preview.mp4`, `preview.webm` | +| Mobile | `apps/www/src/assets/mobile-pwa-preview.webp` | `apps/www/src/assets/mobile-pwa-preview.mp4`, `mobile-pwa-preview.webm` | The pipeline encodes silent H.264 MP4 and VP9 WebM at 30 fps, with fast-start MP4. It extracts each WebP poster from the delivered MP4's first frame. FFprobe and a full decode validate dimensions, codecs, absent audio, and recording duration. Playback telemetry verifies decoded frame advancement and rejects capture stalls. +The homepage imports posters and videos from `apps/www/src/assets` so Astro gives +every file a content-hashed deployment URL. Do not move preview videos back to +stable `public` URLs; stale browser or CDN caches can otherwise pair a new poster +with a video from an older capture. The existing 500 KB hero / 100 KB mobile video budgets are advisory. The report flags larger files; inspect quality before changing encoding settings. Do not diff --git a/apps/www/public/mobile-pwa-preview.mp4 b/apps/www/src/assets/mobile-pwa-preview.mp4 similarity index 100% rename from apps/www/public/mobile-pwa-preview.mp4 rename to apps/www/src/assets/mobile-pwa-preview.mp4 diff --git a/apps/www/public/mobile-pwa-preview.webm b/apps/www/src/assets/mobile-pwa-preview.webm similarity index 100% rename from apps/www/public/mobile-pwa-preview.webm rename to apps/www/src/assets/mobile-pwa-preview.webm diff --git a/apps/www/public/preview.mp4 b/apps/www/src/assets/preview.mp4 similarity index 100% rename from apps/www/public/preview.mp4 rename to apps/www/src/assets/preview.mp4 diff --git a/apps/www/public/preview.webm b/apps/www/src/assets/preview.webm similarity index 100% rename from apps/www/public/preview.webm rename to apps/www/src/assets/preview.webm diff --git a/apps/www/src/pages/index.astro b/apps/www/src/pages/index.astro index d468155..8c4bf4b 100644 --- a/apps/www/src/pages/index.astro +++ b/apps/www/src/pages/index.astro @@ -3,7 +3,11 @@ import BaseLayout from "@/components/BaseLayout.astro"; import CommandBlock from "@/components/CommandBlock.astro"; import FeatureGrid from "@/components/FeatureGrid.astro"; import { Picture } from "astro:assets"; +import mobilePreviewMp4 from "@/assets/mobile-pwa-preview.mp4?url"; +import mobilePreviewWebm from "@/assets/mobile-pwa-preview.webm?url"; import mobilePreviewImage from "@/assets/mobile-pwa-preview.webp"; +import previewMp4 from "@/assets/preview.mp4?url"; +import previewWebm from "@/assets/preview.webm?url"; import screenshotImage from "@/assets/screenshot.webp"; import { dockerRunCommandVariants, @@ -141,8 +145,8 @@ const faqStructuredData = { aria-hidden="true" data-editor-preview-video > - - + + @@ -250,8 +254,8 @@ const faqStructuredData = { aria-hidden="true" data-editor-preview-video > - - + + diff --git a/tools/www-assets/src/cli.ts b/tools/www-assets/src/cli.ts index 76835dc..149569d 100644 --- a/tools/www-assets/src/cli.ts +++ b/tools/www-assets/src/cli.ts @@ -132,7 +132,7 @@ async function main() { const name = `${scene.videoName}.${extension}`; await copyFile( path.join(output, name), - path.join(root, "apps/www/public", name), + path.join(root, "apps/www/src/assets", name), ); } const name = `${scene.posterName}.webp`;