Add favicon from RealFaviconGenerator

Downloads and integrates favicon assets (SVG, PNG, ICO, Apple touch icon,
web app manifest icons) and wires them up via Next.js metadata API in the
root layout.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Marko Djordjevic 2026-02-20 23:07:10 +01:00
parent ea8c86f425
commit 852d19e3db
8 changed files with 43 additions and 56 deletions

BIN
public/apple-touch-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

BIN
public/favicon-96x96.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
public/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View file

@ -1,56 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chart-column w-5 h-5 text-primary" version="1.1" id="svg4" sodipodi:docname="favicon.svg" inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
<svg <defs id="defs4"></defs>
width="24" <sodipodi:namedview id="namedview4" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1" inkscape:zoom="34.75" inkscape:cx="11.985612" inkscape:cy="12" inkscape:window-width="1920" inkscape:window-height="1051" inkscape:window-x="0" inkscape:window-y="17" inkscape:window-maximized="1" inkscape:current-layer="svg4"></sodipodi:namedview>
height="24" <path d="M3 3v16a2 2 0 0 0 2 2h16" id="path1" style="stroke:#2258c3;stroke-opacity:1"></path>
viewBox="0 0 24 24" <path d="M18 17V9" id="path2" style="stroke:#2258c3;stroke-opacity:1"></path>
fill="none" <path d="M13 17V5" id="path3" style="stroke:#2258c3;stroke-opacity:1"></path>
stroke="currentColor" <path d="M8 17v-3" id="path4" style="stroke:#2258c3;stroke-opacity:1"></path>
stroke-width="2" </svg></svg><style>@media (prefers-color-scheme: light) { :root { filter: none; } }
stroke-linecap="round" @media (prefers-color-scheme: dark) { :root { filter: none; } }
stroke-linejoin="round" </style></svg>
class="lucide lucide-chart-column w-5 h-5 text-primary"
version="1.1"
id="svg4"
sodipodi:docname="favicon.svg"
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs4" />
<sodipodi:namedview
id="namedview4"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="34.75"
inkscape:cx="11.985612"
inkscape:cy="12"
inkscape:window-width="1920"
inkscape:window-height="1051"
inkscape:window-x="0"
inkscape:window-y="17"
inkscape:window-maximized="1"
inkscape:current-layer="svg4" />
<path
d="M3 3v16a2 2 0 0 0 2 2h16"
id="path1"
style="stroke:#2258c3;stroke-opacity:1" />
<path
d="M18 17V9"
id="path2"
style="stroke:#2258c3;stroke-opacity:1" />
<path
d="M13 17V5"
id="path3"
style="stroke:#2258c3;stroke-opacity:1" />
<path
d="M8 17v-3"
id="path4"
style="stroke:#2258c3;stroke-opacity:1" />
</svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Before After
Before After

21
public/site.webmanifest Normal file
View file

@ -0,0 +1,21 @@
{
"name": "Candle Annotator",
"short_name": "Candle Annotator",
"icons": [
{
"src": "/web-app-manifest-192x192.png",
"sizes": "192x192",
"type": "image/png",
"purpose": "maskable"
},
{
"src": "/web-app-manifest-512x512.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "maskable"
}
],
"theme_color": "#ffffff",
"background_color": "#ffffff",
"display": "standalone"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View file

@ -21,6 +21,18 @@ const jetbrainsMono = JetBrains_Mono({
export const metadata: Metadata = { export const metadata: Metadata = {
title: "Candle Annotator", title: "Candle Annotator",
description: "Annotate candlestick charts for ML training", description: "Annotate candlestick charts for ML training",
icons: {
icon: [
{ url: "/favicon.ico", rel: "shortcut icon" },
{ url: "/favicon-96x96.png", sizes: "96x96", type: "image/png" },
{ url: "/favicon.svg", type: "image/svg+xml" },
],
apple: [{ url: "/apple-touch-icon.png", sizes: "180x180" }],
},
manifest: "/site.webmanifest",
appleWebApp: {
title: "Candle Annotator",
},
}; };
export default function RootLayout({ export default function RootLayout({