77 lines
2.3 KiB
TypeScript
77 lines
2.3 KiB
TypeScript
import type { Metadata } from 'next'
|
|
import './globals.css'
|
|
import { LangProvider } from '@/context/LangContext'
|
|
import { siteConfig } from '@/lib/site'
|
|
|
|
export const metadata: Metadata = {
|
|
metadataBase: new URL(siteConfig.domain),
|
|
title: {
|
|
default: 'GreenLens - Plant Identifier and Care Planner',
|
|
template: '%s | GreenLens',
|
|
},
|
|
description:
|
|
'GreenLens helps you identify plants, organize your collection, and keep up with care routines in one app.',
|
|
keywords: [
|
|
'plant identifier by picture',
|
|
'plant care app',
|
|
'watering reminders',
|
|
'houseplant tracker',
|
|
'plant identification',
|
|
'plant health check',
|
|
'Pflanzen App',
|
|
'GreenLens',
|
|
],
|
|
authors: [{ name: siteConfig.name }],
|
|
openGraph: {
|
|
title: 'GreenLens - Plant Identifier and Care Planner',
|
|
description: 'Identify plants, get care guidance, and manage your collection with GreenLens.',
|
|
type: 'website',
|
|
url: siteConfig.domain,
|
|
},
|
|
alternates: {
|
|
canonical: '/',
|
|
languages: {
|
|
de: '/',
|
|
en: '/',
|
|
es: '/',
|
|
'x-default': '/',
|
|
},
|
|
},
|
|
}
|
|
|
|
export default function RootLayout({ children }: { children: React.ReactNode }) {
|
|
return (
|
|
<html lang="de">
|
|
<head>
|
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossOrigin="anonymous" />
|
|
<link rel="icon" href="/favicon.svg" type="image/svg+xml" />
|
|
<link rel="alternate" hrefLang="de" href="/" />
|
|
<link rel="alternate" hrefLang="en" href="/" />
|
|
<link rel="alternate" hrefLang="es" href="/" />
|
|
<link rel="alternate" hrefLang="x-default" href="/" />
|
|
<script
|
|
type="application/ld+json"
|
|
dangerouslySetInnerHTML={{
|
|
__html: JSON.stringify({
|
|
'@context': 'https://schema.org',
|
|
'@type': 'SoftwareApplication',
|
|
name: siteConfig.name,
|
|
operatingSystem: 'iOS, Android',
|
|
applicationCategory: 'LifestyleApplication',
|
|
offers: {
|
|
'@type': 'Offer',
|
|
price: '0',
|
|
priceCurrency: 'EUR',
|
|
},
|
|
}),
|
|
}}
|
|
/>
|
|
</head>
|
|
<body>
|
|
<LangProvider>{children}</LangProvider>
|
|
</body>
|
|
</html>
|
|
)
|
|
}
|