diff --git a/apps/docs-next/app/(home)/page.tsx b/apps/docs-next/app/(home)/page.tsx index 9b9961fd..7322fda1 100644 --- a/apps/docs-next/app/(home)/page.tsx +++ b/apps/docs-next/app/(home)/page.tsx @@ -57,7 +57,12 @@ const JSON_LD = { '@id': 'https://www.agentskit.io/#org', name: 'AgentsKit.js', url: 'https://www.agentskit.io', - logo: 'https://www.agentskit.io/favicon.svg', + logo: { + '@type': 'ImageObject', + url: 'https://www.agentskit.io/apple-touch-icon.png', + width: 180, + height: 180, + }, sameAs: [ 'https://github.com/AgentsKit-io/agentskit', 'https://www.npmjs.com/org/agentskit', diff --git a/apps/docs-next/app/layout.tsx b/apps/docs-next/app/layout.tsx index 8fec0db7..8e4a9148 100644 --- a/apps/docs-next/app/layout.tsx +++ b/apps/docs-next/app/layout.tsx @@ -53,9 +53,13 @@ export const metadata = { }, icons: { icon: [ + { url: '/favicon.ico', sizes: 'any' }, { url: '/favicon.svg', type: 'image/svg+xml' }, + { url: '/favicon-32x32.png', type: 'image/png', sizes: '32x32' }, + { url: '/favicon-16x16.png', type: 'image/png', sizes: '16x16' }, ], - apple: [{ url: '/apple-touch-icon.svg' }], + shortcut: ['/favicon.ico'], + apple: [{ url: '/apple-touch-icon.png', type: 'image/png', sizes: '180x180' }], }, openGraph: { type: 'website', diff --git a/apps/docs-next/public/apple-touch-icon.png b/apps/docs-next/public/apple-touch-icon.png new file mode 100644 index 00000000..0a2e4ad0 Binary files /dev/null and b/apps/docs-next/public/apple-touch-icon.png differ diff --git a/apps/docs-next/public/brand/README.md b/apps/docs-next/public/brand/README.md index 98c3bb9c..a774515e 100644 --- a/apps/docs-next/public/brand/README.md +++ b/apps/docs-next/public/brand/README.md @@ -12,6 +12,9 @@ Direction **1.4 — Triangle / foam monochrome** (chosen 2026-04-15). - **`/favicon.svg`** — square version with rounded background, baked colors. - **`/apple-touch-icon.svg`** — same, larger, 36px corner radius. +- **`/favicon.ico`** — compatibility fallback for crawlers and legacy clients. +- **`/favicon-16x16.png`** and **`/favicon-32x32.png`** — raster fallbacks for directory and browser pipelines. +- **`/apple-touch-icon.png`** — 180×180 raster fallback for touch icons and logo harvesters. - **`/api/og`** — dynamic OG image with optional `?title=` and `?description=` query params. ## Palette diff --git a/apps/docs-next/public/favicon-16x16.png b/apps/docs-next/public/favicon-16x16.png new file mode 100644 index 00000000..07952704 Binary files /dev/null and b/apps/docs-next/public/favicon-16x16.png differ diff --git a/apps/docs-next/public/favicon-32x32.png b/apps/docs-next/public/favicon-32x32.png new file mode 100644 index 00000000..a7bd93d7 Binary files /dev/null and b/apps/docs-next/public/favicon-32x32.png differ diff --git a/apps/docs-next/public/favicon.ico b/apps/docs-next/public/favicon.ico new file mode 100644 index 00000000..58aca38a Binary files /dev/null and b/apps/docs-next/public/favicon.ico differ diff --git a/apps/docs-next/tests/site-icons.test.ts b/apps/docs-next/tests/site-icons.test.ts new file mode 100644 index 00000000..f983a921 --- /dev/null +++ b/apps/docs-next/tests/site-icons.test.ts @@ -0,0 +1,24 @@ +import { existsSync, readFileSync } from 'node:fs' +import { join } from 'node:path' +import { describe, expect, it } from 'vitest' + +const publicDir = join(process.cwd(), 'apps/docs-next/public') + +describe('site icon fallbacks', () => { + it.each([ + 'favicon.ico', + 'favicon.svg', + 'favicon-16x16.png', + 'favicon-32x32.png', + 'apple-touch-icon.png', + ])('publishes %s', (filename) => { + expect(existsSync(join(publicDir, filename))).toBe(true) + }) + + it('keeps the raster assets as real PNG files', () => { + for (const filename of ['favicon-16x16.png', 'favicon-32x32.png', 'apple-touch-icon.png']) { + const signature = readFileSync(join(publicDir, filename)).subarray(0, 8) + expect([...signature]).toEqual([137, 80, 78, 71, 13, 10, 26, 10]) + } + }) +}) diff --git a/apps/landing/app/layout.tsx b/apps/landing/app/layout.tsx index 7dcd91e3..64e31975 100644 --- a/apps/landing/app/layout.tsx +++ b/apps/landing/app/layout.tsx @@ -20,7 +20,16 @@ export const metadata: Metadata = { description: 'Chat UI, runtime, tools, memory, RAG, observability. One ecosystem.', creator: '@agentskit', }, - icons: { icon: '/favicon.svg' }, + icons: { + icon: [ + { url: '/favicon.ico', sizes: 'any' }, + { url: '/favicon.svg', type: 'image/svg+xml' }, + { url: '/favicon-32x32.png', type: 'image/png', sizes: '32x32' }, + { url: '/favicon-16x16.png', type: 'image/png', sizes: '16x16' }, + ], + shortcut: ['/favicon.ico'], + apple: [{ url: '/apple-touch-icon.png', type: 'image/png', sizes: '180x180' }], + }, } export default function RootLayout({ children }: { children: React.ReactNode }) { diff --git a/apps/landing/public/apple-touch-icon.png b/apps/landing/public/apple-touch-icon.png new file mode 100644 index 00000000..0a2e4ad0 Binary files /dev/null and b/apps/landing/public/apple-touch-icon.png differ diff --git a/apps/landing/public/favicon-16x16.png b/apps/landing/public/favicon-16x16.png new file mode 100644 index 00000000..07952704 Binary files /dev/null and b/apps/landing/public/favicon-16x16.png differ diff --git a/apps/landing/public/favicon-32x32.png b/apps/landing/public/favicon-32x32.png new file mode 100644 index 00000000..a7bd93d7 Binary files /dev/null and b/apps/landing/public/favicon-32x32.png differ diff --git a/apps/landing/public/favicon.ico b/apps/landing/public/favicon.ico new file mode 100644 index 00000000..58aca38a Binary files /dev/null and b/apps/landing/public/favicon.ico differ