Major changes across backend, frontend, infrastructure: - Provider system with model selection (Google, DeepL, OpenAI, Ollama, Google Cloud) - Admin panel: user management, pricing, settings - Glossary system with CSV import/export - Subscription and tier quota management - Security hardening (rate limiting, API key auth, path traversal fixes) - Docker compose for dev, prod, and IONOS deployment - Alembic migrations for new tables - Frontend: dashboard, pricing page, landing page, i18n (en/fr) - Test suite and verification scripts Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
46 lines
1.1 KiB
TypeScript
46 lines
1.1 KiB
TypeScript
import type { Metadata } from 'next'
|
|
import { Geist, Geist_Mono } from 'next/font/google'
|
|
import { Analytics } from '@vercel/analytics/next'
|
|
import './globals.css'
|
|
|
|
const _geist = Geist({ subsets: ["latin"] });
|
|
const _geistMono = Geist_Mono({ subsets: ["latin"] });
|
|
|
|
export const metadata: Metadata = {
|
|
title: 'Office Translator - Translate Documents, Keep the Format',
|
|
description: 'Translate Excel, Word, and PowerPoint documents with zero formatting loss. Fast, private, and accurate document translation.',
|
|
generator: 'v0.app',
|
|
icons: {
|
|
icon: [
|
|
{
|
|
url: '/icon-light-32x32.png',
|
|
media: '(prefers-color-scheme: light)',
|
|
},
|
|
{
|
|
url: '/icon-dark-32x32.png',
|
|
media: '(prefers-color-scheme: dark)',
|
|
},
|
|
{
|
|
url: '/icon.svg',
|
|
type: 'image/svg+xml',
|
|
},
|
|
],
|
|
apple: '/apple-icon.png',
|
|
},
|
|
}
|
|
|
|
export default function RootLayout({
|
|
children,
|
|
}: Readonly<{
|
|
children: React.ReactNode
|
|
}>) {
|
|
return (
|
|
<html lang="en">
|
|
<body className="font-sans antialiased">
|
|
{children}
|
|
<Analytics />
|
|
</body>
|
|
</html>
|
|
)
|
|
}
|