Files
property-management-network/app/layout.tsx
T

78 lines
2.3 KiB
TypeScript
Raw Normal View History

import type { Metadata } from "next"
import { Geist, Geist_Mono } from "next/font/google"
import { Toaster } from "@/components/ui/toaster"
import { UmamiAnalytics } from "@/components/analytics/umami"
import "./globals.css"
const geistSans = Geist({
variable: "--font-geist-sans",
subsets: ["latin"],
})
const geistMono = Geist_Mono({
variable: "--font-geist-mono",
subsets: ["latin"],
})
export const metadata: Metadata = {
metadataBase: new URL(process.env.NEXT_PUBLIC_APP_URL ?? "https://propertymanagement.network"),
applicationName: "Property Management Network",
title: {
default: "Property Management Network — Built for Independent Landlords",
template: "%s | Property Management Network",
},
description:
"Manage your rental properties, tenants, rent, maintenance, and leases from one dashboard. Built for independent landlords with 120 properties.",
keywords: ["property management", "landlord software", "rent tracker", "tenant management"],
openGraph: {
title: "Property Management Network — Built for Independent Landlords",
description: "One dashboard to manage all your rental properties.",
type: "website",
url: "/",
siteName: "Property Management Network",
locale: "en_US",
},
twitter: {
card: "summary_large_image",
title: "Property Management Network — Built for Independent Landlords",
description: "One dashboard to manage all your rental properties.",
creator: "@propertymgmtnet",
site: "@propertymgmtnet",
},
robots: {
index: true,
follow: true,
googleBot: {
index: true,
follow: true,
"max-image-preview": "large",
"max-snippet": -1,
"max-video-preview": -1,
},
},
verification: {
// Set GOOGLE_SITE_VERIFICATION in the environment to emit the
// <meta name="google-site-verification"> tag. Left undefined => tag omitted.
google: process.env.GOOGLE_SITE_VERIFICATION,
},
}
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode
}>) {
return (
<html
lang="en"
className={`${geistSans.variable} ${geistMono.variable} h-full antialiased`}
>
<body suppressHydrationWarning className="min-h-full flex flex-col bg-[#09090b] text-white">
{children}
<Toaster />
<UmamiAnalytics />
</body>
</html>
)
}