feat(website): enhance web app support and icon metadata

- Add PWA-compatible icons in multiple sizes:
  - android-chrome-192x192.png
  - android-chrome-512x512.png
  - apple-touch-icon.png
  - favicon-16x16.png
  - favicon-32x32.png
- Modernize favicon handling:
  - Update favicon.ico
  - Remove deprecated favicon.png and favicon.svg
- Add site.webmanifest for better PWA integration
- Update metadata to reflect total icon count across pages
This commit is contained in:
Bjorn Lammers
2025-04-16 22:51:23 +02:00
committed by Thomas Camlong
parent 9dec2c6daa
commit 6041e37119
13 changed files with 175 additions and 130 deletions

View File

@@ -6,6 +6,7 @@ import { Inter } from "next/font/google";
import { Toaster } from "sonner";
import "./globals.css";
import { ThemeProvider } from "./theme-provider";
import { getTotalIcons } from "@/lib/api"
const inter = Inter({
variable: "--font-inter",
@@ -18,76 +19,85 @@ export const viewport: Viewport = {
themeColor: "#ffffff",
};
export const metadata: Metadata = {
metadataBase: new URL("https://icons.homarr.dev"),
title: "Dashboard Icons",
description: "Curated icons for your dashboard",
keywords: [
"dashboard",
"icons",
"open source",
"free icons",
"dashboard design",
],
robots: {
index: true,
follow: true,
"max-image-preview": "large",
"max-snippet": -1,
"max-video-preview": -1,
googleBot: "index, follow",
},
openGraph: {
siteName: "Dashboard Icons",
type: "website",
locale: "en_US",
title: "Dashboard Icons",
description: "Curated icons for your dashboard",
url: "https://icons.homarr.dev",
images: [
{
url: "/og-image.png",
width: 1200,
height: 630,
alt: "Dashboard Icons",
type: "image/png",
},
export async function generateMetadata(): Promise<Metadata> {
const { totalIcons } = await getTotalIcons()
return {
metadataBase: new URL("https://dashboardicons.com"),
title: "Dashboard Icons - Your definitive source for dashboard icons",
description: `A collection of ${totalIcons} curated icons for services, applications and tools, designed specifically for dashboards and app directories.`,
keywords: [
"dashboard icons",
"service icons",
"application icons",
"tool icons",
"web dashboard",
"app directory",
],
},
twitter: {
card: "summary_large_image",
site: "@homarr_app",
creator: "@homarr_app",
title: "Dashboard Icons",
description: "Curated icons for your dashboard",
images: ["/og-image.png"],
},
applicationName: "Dashboard Icons",
appleWebApp: {
title: "Dashboard Icons",
statusBarStyle: "default",
capable: true,
},
alternates: {
types: {
"application/rss+xml": "https://icons.homarr.dev/rss.xml",
robots: {
index: true,
follow: true,
"max-image-preview": "large",
"max-snippet": -1,
"max-video-preview": -1,
googleBot: "index, follow",
},
},
icons: {
icon: [
{
url: "/favicon.ico",
type: "image/x-icon",
openGraph: {
siteName: "Dashboard Icons",
type: "website",
locale: "en_US",
title: "Dashboard Icons - Your definitive source for dashboard icons",
description: `A collection of ${totalIcons} curated icons for services, applications and tools, designed specifically for dashboards and app directories.`,
url: "https://dashboardicons.com",
images: [
{
url: "/og-image.png",
width: 1200,
height: 630,
alt: "Dashboard Icons",
type: "image/png",
},
],
},
twitter: {
card: "summary_large_image",
site: "@homarr_app",
creator: "@homarr_app",
title: "Dashboard Icons - Your definitive source for dashboard icons",
description: `A collection of ${totalIcons} curated icons for services, applications and tools, designed specifically for dashboards and app directories.`,
images: ["/og-image.png"],
},
applicationName: "Dashboard Icons",
appleWebApp: {
title: "Dashboard Icons",
statusBarStyle: "default",
capable: true,
},
alternates: {
types: {
"application/rss+xml": "https://dashboardicons.com/rss.xml",
},
],
shortcut: [
{
url: "/favicon.ico",
type: "image/x-icon",
},
],
},
};
},
icons: {
icon: [
{ url: "/favicon.ico", sizes: "any" },
{ url: "/favicon-16x16.png", sizes: "16x16", type: "image/png" },
{ url: "/favicon-32x32.png", sizes: "32x32", type: "image/png" },
],
apple: [
{ url: "/apple-touch-icon.png", sizes: "180x180", type: "image/png" },
],
other: [
{
rel: "mask-icon",
url: "/safari-pinned-tab.svg",
color: "#000000",
},
],
},
manifest: "/site.webmanifest",
}
}
export default function RootLayout({
children,