- Implement complete authentication system with JWT token validation - Add auth provider with persistent login state across page refreshes - Create multilingual login/register forms with Material-UI components - Fix token validation using raw SQL queries to bypass Prisma sync issues - Add comprehensive error handling for expired/invalid tokens - Create profile and settings pages with full i18n support - Add proper user role management (admin/user) with database sync - Implement secure middleware with CSRF protection and auth checks - Add debug endpoints for troubleshooting authentication issues - Fix Zustand store persistence for authentication state 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
59 lines
1.6 KiB
TypeScript
59 lines
1.6 KiB
TypeScript
import '../globals.css'
|
|
import type { Metadata } from 'next'
|
|
import { NextIntlClientProvider } from 'next-intl'
|
|
import { getMessages } from 'next-intl/server'
|
|
import { notFound } from 'next/navigation'
|
|
import { MuiThemeProvider } from '@/components/providers/theme-provider'
|
|
import { AuthProvider } from '@/components/auth/auth-provider'
|
|
import { Navigation } from '@/components/layout/navigation'
|
|
import FloatingChat from '@/components/chat/floating-chat'
|
|
import { merriweather, lato } from '@/lib/fonts'
|
|
|
|
export const metadata: Metadata = {
|
|
title: 'Ghid Biblic - Biblical Guide',
|
|
description: 'A comprehensive Bible study application with AI chat capabilities',
|
|
}
|
|
|
|
export async function generateStaticParams() {
|
|
return [
|
|
{ locale: 'ro' },
|
|
{ locale: 'en' }
|
|
]
|
|
}
|
|
|
|
interface LocaleLayoutProps {
|
|
children: React.ReactNode
|
|
params: Promise<{ locale: string }>
|
|
}
|
|
|
|
const locales = ['ro', 'en']
|
|
|
|
export default async function LocaleLayout({
|
|
children,
|
|
params
|
|
}: LocaleLayoutProps) {
|
|
const { locale } = await params
|
|
|
|
// Validate locale
|
|
if (!locales.includes(locale)) {
|
|
notFound()
|
|
}
|
|
|
|
const messages = await getMessages({ locale })
|
|
|
|
return (
|
|
<html lang={locale}>
|
|
<body className={`${merriweather.variable} ${lato.variable}`}>
|
|
<NextIntlClientProvider messages={messages} locale={locale}>
|
|
<MuiThemeProvider>
|
|
<AuthProvider>
|
|
<Navigation />
|
|
{children}
|
|
<FloatingChat />
|
|
</AuthProvider>
|
|
</MuiThemeProvider>
|
|
</NextIntlClientProvider>
|
|
</body>
|
|
</html>
|
|
)
|
|
} |