| import type { Metadata } from "next"; |
| import { Geist, Geist_Mono } from "next/font/google"; |
| import "./globals.css"; |
| import { Toaster } from "sonner"; |
| import { ThemeProvider } from 'next-themes'; |
| import { QueryProvider } from '@/providers/query-provider'; |
|
|
| const geistSans = Geist({ |
| variable: "--font-geist-sans", |
| subsets: ["latin"], |
| }); |
|
|
| const geistMono = Geist_Mono({ |
| variable: "--font-geist-mono", |
| subsets: ["latin"], |
| }); |
|
|
| export const metadata: Metadata = { |
| title: "OmniParse AI — Invoice Processing in Seconds", |
| description: |
| "AI-powered invoice processing. Upload PDFs or images and extract vendor, dates, amounts, and line items as structured data. Export to CSV, JSON, or connect via API.", |
| keywords: [ |
| "invoice processing", |
| "OCR", |
| "AI extraction", |
| "automated accounting", |
| "document processing", |
| ], |
| icons: { |
| icon: "data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'><rect width='32' height='32' rx='8' fill='%23F59E0B'/><path d='M8 10h6v2H10v3h4v2h-4v3h4v2H8V10zm10 0h2l2 4 2-4h2v12h-2.5v-7.5L20 19h-.2l-1.3-2.5V22H16V10z' fill='%2309090B'/></svg>", |
| }, |
| }; |
|
|
| export default function RootLayout({ |
| children, |
| }: Readonly<{ |
| children: React.ReactNode; |
| }>) { |
| return ( |
| <html lang="en" suppressHydrationWarning className="dark"> |
| <body |
| className={`${geistSans.variable} ${geistMono.variable} antialiased bg-background text-foreground noise-overlay`} |
| > |
| <ThemeProvider attribute="class" defaultTheme="dark" enableSystem disableTransitionOnChange> |
| <QueryProvider> |
| {children} |
| </QueryProvider> |
| </ThemeProvider> |
| <Toaster |
| position="bottom-right" |
| toastOptions={{ |
| style: { |
| background: "#1C1C1F", |
| border: "1px solid rgba(255,255,255,0.08)", |
| color: "#FAFAFA", |
| }, |
| }} |
| /> |
| </body> |
| </html> |
| ); |
| } |