From 9256d7ac381a5b68be917cf9db72270fab354172 Mon Sep 17 00:00:00 2001 From: Tyler Date: Wed, 17 Jun 2026 14:31:01 -0600 Subject: [PATCH] feat(pwa): add manifest screenshot placeholders (replace pre-launch with real captures) --- public/screenshots/dashboard.png | Bin 0 -> 26346 bytes public/screenshots/mobile-storefront.png | Bin 0 -> 13444 bytes scripts/generate-pwa-screenshots.js | 39 +++++++++++++++++++++++ 3 files changed, 39 insertions(+) create mode 100644 public/screenshots/dashboard.png create mode 100644 public/screenshots/mobile-storefront.png create mode 100644 scripts/generate-pwa-screenshots.js diff --git a/public/screenshots/dashboard.png b/public/screenshots/dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..279ce4994d469475a82a1d671d5967138a33d8c5 GIT binary patch literal 26346 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 literal 0 HcmV?d00001 diff --git a/public/screenshots/mobile-storefront.png b/public/screenshots/mobile-storefront.png new file mode 100644 index 0000000000000000000000000000000000000000..dad6edf1ca2bbd34bd70d2f2301accf7118d1260 GIT binary patch literal 13444 zcmeHOc~q0vwntIW8iQ7E1Ipm7t=0(w5fBN9Xf0Tupw&v1A>fo&h5!L$2uX@4SW#l7 zGL(?0XmKPcN(cl3qM{{(iZYl91QInN0X~utGJG%g6}#43>#h6VefN2L-{OxX>-(*9 z&i?KF+k1Z}Urv758WuA9g9RVh+1btB6#DsBc6L*8?Ck9SZH9vl`6l55ciYFzB^BMF20?uqh-hmsEkm@-=lqMIFb z{0$S{nA@-s-ec#urYXyec0h+X_#}UC@7lAj#@X3n{hH6-UVHNpi@8a{p{zow81jm$! zcTrA?_;kWs)gLlW^`G!jINzR?xrAvy=eK~s-$~-~F0aBq{c%F41@AylRKWyTIT6I< z`sKgNs3y8ij8qe|7QRCVCUjPR4Ie6Wp8n|!2U|LyaCXi)^5HalX!4?s5Xgq$nMZ8u zoc`D$=lr>8&9TLxY{o)!1mXTfia;;Va2@cBP2a<*x@Y)`E72Vc&C z*d(3r4Tt>SE?Z##=j8Q|jN%fJ|J*VLj#`Dl%=NQI)z-u5;&4>*O0F@sJ<1-r41`|6Zer2DX>)yt4^*S^Svd>!1j zmjT`zxS=J9N3uOKu^@ob8N)rjh(McYOtiwee`Q>(bJ*O64IX41N7?656*cVF8Do7k zK8!k63*t~G#7Ux%5Rzo6zgVY^xLHLR3gWOZCkWd@jzBM zscYm15k;MOlg^Sho~BYNTOiee=r=>{X-u=EwI~;D@-Af>mKXxD0LP2czPZRFNjj3T zRk5Ho%1jZ)W2!)`hiNp#zt2}5pHZT1FjXT#o!5(~#hk$n+8U&Bzi7>fwnRi7h{W9C zzP!PD0ahEx>V`H8!`vf~d!r3SjTs*o7%A;4`p;a8Tt)@}fg#|H+^51h(Q<|l zHXf>c;;QqNn`CT1=ymo~(Q#T)XT5S&VT4tB&8gp4Bh$nYA}iC27J5-rwULR8*%UJ( zq~1G!iwAx~vpE4kKnp;iz@zM`JhEGijdd3Gz%zT>m}1FJ4n;#|j{1jCbS?QP>FOvrxC zoH}Knd$M|ZpERnM9&b@=Zm443{G=bXXsIO5^K4C(vHL(Q(@+OXOmh8(s=#pdxK&<< zEqNkcIv(3?7VkXZUngSX8aor+Gdjt_cty8Ra@G%Hs4;++)SIg4@hG+@MzJ#@u(PQV z*r46589Gi{#Y;XV@8We?bvO!<(~FUgM`1uFYdGH2Vj5vLrg9$odJ!u{C3)Ihw@~?L zr9X~R$?1!?M*CB3CCj`dNNg5|37WX$i7ct>Ic4zOOd+Hv1ZC;nqE*TL8IS^q=WB<%Om1V<4VG-}Hx!)%j~&$)My)e;D_r#E zup5#Zk9!Yg%l6tddJN}B`vG~kC^D9OC^du;$izG_?l-+wk}XGRWX)z~x9jT8_H9hd zOAd8chsi|9?L7yKiCd};gx%-2=GToOX+FxndfFS0p`UWqRBb(S9JN%C0$nd=(}h{8 z9qFrSr>WYG&aOzlt*ZXR<#L#YZT{ADd0+(JM}?FvfA1 zzhguCsB-*)*{xk#jRDMptV4`l{8hJAhTi!nAA6D7R`|*L?3stb)aPPQ-7O3D8Y%5O%5NsR|A+&PTxWb{ zDXZQ#zlwOMDqyQE@}=0b*TUl~fCPdylk(uXNw+ZvaS;*owha6UeTiTYurk(y0#@P) zuGmb5{sgvcNaqmJ#Pr?E}UQ9Z`@dx{Q!?K-4*0jDyAm^ z!^EQjj>m}$D9;diI?bhQ#)WXjHc-D&Ee%ls*pS&REeuQXtkn=8G#!PaIS|l(j_pj| z3s#ct3L37z{q&?#UoIo2QLnE389M_AQtpt&m5)aHH$1h9%nAc{;3&;Wey1g%N?5Lu zYQ53g@oLcwL3MSsC-9Q1YvP%7fL*L*+{opuNHE|lDXk05>RrvYdmhyegPRbu`O6?%l z*Cr@$FLWHx2EM|UZr`Ws6d;~#H<}iDLn=tl9oe8}yD1=g__7jhy$C%6%(Ap&n({n| z%MX}b9?p`FJ#F`a0DHLEjT98BqEylGw6F4#+I=6iEf=jjKd)GDI8-C)beU>CphUcJBuk^vU6iVumYXhDbbA5yYj_Tj5RX!NfqM716LEq&XIyB+ zom{JtD|nPCMa1YN_PnGpS|t?(Yn%6n{{Xwi7BwMq+K~`^2&oQPN*O zqT`q%BQ2u--g(E0Y|6}~^|Yzs-Eh}r1~ukR10$mG*(z&K({;zxGKIf93y*3h!GCD7{n_G=>8*OO}Tgw;D?Yk8Q(Mb0X^;B5IkIB>7sjJ zJaq1cFOC$1Q#A9I-cJ#3!#TCk%Ta%^Brqu@{#}7@@NBv1ph`_V19k3xcUkKp-6)?=PCO`hJE+B}Qfb$4QSy$20mlKzhW}#&0z|`A_=IVX5{qxUgSZZCmS zjam>?5?72}rc!ERrUfNA%k)-unLe)AUTJj68FZXm?`SD_^a#=tg^WRCE3?XMJAhFb zD*a;KEy4>In>C`dg8n95OR2WdM9137Dc;JxDy48)R-aX)d)6wsb$D$~T$q=dlHh5* z5&k+{7kNSyq!Mpf%lfhQoE&fZs4L*Gn~noqPqIj)?SI7r@C4GGz{3>>oohUv@pZQW zpn;&>ai(F`G233mo_$T&jQ1?Q!9+N!IPtH~X?+Q2&1#Yxd6=k4-GwF?V$-kY^qvbD z#FzGu->GK@x&OrJ>)*#57g@Aom{xg1;Poxqzfl`tl4~#Li3&K`>Z-W`rMYoQ%VKz% zFAPD-i?xZo0|WbV;*uUkqm@qJNXAmBhPy*ZJrZ))l$Q>fnwWU^FRtsF~n|3uf4jQWJ6b2Z}V}4wl4QGEU4A2w| zaNLodDacpp3tIP^lCD&6)h;GE&eQ6yOQ&YCnT>_9NiZ2%H`I-U6cA6tsVI>TjkLs% zRV;UZV#|})84X*AKK`+;gcnKVZIU-)vk_ zhu;iViAp1fYr+d80KQX``MY1OJ+ z{9|VO3P&=F6OTn9KW47y@!2aSc>0LRqlKh#e- z=!1)f!{&Cfn6Pz%Yj|bHLjdo#r;#GNu!rQDPm*8M$^F>BYGl{YG@njwde_z)w6R=4 zFd7&K_>l-#-)A9Ztr&SUA!!qephb7_0oVyeE=VC5-E3yB{_8z z%SliYz()0%9{BTarF`cOQCkUX9yIGz`57KpiHF#h>v4>mLPQNQ$A=24WW(cv_zZ#)Vc zCH7DBS!C0(9l&PuV=U?*Fss4xrIKi0H%K*%haR@j2Kd(!X!WyRUFJ9MD}Bz5zKcA= z3{2=~PX=(z><(_xGvu#jR5|yxBv_8K_|K-f)C|%DbIf`{U7V0T7R^&o4@?+S%3@XIMJxWj!Q;cHPu`KWeiKusokGBWu%Xo{aH?R+Y`yp&GZgQ z5DYEa*D>5pDGX%ohzTFyFC1~xz2p&>q@KpdAE@due7*KFAOSdMK>qCLCf0uH=Tg*R zpsi)W?(7%Aqq;uid-Wj4#gxT22l-TTf^5cM6)ZK8XP00x6AQTWoOWX5+{Mb1t;oCd zh^e9}$+G4&D@ex%y}6*_?oKn!?obrzWZ`2fL2!B)j1Mxws}e4LKodxzsKgjCS{qox zBs9u3h|+*HiI~7$PF(!*eTM0KluPmOGWK6eB8b|?3z_aEm5v;jW5k+d2{oMLS;!I< zD%LCM4y7stu)fg<)^G5GeWC2bA3SK%G7O*W4nHrLA-a<%W#X&}WQ7my5ZHNxMY-Fm zOzW0R_tmaija$x+vHu3KH>lz-o!G^y$n&fcs%g|vXyB%UqdkYPs>RyZnWiU3?i^gu z{+cr4A|LIg+ZHWTR3`pK+1&C2lXOf_|BEJHtiRT!oYL-BV01?m1B&l+bqG=Hp=N^IP#ka^+tBiZbPG5%+9U3T|%00q6`MG))*H3Qn>B#7~G4;tS%A zH87rXep@h(-Ecq%ipuX1PdzY?xTizGBl{S>g2Te{2QC+h4)BTuMN>vhqv+)8DCaWp zBLi|?#`p>*K+{AAVw07}_8{~vX|hgLnmGvQiOs<$?GJj@PylU1uApNp`Ygz7pioSz zc<$J;b!hXl_x_Xi{|2_9x5atHCq4$KTYi)lkvfH#V?DNX?u}A(L)xPq@ literal 0 HcmV?d00001 diff --git a/scripts/generate-pwa-screenshots.js b/scripts/generate-pwa-screenshots.js new file mode 100644 index 0000000..131aa4d --- /dev/null +++ b/scripts/generate-pwa-screenshots.js @@ -0,0 +1,39 @@ +// scripts/generate-pwa-screenshots.js +const fs = require("fs"); +const path = require("path"); +const sharp = require("sharp"); + +const OUT_DIR = path.join(__dirname, "..", "public", "screenshots"); +fs.mkdirSync(OUT_DIR, { recursive: true }); + +async function main() { + // Desktop dashboard placeholder + await sharp({ + create: { width: 1280, height: 720, channels: 3, background: { r: 250, g: 248, b: 245 } } + }) + .composite([{ + input: Buffer.from(` + Route Commerce + `), + top: 0, left: 0, + }]) + .png() + .toFile(path.join(OUT_DIR, "dashboard.png")); + console.log("✓ dashboard.png"); + + // Mobile storefront placeholder + await sharp({ + create: { width: 390, height: 844, channels: 3, background: { r: 250, g: 248, b: 245 } } + }) + .composite([{ + input: Buffer.from(` + Route Commerce + `), + top: 0, left: 0, + }]) + .png() + .toFile(path.join(OUT_DIR, "mobile-storefront.png")); + console.log("✓ mobile-storefront.png"); +} + +main().catch(console.error);