From a18b9228fd27cd49e8985bfc469030dd5986ead1 Mon Sep 17 00:00:00 2001 From: abrichr Date: Sun, 2 Aug 2026 23:17:49 +0200 Subject: [PATCH] fix: restore all Cloud preview thumbnails --- components/DashboardShowcase.js | 37 ++++++++---------- components/DashboardShowcase.module.css | 11 ------ cypress/e2e/dashboard-showcase.cy.js | 14 +++++++ public/cloud-preview/thumbs/dashboard.webp | Bin 0 -> 8924 bytes .../cloud-preview/thumbs/program-graph.webp | Bin 0 -> 10546 bytes public/cloud-preview/thumbs/run-detail.webp | Bin 0 -> 8902 bytes .../thumbs/workflow-catalog.webp | Bin 0 -> 6260 bytes tests/dashboardShowcase.test.js | 17 ++++++++ 8 files changed, 47 insertions(+), 32 deletions(-) create mode 100644 public/cloud-preview/thumbs/dashboard.webp create mode 100644 public/cloud-preview/thumbs/program-graph.webp create mode 100644 public/cloud-preview/thumbs/run-detail.webp create mode 100644 public/cloud-preview/thumbs/workflow-catalog.webp diff --git a/components/DashboardShowcase.js b/components/DashboardShowcase.js index 16f5d440..82dd01fd 100644 --- a/components/DashboardShowcase.js +++ b/components/DashboardShowcase.js @@ -19,6 +19,7 @@ const SLIDES = [ { key: 'dashboard', src: '/product-preview/dashboard-workflows.png', + thumbnailSrc: '/cloud-preview/thumbs/dashboard.webp', width: 2560, height: 1440, address: 'app.openadapt.ai/dashboard', @@ -30,6 +31,7 @@ const SLIDES = [ { key: 'run', src: '/cloud-preview/healthcare-run.jpg', + thumbnailSrc: '/cloud-preview/thumbs/run-detail.webp', width: 2560, height: 1440, address: 'app.openadapt.ai/runs', @@ -41,6 +43,7 @@ const SLIDES = [ { key: 'program', src: '/cloud-preview/program-graph.png', + thumbnailSrc: '/cloud-preview/thumbs/program-graph.webp', width: 2560, height: 1440, address: 'app.openadapt.ai/workflows/program', @@ -52,6 +55,7 @@ const SLIDES = [ { key: 'catalog', src: '/cloud-preview/workflow-catalog.png', + thumbnailSrc: '/cloud-preview/thumbs/workflow-catalog.webp', width: 2560, height: 1440, address: 'app.openadapt.ai/workflows', @@ -284,27 +288,18 @@ export default function DashboardShowcase() { onClick={() => jumpTo(index)} > - {index === active || index === nextIndex ? ( - - ) : ( - - )} + {index === active && ( { .should('have.length', 1) .and('have.attr', 'loading', 'lazy') + // The rail uses four small derivatives. It must never replace + // inactive previews with empty numbered placeholders merely to + // preserve the two-image full-resolution stage budget. + cy.get('[data-testid="dashboard-thumbnail"]') + .should('have.length', 4) + .each(($img) => { + expect($img.attr('src')).to.match( + /^\/cloud-preview\/thumbs\/.+\.webp$/ + ) + cy.wrap($img).should(($thumbnail) => + expect($thumbnail[0].naturalWidth).to.be.greaterThan(0) + ) + }) + // Every discovered tab must activate its matching, decoded slide. cy.get('[data-testid="dashboard-tab"]') .should('have.length.at.least', 1) diff --git a/public/cloud-preview/thumbs/dashboard.webp b/public/cloud-preview/thumbs/dashboard.webp new file mode 100644 index 0000000000000000000000000000000000000000..41c840ae6a6e6266014e16ab251fd41e2cc3b249 GIT binary patch literal 8924 zcmV<2A|u^WNk&H0A^-qaMM6+kP&gpSA^-po&j6hPDu4oL0X~&Vo=T;pqarAF37D`F ziD_>9Fhd(NKn-9$G>n2pm#af-e{h3bSkn2!{6}nG?EkZP%jQSovIsc;vRK#TJIDP% zy@lr-_8v#j59$5d+Lm}@*bB!m_1+9WZ2wjJdGG`M8~lgu545&?zi{;s{>T2?t;tv@ z+zHYhb*k=alELEYKCEz*peuLwD+!a)_K>uy)(fx*X{%MS+N)ZWjTsI= z>D#pUEWu6#nlXJEWaQCU;HuHt?{C+^D+=oJZ>X09Vq$5Z2A~&Skn<5KTZXS(b-U9N zk2WFISMf51tw`m>ZfCt+CuOFsR?20KbuGhk)}=H;Y;pMIBTZM~!k)pQ`CUke0G&h@ z9(eXzYSnM!WSssxk~UgcnPE2@-p>w@tyM=|*jMwM+XSi38)?LqIq5kWEe^L55xT9G z)~eP1ZdU*1xL3*Xa?lM|Rz})Oxiw#u9ACDD_we zGibiUmaVA-wb5M?ypS^^QZC7RyWCbFVTNB6gX7e~wq#VBg0sVksqo_Q z+N)Zb2$U}P@yEVg&MtZh)u|@`(iE(tN!ggKL&G;}Dm_%MZ>c%EOhI5^F+mHpxFDwt zjjkg6OCng4y;1%a61~}xBGxOUvCH=nxmUl<^sNpBMz+0V$&jpbctdhKPKdCo;}*n4 z=tWUWr%i;Zz9QA(tD0gn13Q(PYPEn6T?yQ1>@ZPb_VQ@}d?f`d(8NZD@w0Pd%4nKa z+b2cgi&}14#0HsL%5-3=@S1}KQ0LvgnqPHDRVB*w7T`j#M3Iv!JZ|v^RsT}L>7~XT^ss|ZJqf` zI$eW2EDI6iC4PB46%}zZzAD^{+*BbM_^XMP@a&^<8P2;lNW@@42rlG`4Ch5u({fd?KHX(~nu&3(t`|{F zMD3WobRYA@Vo5lv$+H-v)u^gGkwKj6^ofj7>eN*pNTAMj`b5Sk^=c}QA>PN^I|gm! z81Nr7I49z+CRfE=Os|T#nO_xgGQKL|B;iG!Ayj@ueax410L#e0>pn1MlRiR~hZI<({Bn_D zsfLi&(@IJ!m<-zQP=p(mkj}RV0=^stfEv1x)2~uM6T}JWl`_iSO6q4aHS_ zSH5$o_S)BL6oxdRg`%|4Wdr7eQYCG4hrz7`!YZfgq_VHG``%s-Y8(pg0c4z=L+?gM z9`o$Kcvm~y%$9!DywTXLFVmHD!|b8G9`Jc^=P{r@;4m$&yW+zI_Y|jCnXqV(bEzXB zG5%8zaI+_&`U^2LC(tyOQ=Z`22rxRJr}ruV0RH~sy(^e8){1TBB9=b+H%*-xjCzX~ zo0j^jcyYpYB9cgfW$-U+d%M0;l*9X=Gnj)$cG5Ea9$4000Byqd^)iq4eSCPJu+2|A zznpgz#Vo@YLiTz;5LNrHCjRedjnwG9$fhMfH~BFW3;JZW_57m?qq-5M?o=o5&-xX{ zhDs#{RV!u(h-5DZ=6qN@yAR5nZt2vNspFt1i>C>hQQ=I*&Rvv1q0JQmB!-c82@=g4 zrWJSk>ML3L1+xhdf&ZXYO3qT;rb4S$PWw#~XkSF48ae8t+10ERZ=09or)GGh$HNZk zoZD5(*s*2~@E}o4?P-O41wSyNZCm|8LB&5;VGJyRLAE>Dj`TV5Wt1tG$e`djnq`8D z?ZK6#JQ2*f2)dM|c-Keo7M)~eQfAg!4VC~@dXjA6*RORnyuPwYH_jpXTJy=F=Pzhk zM9%wY*xGnDFoZcat(iNpvWmrlF;Y*-JH-JaSYx6s4ai?}+Q(kR4yU+vKZFCQ$67-Q z&yGR_f>6B#AKr;%U8k{3Y!a-6$&r4Je1CBc`A48vKn!(w27{f7D4 z=N8@=5F`f@H z4$50>M%LIgIHNgw`ef@uq^DWa2a+9 zB({sVJSu2W?;z0L^E8%LJ#@POHyVe

){HplBqM7tm^M#igqc1=mYr{VYbI#wAuV-d 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 literal 0 HcmV?d00001 diff --git a/public/cloud-preview/thumbs/program-graph.webp b/public/cloud-preview/thumbs/program-graph.webp new file mode 100644 index 0000000000000000000000000000000000000000..957a89768e8df4a95e8225eda88199c7f366c2eb GIT binary patch literal 10546 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 U&NtS5ltr-lX)-Us0000003oqc7XSbN literal 0 HcmV?d00001 diff --git a/public/cloud-preview/thumbs/workflow-catalog.webp b/public/cloud-preview/thumbs/workflow-catalog.webp new file mode 100644 index 0000000000000000000000000000000000000000..f0474ba0ea6badf2123b10b3f2cf11e4d2b5ae02 GIT binary patch literal 6260 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 literal 0 HcmV?d00001 diff --git a/tests/dashboardShowcase.test.js b/tests/dashboardShowcase.test.js index e8b6734f..33499d11 100644 --- a/tests/dashboardShowcase.test.js +++ b/tests/dashboardShowcase.test.js @@ -11,6 +11,12 @@ const assets = [ 'cloud-preview/program-graph.png', 'cloud-preview/workflow-catalog.png', ] +const thumbnails = [ + 'cloud-preview/thumbs/dashboard.webp', + 'cloud-preview/thumbs/run-detail.webp', + 'cloud-preview/thumbs/program-graph.webp', + 'cloud-preview/thumbs/workflow-catalog.webp', +] test('Cloud showcase assets have exact local-mock provenance', () => { const provenance = JSON.parse(fs.readFileSync(path.join(root, 'public/cloud-preview/provenance.json'))) @@ -32,3 +38,14 @@ test('Cloud showcase assets have exact local-mock provenance', () => { assert.equal(metadata.height, 1440) } }) + +test('Cloud showcase keeps all four preview thumbnails lightweight', () => { + let totalBytes = 0 + for (const asset of thumbnails) { + const bytes = fs.readFileSync(path.join(root, 'public', asset)) + totalBytes += bytes.length + assert.equal(bytes.subarray(0, 4).toString('ascii'), 'RIFF', asset) + assert.equal(bytes.subarray(8, 12).toString('ascii'), 'WEBP', asset) + } + assert.ok(totalBytes < 100_000, `${totalBytes} thumbnail bytes`) +})