diff --git a/apps/web/app/favicon.ico b/apps/web/app/favicon.ico index 718d6fe..c46666b 100644 Binary files a/apps/web/app/favicon.ico and b/apps/web/app/favicon.ico differ 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() {
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() {