From 7725557b34d9ff85b1aa94cec8bfa5cfbcc5454b Mon Sep 17 00:00:00 2001 From: Anthony Ettinger Date: Tue, 6 Oct 2026 08:36:00 +0000 Subject: [PATCH] Use logo.svg in the header and footer; outlined favicon + full icon set - Header and footer show logo.svg (the outlined Geist Black wordmark) instead of styled text. - favicon.svg was live text in 'Arial Black'; it is now the c0 mark as outlines on the orange tile. From it, cli-tools 'favicon' generated favicon.ico (app/), favicon-16/32, apple-touch-icon (180), icon-192/512, and maskable-192/512 from a separate full-bleed artwork. - manifest icons pointed at /icon-192.png and /icon-512.png, which did not exist (404); they do now, with any/maskable purposes. Co-Authored-By: Claude Opus 5.5 --- apps/web/app/favicon.ico | Bin 25931 -> 838 bytes apps/web/app/layout.tsx | 9 ++++++++- apps/web/app/manifest.ts | 9 +++++++-- apps/web/components/Footer.tsx | 5 +++-- apps/web/components/Header.tsx | 3 ++- apps/web/public/apple-touch-icon.png | Bin 0 -> 1683 bytes apps/web/public/favicon-16.png | Bin 0 -> 313 bytes apps/web/public/favicon-32.png | Bin 0 -> 487 bytes apps/web/public/favicon.svg | 5 +---- apps/web/public/icon-192.png | Bin 0 -> 1857 bytes apps/web/public/icon-512.png | Bin 0 -> 4892 bytes apps/web/public/maskable-192.png | Bin 0 -> 938 bytes apps/web/public/maskable-512.png | Bin 0 -> 2280 bytes 13 files changed, 21 insertions(+), 10 deletions(-) create mode 100644 apps/web/public/apple-touch-icon.png create mode 100644 apps/web/public/favicon-16.png create mode 100644 apps/web/public/favicon-32.png create mode 100644 apps/web/public/icon-192.png create mode 100644 apps/web/public/icon-512.png create mode 100644 apps/web/public/maskable-192.png create mode 100644 apps/web/public/maskable-512.png diff --git a/apps/web/app/favicon.ico b/apps/web/app/favicon.ico index 718d6fea4835ec2d246af9800eddb7ffb276240c..c46666b110e57b18b20e9a5a1cad8c37173a1f2f 100644 GIT binary patch literal 838 zcmZQzU}Ruo5D;Jh(h3Zgj0_BF3=9kk3K0HtAU__6I|KaOdAX#xfKt4k9xg#Z8mNOo zfP)!GYUuI@1F5J0pAgp{MWR28#s2^Q|Eod!N3qzCLXjUuVn2#SfygJb@Zasj|9^h{ zv!VJ|yZNtPhd*0eelJe@_u%yJ75P7_RsQUq`0wqb-?PGgmPq`)xas%Yn7>zd{VbLI z_wmKQkI#Q|JeUHsg{vgUFZd_Wg413Br@R^bJbigFfsL>4nJa0`PlBg3pY5besJa-uTtu%<@#l>z|*$ z1-}XYYr1YpP2Ebrx>GC{vM)2d23pPF>FVdQ&MBb@OTZ}rr4_&d=dz^h7?4v63OHcs z0K@BNkti^{KqN5ifCw0xh2p@l`w0p`F-XY%dvW9cuW!HSMEyOp`u7x{KRdhse|-M` z-(O%*0)rJ8j(;y~{8=XbtJm@GvH5=v&;GNu`Oo^wKYROsHR=Dmcl`It!aw^a{k^^i z81CMR{Lg_7-~ojx!@tn;O&`yF77cE>V9nmm3KYi{s*DVfP@OyZW?8cVkIPgxgC)lf zzL}w_e@XT4zVy8R`PwbUmPtEL1^@#H G9?bxbPjm19 literal 25931 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 LrJugUA?W`A8`#=m diff --git a/apps/web/app/layout.tsx b/apps/web/app/layout.tsx index 1c072ba..f0141f4 100644 --- a/apps/web/app/layout.tsx +++ b/apps/web/app/layout.tsx @@ -38,9 +38,16 @@ export const metadata: Metadata = { description: "Find and share the best coupon codes and deals, updated daily by the community.", images: [`${BASE}/opengraph-image`], }, + // The mark as outlines (favicon.svg), PNGs for browsers that want them, and + // the iOS home-screen icon. app/favicon.ico is the Next convention for /favicon.ico. icons: { - icon: "/favicon.svg", + icon: [ + { url: "/favicon.svg", type: "image/svg+xml" }, + { url: "/favicon-32.png", sizes: "32x32", type: "image/png" }, + { url: "/favicon-16.png", sizes: "16x16", type: "image/png" }, + ], shortcut: "/favicon.svg", + apple: [{ url: "/apple-touch-icon.png", sizes: "180x180", type: "image/png" }], }, robots: { index: true, follow: true }, }; diff --git a/apps/web/app/manifest.ts b/apps/web/app/manifest.ts index 036e29c..5f1604c 100644 --- a/apps/web/app/manifest.ts +++ b/apps/web/app/manifest.ts @@ -9,9 +9,14 @@ export default function manifest(): MetadataRoute.Manifest { display: 'standalone', background_color: '#f9fafb', theme_color: '#f97316', + // Generated with cli-tools `favicon` from public/favicon.svg. The maskable + // pair is a separate full-bleed artwork with the mark inside the centre 80%, + // so an Android circle mask never clips it. icons: [ - { src: '/icon-192.png', sizes: '192x192', type: 'image/png' }, - { src: '/icon-512.png', sizes: '512x512', type: 'image/png' }, + { src: '/icon-192.png', sizes: '192x192', type: 'image/png', purpose: 'any' }, + { src: '/icon-512.png', sizes: '512x512', type: 'image/png', purpose: 'any' }, + { src: '/maskable-192.png', sizes: '192x192', type: 'image/png', purpose: 'maskable' }, + { src: '/maskable-512.png', sizes: '512x512', type: 'image/png', purpose: 'maskable' }, ], }; } diff --git a/apps/web/components/Footer.tsx b/apps/web/components/Footer.tsx index 0602dcb..162a191 100644 --- a/apps/web/components/Footer.tsx +++ b/apps/web/components/Footer.tsx @@ -1,3 +1,4 @@ +import Image from 'next/image'; import Link from 'next/link'; export default function Footer() { @@ -6,8 +7,8 @@ export default function Footer() {
- - c0upons + + c0upons

Community-powered coupon codes and deals. Save more with codes shared by real people. diff --git a/apps/web/components/Header.tsx b/apps/web/components/Header.tsx index a50ec5e..368f20e 100644 --- a/apps/web/components/Header.tsx +++ b/apps/web/components/Header.tsx @@ -1,5 +1,6 @@ 'use client'; +import Image from 'next/image'; import Link from 'next/link'; import { useState } from 'react'; import SearchBar from './SearchBar'; @@ -12,7 +13,7 @@ export default function Header() {

- c0upons + c0upons
diff --git a/apps/web/public/apple-touch-icon.png b/apps/web/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..add4b7ad6670a6eba8204e3c090d9308543e0fd8 GIT binary patch literal 1683 zcmV;E25k9>P)75Q=%`EwQcauxY=75Q=%`EnKbauxV;75{P+|8f@eaTfV=7XSbM`h6z<{rmf) zX8Cs<{l=jG_woMm=l$2a`h+w5w1WQW+x)$e{@}~|luZ54ult%;{Ht{Oj6cfUku?AS z01k9gPE!Ec=ZjVIZ>cT($`A_{|ZBY&QLJKJ1hTAb@qqz#$3)P=S{F3c;{pU{&BjpMP+;X!Va=?VT;SfIa5Q%VSnr`LB3;uK$s6Z zW|iy?gUFu_vre4P0d3wg3uW7@*@q*uQjR?;a=0){<)WoNF?;25qBhRoav;d8)R6O$ zSuV$p5Bc0O>t*}uuN_7}oEL>=B;-l0KXx>rcaPcAo)MA#gXg$Vfxet+S>cN<(i!Mh z&h!TQcc{N84K%xaS)be~xV-P`sP25)S!<9Rr;pX2YS#4 zItkums^`#ycBqAxdwAK>gWhg-^q_b2-1N;+GlH^0uh1*>3cW(F&@1$k(3~d;_o+a0 znN~&Qx!)3IaV`?ep_8=u!F`k{koH20*wsmvax0-l=JrXL`_@4>g*zmXunao&T!2*E zB4}Q@Fo_y#pp(pnN+>OXP9hgBp0EO%XD&uOX#up4V{SF1SsuD_u@dp6p=%c})xyw8 zXaMbsWuapeW;f(ZLJQYSf+eA~o+GOAG!3-*h?gt}tsCf~{HyYTXEM}iXkONNP{l62;uB6F29}JYgD91yK!Ava^Ff;514jy8|A_zJG#fX>#v?EjeymF|ck;D|qA# z&7slxaBc9;6SyWpprwa}_WtG-A;P+p4z)CdMo;kmMGy7pX(E1sv&7AGM)<7OB}Pvx zT>8-qT^eQZ_Y6&G3GuY+Adfk@4g_Zy-*jt4U@A!Nw4s?Nd`-1i1J=P^FG_-*`a z+9Ik>6;%nJj%S$UYKk!akf3>C*aq~X4e5b)0kQ@=nv%_zFiC9?iJ{>|8CpW0&6k>{ zT6;@@EBxw3_1I{A8aN3kv|5w^w=Z(^R`b~DmfFQi{qq1fibBJUBBfG$4O|}uWJ|7z z@VlQQmk^phee@&a&CmXTutC?C1jD61b)S*m9$XG>Gsni;%;nH7mS&iK^^u2$8~S}t z+IRu7-4gc`ZRu#1e}?&mw{BmIcBOU6L#;6?*<|(8z#=P8|&# z8R2sr84)qE#I0K+x5VKbUj*3;xL4#7zE;*~jzN`-&3X*VZ$x^l+pOBE%~Ur2|9{|& z>d`*7p8Q;)SLhXbg;33dtrkG~4~qY^+4G zg%!yIMQpT%PT|NsBhp#7s* z>_?%B6KKI{uYgnD4F2-B z4+BLx3p^r=85p>QL70(Y)*K0-V7{k|V@SoV)c$b376Soib-oEs9t*Gkj-Py&!-eVJ z=gBt7lP5LZP!$TAm@-pKt4N`vXhKEyt#|%;?-_Y)nohFjZd;ru^NWM$8bkX5sTUk3 zI^UC-(t5hhehY8>>ThOws^ay}&)75H)%`EnKba~Ak>7Wi@%`EeKca~1h>75H-&`EwTk|Ns8z*#G+W` - - c0 - +c0upons diff --git a/apps/web/public/icon-192.png b/apps/web/public/icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..38a78c9bf9584cc6f3b301606508be1f44e0a68d GIT binary patch literal 1857 zcmV-H2fp};P)OstC`p{A zd3L`P(Kab=S&DX*G`l%NoG#}C1t3X&J2`a!n#Cv>iLi{QLvI548kQw0ZV+*^*=*_OQtscXB51g6;9!lBLI@0VE1260Hyy@f-?dm zXOQ+sV~Z{blsx%^B8CMJfA`5b0w(#_{@)QexkH{nPm}130LmvzbVVTL3VQ%PxwC5m z6Ck-l^uaH*;1ojzh(Ch58v-jgm`?bcJ1!Eq07(IR27Sz-3^Kr*9ZDesqz@H9prwG8 zi9Kg#ch~@T*gE{C#W`$%9JUd9Geh73V%Pw2lz{Gkl0*o&8~_Kv0dN2u00+PUZ~(vr z7SU;JumD)J zrGZQ|P=J0a&7>7U0`R3YmYRhJP_?CnOk-#OqO_A{3=5zt%YQ=fQvh9S4Ny)v9Dsf( z9b^p#05_$RbfEyuZv8KZF$@4&x=I}ez~l^2@(=*j7IaYBrv~p2pwM7a^^YGgI?IEM z>Yo9yvF{n)G5`%V2vc=KU=M(4HIwC!U2hvQS5(=EYyj#n|DuDNDYXP(-TJDbp%zku z$Bp{`Adrj!@d%*I28kq{m84(|Go5O^F91$7CU1F_3$oVOK1!^u@B?6w%)TK!M{(v8 zLo(SK9{`5Q?4x6&*$m);$?DuBNpd5nN8r0gZKaQ>dLLc#rvQd~^rbK1!2qKpOAfJa6 z6Ga^F34l5RbVj+zxX5iKu?&zq>%|o%Ky79OE4d||GuQMsaJL zp;Aiw@zpxxu8ypCT=3Qh#~XuD^eJu1bKZc=s3yFx3_o=Zl8^RT!Hhv$iykTN7hlsrj zIOGE@Gu4((;frf?tFbt5F&VEFtAgOsyaXj7J-@eHIro1;TWjVjFD=)OPig7)szu_X<iMJCM0mjBZGI{?vH=|PQsRDd^LkDyQsS2SZEhiHiB zLqMbH1Xxsy7PK)whK0Q!!{R25x2yWa;n`>qntyT-4h!u(TJ?HI$&N=6aiuy4u*|(- z`ER-7VNfbwGb}5|7Ke#HmiP3%XE(B>oQE4(A= z==iF^0dN2u00+PUZ~z)!1SR_h-f37o$k1xLNJOU~Fj|PMPY%}-|XM_KAIrxvq zga3R#{0kJoUtt0M5)ts%xWKB1lchipX59Szvi`a=u1(a?JvoNO5M{{dcEuIR`NeNq##;j#AvRombz} v>{dkEq`2I(JWb=|XZL^8G|%oAedm7xb=@`4(8y|B00000NkvXXu0mjfv8-rq literal 0 HcmV?d00001 diff --git a/apps/web/public/icon-512.png b/apps/web/public/icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..7821ad1fde51d494d1f9a14a313537e4af0c01c6 GIT binary patch literal 4892 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 HoR0n<7u2w% literal 0 HcmV?d00001 diff --git a/apps/web/public/maskable-192.png b/apps/web/public/maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..1a21d285981e78ee835b98002a95eb2f3aa5a69d GIT binary patch literal 938 zcmeAS@N?(olHy`uVBq!ia0vp^2SAvE8Azrw%`pX11_3@Hu0M;#{{R2~dsg_*D#d@d z4*q-l@K>|J|KC6V?CSZ|=k)j7x_?hD{$7^#_welhU*G*%Un&1#Wd%?#XMsm#F#`j) zFbFd;%$g&?z`(5F>EaktaqI1@my=d22((TO{r0{7wxQ|F*^-$8L8_B>J^w8!?3}EB zeA#qXpb>aLipI2Ux-Ghuhwbw}dLH@OI<2wx(x;ghvfX%IIZw+!;UUv0x<@tD7#7Gy2cy7Xzi#WwYwcHGU1iDzETyf||c z`^m#=|H#^vM9qvVTy@UK)?Q7s+B@mI&WEMEY3WwZ=N9tR&2zM6-lM_)nrzGvg(-!GE-SuGJ)^#{-SEc{V_Yx1*nH;!!CI3YDYiS+X?~jaqDHw3kfEx``)rkOZ*~s&rkUAvgyV(b8pRmZZl<^JmKOeq4Do!=atCm`#W!v+R&53 z^e6M(sfBVbPxgd-T<~5lK*MbBitQG)h1It8OHH1Bmki8eZh5X1x$XaTb1~P zAC9`6`7StFMXGB0_hp@bMLH$Llx~J;&M~}eX?XGajYYMq@ANh?n+g`9+!(s-M1A& za+{8QdN(GkDEu&W^9QMK7cQw?wyk>e uPTuz3@!T7aV}IC7{$s14z>O5WjT-G@yGywqH2(bkK literal 0 HcmV?d00001 diff --git a/apps/web/public/maskable-512.png b/apps/web/public/maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..44377a465642553dfe0677f97686e030c93b5bd4 GIT binary patch literal 2280 zcmcIli8s`X7yr(f%pgnF$x=!4Q?IP0gfg}fLM6}gZ1vtqWT{~c#mpq7B(jY65G6yh z49Qx|Ox7@Hh9)s+Ls>J{88hFf-~aILIrsCq_ndn^_nvdlx%ciF7kgQ0b!h+qWF1b~ zo&x~rRtNfQWFgwK`AuIL8~tkM36h22_*mK(Lk5XPSTdGb$Zz z{l3{ChX3~Ry+Th|Dtt@iKd>scMQ7%le1X~++K0dU{|^*hdU#V3O=RS5WYrqhTda3Nx9*ev{=qEcvQ=9 zyAO8BqgY>6=}pK>(0HX#p&?qBOgfkex_RuK7@ISI&gX%4q}5|;$m?PvT4<@mh-EzM zj!gQT9Y2Z{ttC`w(^ry~B9SAlI;tcNS@~wY9*_x<1QHlL_!h8!!591=0Ogh*#9QGd z>}%S@W2pdp%dv;%MIj7#uadIOQw)k$X1@{nYrayEdeCj#Tuirhm>+-ltXrnJ(R`r%SuYY-H&IjAc^Koi@ z-E0h1O%blB`|c+ak9o|}5y+hPN)!otuqcaHQ=Up@uNu16>O?Gk^TG18;;MfN=DHmR ziUVHdZp1rqs=1nmwGZ|mW}eK(4Sk@(%2_s!J3l<#@bKwV8R;M4hU%$HH2L-~dU)-L z?BX(!hF$Nk1X)0PwJ547kgeI)uW2UvnuQojZpRtx9PyES;9E?gBnbWbmSYt6$Ek*z ziM)1Ss&9D`K0oMQqsQz-7X*GiDg*%Ch9|tn zGKmz%sdeWA6+{MeGdAL|mlSfY^?vM?LjB*N7~v7~+2mIP21N<3HLe2nn&sSbl=}q1 zKd?gr{v*gT=(Q`KNUtK!dp-X{Msu-eG$J5JzZfDh#!5fR%`c;^mi<3j0&SXo4@PlF z+O$B#ohbI~re?C#VA=UmIWYnCJ&k@R5%JR4aOr6?x7<*8R4EXW zL)-{%n0J6Y%I&g7-`U#cSx{E~Mn4?&z1jtMD^DbpcyM>2{N$c< zlK&*9SW*i#oKfij!DkU)*PrhRY{b3H-ca>KM5Ey6TBGb(P!9-#6t{8Xr#N(RvI-guEs_@sv*g;YQj zJBT!CQb-n1?S$C@cpQLGCQaI}s1vA)k5`A|lmHJecpoeIUL+duln#4ud9jS%aEO}e zZIiSLtvoN$7Xr`X-j1(Z<}Xi-@Qrb6XM_APP1)29zsu!A8LsT(9 z(0rx+PoMuxodRK!SU4jBtbn|8+TYHGA*xj(T!8I3hx3X+2@K7(=9vwwo1ptkn}pi> zhBDK`PAn)*0nn9x&#dOi z6ufUWZLT8m#W`ci-VDXZ*!1nJ>%OCzWw>ni-bU0*XO)I4 z-+TD0YZz~ycQiM-FuQ~Pu494abVoT&R|C?yyK96XX;AM9nNdW?67=gF42B8XolU}E z8{wt2K-#w2jjX!)mci1Wc_&;jq)9vUw3=({<)l;)$f=B+Gsq2&} zhs~DJr{+?S#S|=~n@%~QK2|LKY=je*r;b5?5Re`k1$g{$z8=5A)`z}1asXo9ypxiP z%4k}fd$Gjy30M)juf-p|!Lyj)#5T^#P*-Sbx1-Ok}RL#W2=ILkv zEuuXN8oRz3N;Hg}-jkZ1Tn;H^gk| z8_m+1Q6Lj~u0GBi-wYM+t`O^5PZaHr3r7Tr=cG)p=)r9?QOYJ@%QeGr*OFb#-n|7!kE# zJ;VY7&TF-f%%vVB!8x*}+bVXp{%L<`a+7aWcuDie>VNR( cw