From 0b2c5ca4c97bbb541611eb714588e5de686eef0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mats=20T=C3=B6rnberg?= Date: Tue, 22 Sep 2026 13:55:06 +0200 Subject: [PATCH] pwa --- public/index.html | 29 ++++++++++++++------ public/static/favicon.ico | Bin 0 -> 5430 bytes public/static/icons/apple-touch-icon.png | Bin 0 -> 5638 bytes public/static/icons/icon-192.png | Bin 0 -> 6064 bytes public/static/icons/icon-512.png | Bin 0 -> 23378 bytes public/static/icons/icon.svg | 23 ++++++++++++++++ public/static/icons/maskable-192.png | Bin 0 -> 6064 bytes public/static/icons/maskable-512.png | Bin 0 -> 23378 bytes public/static/manifest.webmanifest | 17 ++++++++++++ public/static/sw.js | 33 +++++++++++++++++++++++ public/style.css | 19 +++---------- server.js | 1 + vite.config.mjs | 1 + 13 files changed, 99 insertions(+), 24 deletions(-) create mode 100644 public/static/favicon.ico create mode 100644 public/static/icons/apple-touch-icon.png create mode 100644 public/static/icons/icon-192.png create mode 100644 public/static/icons/icon-512.png create mode 100644 public/static/icons/icon.svg create mode 100644 public/static/icons/maskable-192.png create mode 100644 public/static/icons/maskable-512.png create mode 100644 public/static/manifest.webmanifest create mode 100644 public/static/sw.js diff --git a/public/index.html b/public/index.html index 42da382..4751cfb 100644 --- a/public/index.html +++ b/public/index.html @@ -5,6 +5,15 @@ gibbz voice — POC + + + + + + + + + + diff --git a/public/static/favicon.ico b/public/static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..1be6013ee38c65a5f9100a6d0c4c08b20b47c5b5 GIT binary patch literal 5430 zcmc&&S#J|p6rNW60DeNAs{RZfY1vAFEMyO4B^#sx(m()}LR+c``qWk;Y*9#AT3UGE zwMc|CPznvTW5;&9jP3Dwi9ASH zxKW~ek<_$7l0K3osi;VM9;W$zn){gMXh`4C=IJI$G;h3|`^qp`R|;Eg2_|ZaVX5AO z|EhLjyz+DWTd@<*%0I(DWjpY9>2^FR*@m&=t@vxtr+Bpc6O8QI4A=g>D8z@mzPunG zo`wn(;=|Wih1Go6372|f5TRcNVW}%wGaqtOHH9qP#+x9{4 zBY5l!D5t)JOqk!y&kJ*RwZL<{8?NrQv>J=F?}yQc+)^iUng}UKL?fa;QaLr&X|$sr ztNNgI3G^I?JVdR7LJ~Pi0k!>Pl zJ`xubkKy9HIf!SNYwW}|ypA^F8|EA9a}FH@RR4wA2WllnFz0_^QxeF4`ku(p_HCGK=;JtSr3}wqUbjiZn&&+5oJy zF3#RVP-vV>JqV4J0fVoz0n>ln2J@8i!#T`79>weF7}S9uDIeu+h5%~Jg zz)HPSrFF59*2#uJIZ&(VyfrWc`nnOlc2UG<91G*m5Wjy;6MKjmV90jpX))n z{4<;!KZ|})TQ!}!76w1*xS6}Z!b|%@rTi~WSm2}DS`NraT}yr$ZmPot>kIh%&%#Dp zhWCY?GajJ9j%gj_J_xqAM|=-c<78+(+uhT$_tJ{Uw@-n)Z1*Cug9zB(#Kyq+%xeLdu> yqxg(uCWbi0HxmP&@yx_9!|_eTz-Lr5G0akYGcoWv-AoK~9N$C?hQ9;e`{VzWT3qD- literal 0 HcmV?d00001 diff --git a/public/static/icons/apple-touch-icon.png b/public/static/icons/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..646622642018f14aa7689d1fe032e8d52da89ec0 GIT binary patch literal 5638 zcmX|F2{@GB_aA#{lx%q|*~XIH*s_y--}hzEh)~E9A%r0&%-FJI>>_2&zE4d?B3Uxl z$Wr#P7UDm?zvuZs@AJOrzUQ8M&b{}&=RN0qo|~EI($TWffAbhhGvE#x zUY(+N3o*fG6y52xZ%5^{QPlBHEg_B+FOosGXep?kHEOSaxQ}l0ilGelfoMkyyk`6q zK-mq~&l1ItBxmp^Eow&m(%9`+n&aF)ET23Y+}JRO@Oyw+jLiY9LO>Ce+;2m_|SJK~532F;QdQJWXU?S%{>-ABauYwH8hzq)~Qs+pncv=gr| zSxHQQ8dP}A*<%GcV4Wt8v6l^*@Fvjk1B+;~XwlmcAkM@CLsov(N*}>t9N~VhXr++* zV=XO`+Evl4>=h5bhf<2p;y5=yFFKS(=-~F%1PFyCm3t&RFG|D617AULCF=~V(Z5q( zzcd;{WeEMigDn_9o6@j|;^~vXecYLFJteGsW-uchLsslq_yaRw0EJ`RXpQNYc``$& z4X^37sA9KyGU2uR(R!S;nh2%Liy^TLOHcGXFm66^W7j6ViFAKm4k`4lvFuh3^R= zj1r(~RO3TF%CiLkqaES4{@}Kd9@!&py2+#*5x@j|>y;2*NVA4M62YJHg$JKja``KL z4oN8lP)~PzqQ?)Q!LDh&DXQ5lLPb3EpNDpGH&Ruz;c0B-Zg|(tdciB6%DAek{P#9D zfiqT%Vt?G->M8@MFd8h3$PmgWvc9Q8BMtZ|QhE4k|C5B2Ji`}Wtb9bw%)sedB}5ag z@qBqTjkF_PQZLOe>|rK5srY*A913}-foNv-+Rp{n)}*aSLPk3uUMSb%i+z8=(?>+Z zLF$R2MpjTOW|nd9gJ3ppR!)(WvLLHn>uMt^5fm82#E_3X@F_Vt6leM=tOwY zbyc@cZHFafaj5!7=Mz;~)~M|6sLt*v2N~!~GF+yqj`Q2YaWza1*f2}}?I znP%{>?3E$~U{L5H3Nol)@TAd32ns@ttTLP8>dT5&aFT=iHuAbz;+LOmBAQVSlu*!* zg7@Yx6J{F31+D@v`>mJYta}-R$)cx~@?1CKz%cNAZIYSi!YhDRv+($3YYu2X>o)^I z?0lQTWrjHLqb6Sb%aXz*2-Y#vnI7KQq%~2K{F-)upQTNF+KNUtQv$y+07!p3bJUf#HMx0^Plemuy>Zdc9}4SJ3J&)y>@xlH35Vb+tJ> z&~(fXgp!94_Ox_(i<;)wLq3PN!=j36x@$>7(Q{p=%X7-X0hZy`^$tICz!T!(1^wzE z$L-|GD%rxx=f8t~Pd?ws?{86QEF`44;fd+L@r^04F`3CGg9t!h_?Xx?Huk>8 zVpDjsc4IV2=^e7jAYNmY*%{W#nkxZ@)XO}}$zafABM&V+(bx~>w)BMf4n-Dt6hxP5 z1pAGpxdEb5oO;v3k4;gn*jk7~=9YSgu+Me!b3P4}vqd039!zy5RQdRfZ58}JQZrI& zpsW#ZPPlH0Je9HjI~a=(ep^ShBK~M+l-HrV+b@W#K3MXDela#@&ZCf#*YQSAeJCB` z0p2BKC_zE4o4J>Sw92zRy#8)g(+fr02}bFRQPM*#_GP}M`;0{ z|6chEEy3T#yy@LM-*j9w_st4S=ugxcKWTmv;sLExA@=jGnRI+vRcy$hb@=|lHQvAbEf4+ZgLySLP0fknrn!Mmxw8<9ibQ|4OS0 z?aFS~2RattFJmt;I8h%3BE4R+K3+6`?-mxP31yW4EyaLAOGXwQS7ud8WfR_0kwq*J z9oVT>@2ti<$=SA*kdEV+)$fRGshSXN^UQyy8nGo+9&1w@BnT+VQa6_>bD(3|Gx!jgfIQL!+=AV0`*B1=O{Rhuw<>F$elyA#8 zi_*^dT3y2KyM!@05 z41cW3md!ct%VH5;@Qq)H?6DAa?Gl$<8}EL8J^z$n2p{m*P>a^ zlF38aS~L^9Jku>pjOykPu~VTWC{jw^Rwf26NZR%3)!E}d=+pIMWDvB-7WmAfxivKL)S@5vb^euYjKAvh^_tuL;Q(N#iA((kCaV+hq)>-wFB^ zC({2@<#eK#X;6PILP?eaD7`JEDg)e;rC$~@WR;_V!T(Sow^e~cb?f}vS?L@LdZ4@# z_K=2M^@=2y4$XWXM;C72KRdl>p|55>uTU7NP{aCd=9jr))$E@P+z<6~x|?YPXFiJX zY!xmztHxWNyYI=n?+g31h`dxtxI-Tp=~1mzTz+{G?FP2c-rqgasVCSQIX?RPt@$i? z5~;#Rn@DK7I%lwr2sNUM&-c)rZ@w=>d*V2nk#=JZM+Iag>~E#J8DSz6p`GL#?`^!( z8K9jTEuvMjVh`(ywlr62I-YE@{Czo)<#M*=f8Nswld@TPmthd}+uC}iSblw4l;y=Y z;<%!LqTBo^bw-##fiQL3( zImy4?;Xo{%E!BlH|Ll04?sVeaT7sHo!_x;~n7%~jkI}7}-XjaHo5s=v=;{q`EbU@` zDlua##oa`wT0r_-Kw?*&IzWI`5dKT?RlHvzacwbW<{dJH*;YP$KBu^6;$(4~%j6`m z*8A}T*X;-F*So`ffhr+te-o zI2k-I9$v9VqI{Kp+@6*sd?BD6O`1#PW@ZR|7k}Iluf=S-xt8K4HBqc`` zZMOJoInh${g{3YZEVSdWi4-nRFxB#$P6bPQI;ULAxZ=L&0Z^;)L;zb;F18*g_&=wj zCf~8KFdDgo`=)6|6>z({^f3G`%>%!3LD&q;bc->Ej}*?WqXN#|*QRRb^dERvNN@lC zB89KzfJ|swTrm|6q>8q6jB=|d|{{p?o0t?_n9gjPAq z^>^p`^VvyhTMVS6Q|#O#qm9T4Y(#5Q=882-(&<-8sm!5~zE5d{85|F`bvs4q#4vH|IMh zS(Cr163#<6r(&-`Zq3h<;`TGZcS#VtUx1=1;%y0N=wSzjE`oh+mfPk>Ib9pkYxmDy zm zdD^UOm7K9G@vAlVoP;r#_ry8jnYSsQTi;dsMfpiGSj#=+hDz}Kna8A3quja{KGucj zzoCc?yNcfl*K6g*CJJ@g^sk!9tVB-Jea4PomVH4d|EKCx&-m}3g3?OO;g$%7XBL;2 z_kMA8$)3){c(iXFnOY+!qf-t;6MzSbA_@_{yC>(WPC~_ARvP?wQ;{N{OpFfMRmk#? z@b?Y8Kb^j;>@T2{6X0eyEnNC*n?9mF9av8^CT@_=J}caxZ=x&8Cd#KIC$rJ zQQKzy{DU6VJoMVCGqMfVHNcC@BKqA7@&NQqx^?;OM{4#vm`knaj7c14Ei0`w64*EaQKP+k3`47I2P2pNj857$p3&y%;_ zjH*v@0CLR5od(bLS4;M0h^Jo*rn2t!jeMKNgl}V+Fz~b*;vy0Z3R;P13h-c^N4B*o zJo){ofSFQJ8n7wERgPL#n0V&0^Ih9AdAKS0qa@!U)bWI77n6^V@c$sm_ZoKOi}$j- zUPQ`-D~3H<_$hK!K5=83O&VnzU`QRz(L?EOV43xZ|auv6;f`vF;!67|224@SgBut-{}UW zNkFSND_7edS^cz?*UtB^2}8NTz+Td!RD;RLtQEU;Z{ETWVD~RZQ!eHv_`;ImFg`4L z?^SCZQ|FYsc##+g3hG73JvJUPVds=6*vwtb2lF21n?mWyJFSj)ymF`1yu^ZL#i2}8 zxomuI#YQHwye#idD(q9Om{PNt`c*Io@AslI0?DPj;h`g|GibN63W5DpQ)89rFop2r znFnv0i-!M{%scKbl}tPrL39u&CVkYpo;vnRRz2aj?f%%Xsj4WY@Gv+oBHgWZI82aY zeqpX@Xj0R^RenA!=C-M4K?z<5%64}YQ8lfNkP>z27fK2^w5_Ckg)wn%%O{m&tPPn| z8VLSbm9TXWrpLG;S6cUfD(#%ZmwE|9gM=Y4Zkn7M%cVIW0eCd5WP@EJ99ZGCKj=}& zo<%JIifIp18|P3cd6ychzi^0DXxCEJSveEoFKdY8BPZZPZTeT>@0!ALKyMH?Z1W=z zc9#T4Og^)#Vo3n6d*H;J3s&l}qlYd^1s_!Dy$m+_KJqhttI|oE zlT$$zf7^9TIl8Js!e@KECJ1_Z^IH;sNgdDbx9_>$wVF`_{l^nM+w6oMnN^-1}ruB+;HJN1v(LHU1Buu;k1lYIT zjX!K z%!`ic#Jw^49klXD=K3@6BfJZG;k)3aDbKH47Xn@M^f_P&(gGGv?x_1ieUDlp*rRwo zs1XURBVj@&(6rUnv_M9J=hwSsethr4t%n@q8>RDQ!m~Rev11uMEJ7yKO2RRH4$Zobg$P7Y)BAgKS*-?z$wo8Xv! z5-^nw?^mTDASH{3Jup0fyq@Jl6px+IJR}&-j?||ImF&&hxB#1`hDkgto=q?Uqj^Yr zck1AJzRXjmbu2BZa!FdAn9bPnxyxvFCYg+`PZ&2e;WI31)i+@H?se}g-v1y&`d_ru zo_|zI(Ma`pK4Sl+&`)_B#t^{O)Po;bx~7LFYoa~l;@M02zITsPhy?6{^tDa2-raG1 F_J6mFp*{cr literal 0 HcmV?d00001 diff --git a/public/static/icons/icon-192.png b/public/static/icons/icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..0337f017d64faba321d53a859ddf9e233f5368d9 GIT binary patch literal 6064 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 literal 0 HcmV?d00001 diff --git a/public/static/icons/icon-512.png b/public/static/icons/icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..15c6d000ba0b78c9ee4cb49ebc9211ca5c34bd1e GIT binary patch literal 23378 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 literal 0 HcmV?d00001 diff --git a/public/static/icons/icon.svg b/public/static/icons/icon.svg new file mode 100644 index 0000000..2abf119 --- /dev/null +++ b/public/static/icons/icon.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/static/icons/maskable-192.png b/public/static/icons/maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..0337f017d64faba321d53a859ddf9e233f5368d9 GIT binary patch literal 6064 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 literal 0 HcmV?d00001 diff --git a/public/static/icons/maskable-512.png b/public/static/icons/maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..15c6d000ba0b78c9ee4cb49ebc9211ca5c34bd1e GIT binary patch literal 23378 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 literal 0 HcmV?d00001 diff --git a/public/static/manifest.webmanifest b/public/static/manifest.webmanifest new file mode 100644 index 0000000..2c3f746 --- /dev/null +++ b/public/static/manifest.webmanifest @@ -0,0 +1,17 @@ +{ + "name": "gibbz voice", + "short_name": "gibbz", + "description": "Discord-style voice chat with screen sharing and spatial audio", + "start_url": "/", + "scope": "/", + "display": "standalone", + "background_color": "#1e1f22", + "theme_color": "#1e1f22", + "orientation": "any", + "icons": [ + { "src": "/icons/icon-192.png", "sizes": "192x192", "type": "image/png", "purpose": "any" }, + { "src": "/icons/icon-512.png", "sizes": "512x512", "type": "image/png", "purpose": "any" }, + { "src": "/icons/maskable-192.png", "sizes": "192x192", "type": "image/png", "purpose": "maskable" }, + { "src": "/icons/maskable-512.png", "sizes": "512x512", "type": "image/png", "purpose": "maskable" } + ] +} diff --git a/public/static/sw.js b/public/static/sw.js new file mode 100644 index 0000000..98c76b2 --- /dev/null +++ b/public/static/sw.js @@ -0,0 +1,33 @@ +const CACHE = 'gibbz-shell-v1'; +const SHELL = ['/', '/index.html', '/style.css', '/app.js', '/manifest.webmanifest']; + +self.addEventListener('install', (event) => { + event.waitUntil(caches.open(CACHE).then((cache) => cache.addAll(SHELL))); + self.skipWaiting(); +}); + +self.addEventListener('activate', (event) => { + event.waitUntil( + caches.keys().then((keys) => Promise.all(keys.filter((k) => k !== CACHE).map((k) => caches.delete(k)))) + ); + self.clients.claim(); +}); + +// Never touch the signaling socket or live API data — only cache the static +// app shell so the UI can still load (offline/flaky network), not room state. +self.addEventListener('fetch', (event) => { + const { request } = event; + const url = new URL(request.url); + if (request.method !== 'GET' || url.origin !== self.location.origin) return; + if (url.pathname.startsWith('/api/') || url.pathname === '/ws') return; + + event.respondWith( + fetch(request) + .then((response) => { + const copy = response.clone(); + caches.open(CACHE).then((cache) => cache.put(request, copy)); + return response; + }) + .catch(() => caches.match(request).then((cached) => cached || caches.match('/index.html'))) + ); +}); diff --git a/public/style.css b/public/style.css index a538707..0e5c805 100644 --- a/public/style.css +++ b/public/style.css @@ -1,6 +1,6 @@ /* Discord-ish dark theme (POC) */ :root { - --bg-0: #1e1f22; /* rail */ + --bg-0: #1e1f22; /* user panel / topbar */ --bg-1: #2b2d31; /* sidebar */ --bg-2: #313338; /* main */ --bg-3: #383a40; /* hover */ @@ -24,19 +24,6 @@ body { } #app { display: flex; height: 100vh; } -/* rail */ -#rail { - width: 68px; background: var(--bg-0); padding: 12px 0; - display: flex; flex-direction: column; align-items: center; gap: 8px; flex-shrink: 0; -} -.rail-icon { - width: 44px; height: 44px; border-radius: 50%; background: var(--bg-3); - display: grid; place-items: center; font-weight: 700; color: var(--text-1); - cursor: pointer; transition: border-radius .15s, background .15s; -} -.rail-icon:hover, .rail-icon.home { border-radius: 16px; background: var(--brand); color: #fff; } -.rail-sep { width: 28px; height: 2px; background: var(--bg-3); border-radius: 1px; } - /* sidebar */ #sidebar { width: 250px; background: var(--bg-1); display: flex; flex-direction: column; flex-shrink: 0; @@ -45,7 +32,9 @@ body { #server-name { padding: 14px 16px; font-weight: 700; font-size: 15px; border-bottom: 1px solid rgba(0,0,0,.25); box-shadow: 0 1px 0 rgba(0,0,0,.06); + display: flex; align-items: center; gap: 8px; } +#server-logo, #mobile-logo { border-radius: 6px; flex-shrink: 0; } .poc-tag { font-size: 10px; background: var(--yellow); color: #000; border-radius: 4px; padding: 1px 5px; vertical-align: 2px; margin-left: 6px; font-weight: 800; @@ -422,13 +411,11 @@ code { font-family: ui-monospace, monospace; font-size: 12px; } /* --------------------------------------------------------------------------- mobile layout - - rail is dropped (decorative only in this POC) - sidebar becomes an off-canvas drawer opened from #mobile-topbar - mic/deafen/share get an always-visible mirror bar pinned to the bottom --------------------------------------------------------------------------- */ @media (max-width: 860px) { #app { padding-top: 48px; } /* room for the fixed topbar */ - #rail { display: none; } #mobile-topbar { display: flex; align-items: center; gap: 10px; diff --git a/server.js b/server.js index 22a824a..2575cce 100644 --- a/server.js +++ b/server.js @@ -96,6 +96,7 @@ const MIME = { '.js': 'text/javascript; charset=utf-8', '.css': 'text/css; charset=utf-8', '.json': 'application/json', + '.webmanifest': 'application/manifest+json', '.svg': 'image/svg+xml', '.png': 'image/png', '.ico': 'image/x-icon', diff --git a/vite.config.mjs b/vite.config.mjs index 242d2c2..2d73226 100644 --- a/vite.config.mjs +++ b/vite.config.mjs @@ -4,6 +4,7 @@ import path from 'path'; export default defineConfig({ root: 'public', + publicDir: 'static', plugins: [ nodePolyfills({ include: ['buffer', 'crypto', 'events', 'stream', 'util'],