From 1fe67135917c763351a3e3e75379a5a708c4027a Mon Sep 17 00:00:00 2001 From: afterlifepro Date: Tue, 30 Sep 2025 23:59:57 +0100 Subject: [PATCH] appview/state,appview/pages/templates: add installable pwa support for tangled Signed-off-by: afterlifepro --- appview/pages/templates/layouts/base.html | 3 +++ .../pages/templates/user/completeSignup.html | 1 + appview/pages/templates/user/login.html | 1 + appview/pages/templates/user/signup.html | 1 + appview/state/router.go | 1 + appview/state/state.go | 23 +++++++++++++++++++ 6 files changed, 30 insertions(+) diff --git a/appview/pages/templates/layouts/base.html b/appview/pages/templates/layouts/base.html index 4fc18a81..4fe948f5 100644 --- a/appview/pages/templates/layouts/base.html +++ b/appview/pages/templates/layouts/base.html @@ -14,6 +14,9 @@ + + + diff --git a/appview/pages/templates/user/completeSignup.html b/appview/pages/templates/user/completeSignup.html index 542731dc..1f0e9744 100644 --- a/appview/pages/templates/user/completeSignup.html +++ b/appview/pages/templates/user/completeSignup.html @@ -20,6 +20,7 @@ content="complete your signup for tangled" /> + + login · tangled diff --git a/appview/pages/templates/user/signup.html b/appview/pages/templates/user/signup.html index 1edbf20b..dd4a8d73 100644 --- a/appview/pages/templates/user/signup.html +++ b/appview/pages/templates/user/signup.html @@ -8,6 +8,7 @@ + sign up · tangled diff --git a/appview/state/router.go b/appview/state/router.go index 3165f433..58c4a586 100644 --- a/appview/state/router.go +++ b/appview/state/router.go @@ -37,6 +37,7 @@ func (s *State) Router() http.Handler { router.Use(middleware.TryRefreshSession()) router.Get("/favicon.svg", s.Favicon) router.Get("/favicon.ico", s.Favicon) + router.Get("/pwa-manifest.json", s.PWAManifest) userRouter := s.UserRouter(&middleware) standardRouter := s.StandardRouter(&middleware) diff --git a/appview/state/state.go b/appview/state/state.go index 7fea71c9..cc0625af 100644 --- a/appview/state/state.go +++ b/appview/state/state.go @@ -198,6 +198,29 @@ func (s *State) Favicon(w http.ResponseWriter, r *http.Request) { s.pages.Favicon(w) } +// https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps/Manifest +const manifestJson = `{ + "name": "tangled", + "description": "tightly-knit social coding.", + "icons": [ + { + "src": "/favicon.svg", + "sizes": "144x144" + } + ], + "start_url": "/", + "id": "org.tangled", + + "display": "standalone", + "background_color": "#111827", + "theme_color": "#111827" +}` + +func (p *State) PWAManifest(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + w.Write([]byte(manifestJson)) +} + func (s *State) TermsOfService(w http.ResponseWriter, r *http.Request) { user := s.oauth.GetUser(r) s.pages.TermsOfService(w, pages.TermsOfServiceParams{ -- 2.43.0 From 64c65aaa2d706f38337298849bec8fcf85dd6cec Mon Sep 17 00:00:00 2001 From: afterlifepro Date: Fri, 3 Oct 2025 16:06:59 +0100 Subject: [PATCH] appview/pages: add png icons to pwa manifest this is required since firefox apparently doesn't support png icons (in my testing) flake.nix change just copies the files into the static directory since its untracked. Signed-off-by: afterlifepro --- appview/pages/pwa-icons/pwa-144.png | Bin 0 -> 3121 bytes appview/pages/pwa-icons/pwa-192.png | Bin 0 -> 4197 bytes appview/pages/pwa-icons/pwa-48.png | Bin 0 -> 1078 bytes appview/pages/pwa-icons/pwa-512.png | Bin 0 -> 16150 bytes appview/pages/pwa-icons/pwa-72.png | Bin 0 -> 1592 bytes appview/pages/pwa-icons/pwa-96.png | Bin 0 -> 2069 bytes appview/state/state.go | 32 ++++++++++++++++++++++++++++ flake.nix | 2 ++ 8 files changed, 34 insertions(+) create mode 100644 appview/pages/pwa-icons/pwa-144.png create mode 100644 appview/pages/pwa-icons/pwa-192.png create mode 100644 appview/pages/pwa-icons/pwa-48.png create mode 100644 appview/pages/pwa-icons/pwa-512.png create mode 100644 appview/pages/pwa-icons/pwa-72.png create mode 100644 appview/pages/pwa-icons/pwa-96.png diff --git a/appview/pages/pwa-icons/pwa-144.png b/appview/pages/pwa-icons/pwa-144.png new file mode 100644 index 0000000000000000000000000000000000000000..accbb9d3f6124b3ddd1407c103615408df87f6f6 GIT binary patch literal 3121 zcmV-149@e3P)c=dyp-hD;!Ghk+dVgLH`1E6 zqy=OyDjd^)cm9;qYe)6T=Av_R^_foml?dSc|1+OwXTHxZ2_YE)aq|I(HK(RWb2VdM zywqkpnC;HofNvA`Lo)*Lgtj_k?D=#3A)(hMUO?tz!C7s4IX2|{TCku-omBIlPZY-2 zSwc>YHTvCr{s)SPNCC06fzMG;;{*7h>!g;{be(_jxj&P=V10wnc^_Lu;snGNXHVgp zjm&J7*&rUA7s8p`JVqwEh{Onp9b!EBv2Gr2MoH-rRYW2LWWGFNDynhPFU4yXjj4*ZNoACkZAX3<8q&wnCDHutGru#3R}tNC{0r z%^ z`aHN70dY!3LE3al;1Zn}U%AxI1k_0ab3N5Xu?MlYgO39{5fG1gaAIFI@*vwG-QEFS}%W7^ZhUk z^B;@jd^Z>Mn&T&x+5UUx{a^UJ1*PRzw$smh=b60{5IfFmwLTCJW-2`JpkhtuZ~V}4 z3jDy`-7CIsr=?-wfMS^7uH%fBT$2bcLbp7hWCrJ%^;w{`4v?a`DcT#!#iVkYFQUKs zIEU^Z`Qp}74gjBmtE7FVbm*OD_Ci3NI)tflL(S8k)9Zj|O^pS36&PbNU2$QlcN5O@ zNR4=`=ba}gBFrHwLmFO{QKDHB`g|MHv8{bL?tyMJoSxWy(*hg>w)uDJZmMD zhZYanss!}iRVfp0l8W~CP;<+vaT!t(5PYGlt_407&>KpFCu*#PQ;X0gRAqPw*W8rv zl+Lx!sZ)phC?GbaDFhBbhAf~Ih>Fq?5OlI{f9YDF6h_-`#-gGLQ&T#;5PDZY8Oi2$ zrQ&IuF-nE5AC!uK;4H5-KGl+>A0(p8?->xdORaafc8*H(^M?b(O>Qg zNaBb8<~n#M6?{+QTVS463InaZ76?s+q`|%8faO*|c!EdwQwc1-5D=UqNmgjLk*4dE zf|^1Ik{;$kr20TlYwfb1gR=zS52etQi4{;u8-|;*g6tCBf*`R8+pP6Dp`rw=P**@w z{Ed=Z>Omiy8y`wQYJJXAQ~VfRZ!fu5Kx~CV>gCX`v&{ zAqF`2ztA=aRs3RB0gFXR^@s_e^eZ)yNt;}icPMr_*O}%eHcQ$TKI3r!KF@A$M(E;M z8QjIkQvol1X~a6C#**Dkc{A6qhSkYwLvZa%pH0}YdhOgDt)}&`>26=7q6xQ9ln+>m_YJr=>`z3xj2vu z0ZFK)1uJ+UA+YZvxoLglsu{Bq5I0{L#Rn!?L{E&n-7dxnedDAVv$a4{%I`{;^3qZg z$&O7iA_OGGOlK1OAkGkwG!1zSCl8&ifFxCoc(DjbXt+5~W$`$0X`7D))?$GGp8O~R zV!sFCNulZLl9T1c2B}3hmyn%X>33G?m2D3 zi-@?{Drg;8rNgXMKxkh7!eHgti1%DpnvBjlwl4wJKIieMm5(*5}Meq zOyXd(vx_)TMQVjoCVDzYMNJo3%32P}JmLz7<3Sarlgg?5!;@`<-qlbBqPzvE6-o{3 znJli#yBtzl>s&cf+aAE>U}|fHG_aTkPZsrxjyMw#`$8CW{7Om+R4xwUG@XN2*F*k| zI@I!UGK0l=K9CX7j&pD{xG0w|V#>P=kW=HJr6{83+JV$WXzyu#wBOGOUIfJcP(h7| zQtH~jD0geVL(Cb4xSx!y2QDW{8vI+7bv(7!skgHhx;>O1`ry#R3_~u;m z(~Rz;lqLa5_GcYRUSKApbp4?(zG?;poz}yvAJ)`ZqnI}Xx!fqkP|w&0dDM8ni7TrFi-Vh8xpE*`fbB#@sY5pJht_#_O>_aZaMRW< zwvtgJrh?`-7g)Zire<}V19^gnY;c~6Qmjw`DOUU+b6Ajp1Kj8k00000 LNkvXXu0mjf?m^K7 literal 0 HcmV?d00001 diff --git a/appview/pages/pwa-icons/pwa-192.png b/appview/pages/pwa-icons/pwa-192.png new file mode 100644 index 0000000000000000000000000000000000000000..a85f3a78bfd9e02a76f0645e9625e22167745a60 GIT binary patch literal 4197 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 literal 0 HcmV?d00001 diff --git a/appview/pages/pwa-icons/pwa-512.png b/appview/pages/pwa-icons/pwa-512.png new file mode 100644 index 0000000000000000000000000000000000000000..99db5cdd1e30399711bcf1640249e2a118518745 GIT binary patch literal 16150 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 qC

Xnkt$&S@dWKIuzarvfvNFoKCV;|3lCK0000ppm%DnyeQ~b1 zKqf{_hYyVMnz{vF6p|58SSy(VAc}5c%@;`skO{Y<GZ{#*f3Q6LWiRC1KkLfXr7kBL#Mn z@QwiSI9I1&ly z8x82ZPaP(uQMBBC-0a=15E4L|t9VNRn6N8!D7;w_U`4Ez0(va| z@g~H8B~fyz!UY>DO8{^o^{z)iNjnc3U+0Xs^Z`T^cR+~2k5mrp&Ta_M1uLIS<6FS< zlq7&8)bX)&boBKE8y{##s8ew&O2C7yeoYJwydVWw{N}Q0y<+(0@fibYXU?KgLU!)r9n-53K2so+hP-qdC}()`<9@ByQ%B_4p>s2 zHNmrOK7T_1qPduPxb4m(D@n3}ZDc@3=OCcA-}EiSDyckFBYH`-gK%WzP|cr>BgWtz z0V4k(ib8k2OwrmIf;K~$@4|h0O%dXM)pW$0FQg-;EV9=WzttARnJamKqa`6B?zWlY zcN*h_1nBZUOLJ${4Wlg7p}t3WLOX8zaL^ixa}mr*Qsg!1lJfEe^6Ph4I1jhpA z?VX!ioXpWOCoHLJFqi0wFWZ7qt;lOl(?)Ed!nKPB(Agg#3#$v+0Wzc^;o*Nu6qq^R zN73uP+I0XJ?w4A$iPx)j^h@i&YOsQ?Tt#b$LqP;Nbfgd<;Q@C3|#|xTYr5=KuzhPs0?iD<~tDy$i(}F!sY)u z;>{Jl1mp-`)RY;rvR50o@!my5`T&}pS9#6^$PmsEJ)PC_WbJV-fiu+S;|K8>0lBs< zotiMcOy%b|w{91_#E=gGIeV(63`RUrnM?0?)0ByToDtM!Rh$g6hajh0aT~nm$*G(j zt?W$;u^4%u^Qq6`()F+oMfrh=vWYE38Xqy9ipGN`$N$B31SrZ6jDp*klWDESANybt z<(kozfKuTl#s_ib8`3hdQ(d%cMptX-V`A^nE>zT=5q;@m(AxL2jHWUPZ$eRLuUS$T zVX;zCnUDv*XCgMx@K7-;njV~0b{_&tZ)5{BS;M*DD2&CEYepXeS}IS#!NZ3Dh=P)P ziH`!l1i1Qzj~&it6(5%*c8}x;VLwDHT{DI_WM%?}v2@MoMSw($;n#$wbga$P@Q}+N zU{F)1d(U%0KN_FR-UP^8Fv_OpJ-~~vMK@?AEW2r7G#m4G18^uR%n!MCv4o)Z{X(!Q zV&n+wOQ|2Sb}By}@zi%>*ASv?K@z+RowtCIU~LIT9$6c&h8$d{sxabVp#%Pr@` zjF7*J9_M{Uo!U31ndCAws33_oRQ8s^4&PAx{<1zm^{xBVJ5dTMse23(zQ(vxlbNH% z2dZUWs3{E**f6*l>RlTrAeJNn8!w{#5Xt=k;zTh-R1|jl$am@v^mE?qCnEuMqW%&j zT&4&j$mWm{B9KhXC5XVauW``RTgiVPy2D<+cP8gw=Zc2&3O^r05s#QnMxpv@F&s9O zZZxb;eo1}o+EiVV(U5uLOb%wPC}Q6;y`FK}Qeqq|0R}QjF0B0lT0T