From b576ed372a540c143f9052840b97e92f27b7650f Mon Sep 17 00:00:00 2001 From: sravan Date: Wed, 24 Jun 2026 17:13:01 +0530 Subject: [PATCH] feat(pwa): installable app (Add to Home Screen) for Android + iOS - manifest.json (standalone display, theme color, maskable icons 192/512). - generated square icons + apple-touch-icon (180) from the logo. - apple-mobile-web-app + theme-color meta in home.html. - sw.js gets a no-op fetch handler so it meets installability criteria (still no caching). static.js serves .json/.webmanifest with correct MIME. - Installing as a PWA also unlocks Web Push on iOS (Apple requires Add to Home Screen). Build marker -> pwa1. Co-Authored-By: Claude Opus 4.8 --- server/public/apple-touch-icon.png | Bin 0 -> 6927 bytes server/public/home.html | 12 ++++++++++-- server/public/icon-192.png | Bin 0 -> 7595 bytes server/public/icon-512.png | Bin 0 -> 28561 bytes server/public/manifest.json | 16 ++++++++++++++++ server/public/sw.js | 4 ++++ server/static.js | 2 +- 7 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 server/public/apple-touch-icon.png create mode 100644 server/public/icon-192.png create mode 100644 server/public/icon-512.png create mode 100644 server/public/manifest.json diff --git a/server/public/apple-touch-icon.png b/server/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..426844035c8706a4ca0700680799cf4c845c385a GIT binary patch literal 6927 zcmdT}`9G9j*p5m=mKpoLj4f-%PT9x4Zy|(XBq{5Nio#$lLt`CVc8$qSwxo=GY~Lo7 ziW)nSH6rmoy??>`>-)nzGxK?tbD!s2_jO;_eUfafjF}jC8P1(M$7E^(w*$Ug{(V4n zz)@?APVwA1-f2^~oe=gq&%Jq)ra6s0Y~OWDr2oDQEE*y5t@3TG zLv@1!u6w4+4QGsB-?;NePW*~E26=f9Zd~x|ddNchS#`uML+k zF+F?IecvNF5Zhf0u!vjn|Bp`h?~RLiFwb~s+i`G=3o{g8Uw>-vH*AcU)A&?j-h|0R zOWnRx2~oWtjAMNMfElX);*k@{Ei${r;q#`en{wPrQKpO%E!VcRz@}%p1lQPnWZ-vl z>e?cVP07*w*-g%dRDQ`a{(Iqp!SHrZ&WUSrop!mITgZw(S%lVI_|4gLFl+<+R*Z?p zv6K1;I?%){`}~k$X7?#|{+dgCn$i7NAKFdvVH)r2XAzQ*;A8RmVf74mN%N5}*w?a# zH|Reoh;#OGbQmeNOP^Rc{7^C(gum+M_i}f>zJ-yo^ZoF`!lx`27xUx8YIF&rCMdz^ zkn_jD{NJi->5&;Fqa%64bDK@_wFh#s4FeD=lLN+P`^s-;6Vv`FDr z^dNLdm|fA`L`mQdejj}qxLRqFLsLLICy7T!IBFA!=qdL|WIGh87&)Zu?D^E{eZ{TU zB)=WFaX*{tygZa-*yQk(xPZs>{4riPb05DoMEHcGl-2%=_a1FQ5Io|%)3R)pHO~() z&BMeEC-m5sYn4Au$#@C zQNTKN>0~ey6^t79({cP5%T{ z&Ca>^IaAei9bLw5DUdz<1PLt^n=fzDL8Q)eBtC*nm})fCn@5ChZH*2)hvM*#4+RD2 zZ|LV(w3JF4w}WyRV5(JZN0-WW*b)wOoBp1Sl>B)VFj+xvS`t}UdLUa9$b5g^?QzHfQ-^LuY zP;I~DvGnV`M~qE(`>^-mXlbeDcq`xZJUVlF$1w9cGs-tkNN)i_`Up|{e)n1qPWKAN zp0}0{K|AsVlSzXN*TqdF1&kUtxIr_i9?okSdV8V)U*}Qt137L<`41I3Bp)rYgc;la zODKr^HOIk#6AVn$HtwLsy!?@Y1vo?y**&?lSUS4FfQ@JKM~8Kr*G3h!LC`3soM*2a z;jgrTkWEL8)ARB*ym%U#f2S}v-OE^3(IC0RHpmzJ)luM?yY2JB=aR>NKfa2C?z$Nf z$^OR{#xtS23eRrXeh6PlyP!(F?v@8Dxb7=!?j3Q)G&(B!HJ=w;g(8-%0m&nBGODTy>1zMD7)$E6V z&co5D<>aiL->yZUE1l7nGt(7k&oSKNqOKcCZra(7i^5OcW=EA4 zW@i&(D|=Vob>oMkY~}Mr?gEew5rBF4G}ZHA@ta{MM*p@X|EOD%7M)ET(c^w$*328` zO}%;H45*KGVi&rc!m^f?VW$qD>e30fP)QmrVn6#ZNJeX?&1wO z*MLmMIfK4!38I*A+qBW&G}hmAH`Qz6d8EH6!)7h*gNwheHk6!8{mx#260;rC3u+D?_Ep9 z9=)oTLBXOWL?flfO9VdRe76$t!t>XY!^jZ_co)1LkQvgrJHSJO49O8Ex{_YfARS0n zGCg!Ifmp6w2^Vu?AK{f5VQ0L6h$zY~$XtYMj!pPw^IWZZ0%c)(-Tz>J(4Kd*0Kg@J z*8IUX{rmk#%$v`BGwYG%;VBK%3m=>E-*{$e=Z;E`K}$b$TY{%G(wm%NMb{Cmvj3T! zqoS&Qf|VE`uuf^?(J?!+3EBx$=tvKx-XnbYdga~+usjBdl}dXHx%EOJ?c5T+5oUQ0 zhDhV3>L&V>Uz|M{1SW%8uRWx9vOM5Q4^xXWxhi1tCX@|Absu&T6|fc>hK7haxAy)( zZ_BvtbHN?>5Z)My_QN562q!PPk1vZ&%)*w?jc{E*S|C{{SU#u z_n7#z=G9X$p5|AeUQbSSU(Yz^aV3Ix*j}2*r)=7Mr+mH`kj*U!(^ZR-V--Xy!)^D$0rh^NVKEEB#zQ3s2k5 z$vMJ1djkY)%XoLx$kI?mExA))!vM;Zh7@TUyqtsEl|~A8g-zr!Zk5+L+%kash5u~e zaFfi9ot@F590?N1k^c&`{G;Bhi#E(AyH7Wdw<>1;aKmmy#3_2LZ!c-hnhMQVWYvDx z{8BqXKqfpGW4BTx-DQ=~qRM6WCr>U;&NFijHw*wYu2-!dxA+nVsGvQ~f$9)ue{^Y4 zNW|~TcIXlcj;`n!%U*urtg^vroyR0pLhQ1_jj3}-58pr18mvRBtp=Xb@To+yp(@9X zSR!F(H#x&4qUf5Y&OF4%06Eg|{%`7y{O!6=ZZpaE%_v=D9Z}aV2bD6@1!=C~rsWLE z`q!K$3l_{eUsp0VKWs%yL)k!AJ>A7E!?K%#J-$b(knBpp<_G*bbvG`5#2A<4llY|U z4Ek%e|;O&j|Fg|041Ca$4qZ_%E;3JqfQH5$}7**-y2T zd~XH>BMT4zV7$L4GnxMp3>k+?JiEVTU$$n?ylFlr=|L_zEln_Wn#}IRYiHsfB`Nv2 zx>EeV^?kyt**fk{J=@u>u8Y;@jjx}GET`vPl=4T1+E(W9X%3^x zra7S`9T^X-@@2Em9VTk5%e0%_Tm6Pll9vrB{el4f)k6`h2Raa=pJZ%L$B}uIRDqvx}*A zH?=(9T7C^(B)EcHkofyM^z%$=|HdWG(IHwxY*79cbcdgv@|_ks*4ASTXe*YeSfrDE z!5qKe?w6y&g;vQ&VjEpxRvzGwZ4MT~U9p(bnQl>2O)t%(7-T~Qh=#h=CnaLUS0{yC z{)3_C!Ty9Xb1h!-@OvAYD_nEA9x`?8)`&`2csrz=2j-&r(!+$k$p;WZFmfPZ7oC*a zkNDK|G3kpd6cNFv>QDLkt+J9?E|mOO&!tY?Hx?rt;Aw#Y)@KlSvyso%!b2`;kS;d6 z(T*)MRqX|aaqzlW6q}ZZ#x-L=UX;?}upmP-+}M?oN}?uA0&3#_i69P5V0$ws$;-Gk za^<HdTsA|7^ZT_SNAVUbx2iy>%d|f zm>F~7<&O%Ce5KA)gLZY@T(;|`uBpv1)Oqo5Trx09^my5+ADP&9fwK7|O?bn)yN5$6 z*A_R%-4XRL-1U4xgFIs{8dLhQ+dQj0rQK7xGm*I9&I-v`c5Kb~!tKdfb0sBvJ1y^> zqTg&KJMziC$~wamtF6;2bzd7*eTUK|Q3L4}XGN>17Ch)*CMlco2u8qtewi}}CtbH7XchUJ4nhq` zZ|17QnWD#)e7~-tO`Y0>XXc;AO|daek#DRhrD9zkqebNqdjj5merMb zw^ht_#9*jRjS+XpEn7cp;KB{!!kW*@!dS=);L8(!Y z{;a4~{a|kJf=F(5zw0BYK6l&NV6m-_QqG=$z{*7BXfY(aRH9YH>k~Bfi+=$0Bzs$p zVZCK&*>2H(Y&Wl>Q%p@<+7D|&M@7va(;;MYi~3(X0M3si>WW;+Xl}(wlxa$md=r=5 z;zS=0*pNm~k4aq=YSk!?5Erg8l3a&OsTuZdiNRz6$}LJk-<)bKcpdoa;2q$Sg%g*u>> zLsjTk+Ry}#506g-2AutC@BS;DRhfe=U)rRacoJVqcFvx$P#KA4-I`(+|42U}gwqkp zI;y}7f$@hTdw^y^a|k+t(-s_$UF5WldKa*dX%uAD?Daik!EjggUb5h3(|8&8^ERM7 zU23?oXC%d;paJ1Le+4q~zxMKAZ}ZpYB|P8ImFc`X5GA@ z7LJuI`Zm09My{SFUpU%#Q~J_NNwH%=C>^S@s#Wfki-k7?7k}o~VRw zU(jf_2Gpqk0tw<+X(CA&f$61UT?;wY>b^JKw(|{*CG;dI3qkUDpNJckwbwokg8%cT zM45O|ReupZ3^6kx_$dYqx1=rjp3Ls#3#2s6X*sJuL*YIU&v4GAcEx_YN%^rZoH4NM zCc?a*HCWaiX_}dp;ZNdG?4Nq@vo|jMdVlweoObRjFvAouAd4;3DsJh665^c%jNYfm`x|9Gohx-W8OkayLift;XuOFQ#DRgJ8HHcfxI`K0{I>ygH#UGYI)Lz6duwV`wn z1BV}?&_chKz-K=CcbJ+9@6;TZ`);#&*Oy&BJnxQIne!xMh(E>gb;%H2WIk;4OS;r3LEDLZC zhWpe?_lSqO1!w%*v%(K?MBe`GL6C6-^iTpuSg#L2(LDPzb-x`=3DBK*zM6>PMkCxm zV{7A}jsUTPquIryVuugeZ|G*DJe}=T{UHUsiJ6ah&5H=C-|$CG2E2CZNq&LBmkp z(!ss%BvbR%A@Wx0l_nk|CfnKx7dYCc*Q~5A z$OjqfJ{GQS>jQ|vVVEOQ@hpwRU@8$nmYB~T1KSx56HLi@0HT3-z5at zU#`!*%93ZuqZf0(C0bIVCX-(fXmNiyI^3UE4fZZr?$K^m_qKij8n{MydO2P}&JU$+ zt3i@Nc8h`Tp1gFKE-Eoz1P#K`H`<4TcJR-olNS`C%-W)vAXI18U+Qi@A*scl_uThL z5W0Us2qJ1)ESx0oi@lk4kJe8GU3nr|a&q2$==Aplye~QC{-HgDja5_Tb@^4$RED`o zY)IL?wngMIKH^9#nMg-VBtg8{>`e2Rh5TL~;};~Uo2NoS z@%fj - + BizGaze Connect + + + + + + + +