🚀 Major Update: v2.0.0 - Complete Administrative Dashboard ## Phase 1: Dashboard Overview & Authentication ✅ - Secure admin authentication with JWT tokens - Beautiful overview dashboard with key metrics - Role-based access control (admin, moderator permissions) - Professional MUI design with responsive layout ## Phase 2: User Management & Content Moderation ✅ - Complete user management with advanced data grid - Prayer request content moderation system - User actions: view, suspend, activate, promote, delete - Content approval/rejection workflows ## Phase 3: Analytics Dashboard ✅ - Comprehensive analytics with interactive charts (Recharts) - User activity analytics with retention tracking - Content engagement metrics and trends - Real-time statistics and performance monitoring ## Phase 4: Chat Monitoring & System Administration ✅ - Advanced conversation monitoring with content analysis - System health monitoring and backup management - Security oversight and automated alerts - Complete administrative control panel ## Key Features Added: ✅ **32 new API endpoints** for complete admin functionality ✅ **Material-UI DataGrid** with advanced filtering and pagination ✅ **Interactive Charts** using Recharts library ✅ **Real-time Monitoring** with auto-refresh capabilities ✅ **System Health Dashboard** with performance metrics ✅ **Database Backup System** with automated scheduling ✅ **Content Filtering** with automated moderation alerts ✅ **Role-based Permissions** with granular access control ✅ **Professional UI/UX** with consistent MUI design ✅ **Visit Website Button** in admin header for easy navigation ## Technical Implementation: - **Frontend**: Material-UI components with responsive design - **Backend**: 32 new API routes with proper authentication - **Database**: Optimized queries with proper indexing - **Security**: Admin-specific JWT authentication - **Performance**: Efficient data loading with pagination - **Charts**: Interactive visualizations with Recharts The Biblical Guide application now provides world-class administrative capabilities for complete platform management! 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
116 lines
3.3 KiB
TypeScript
116 lines
3.3 KiB
TypeScript
import '../globals.css'
|
|
import type { Metadata } from 'next'
|
|
import { NextIntlClientProvider } from 'next-intl'
|
|
import { getMessages, getTranslations } 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 async function generateMetadata({ params }: { params: Promise<{ locale: string }> }): Promise<Metadata> {
|
|
const { locale } = await params
|
|
const t = await getTranslations({ locale, namespace: 'seo' })
|
|
|
|
const currentUrl = locale === 'ro' ? 'https://biblical-guide.com/ro/' : 'https://biblical-guide.com/en/'
|
|
const alternateUrl = locale === 'ro' ? 'https://biblical-guide.com/en/' : 'https://biblical-guide.com/ro/'
|
|
|
|
return {
|
|
title: t('title'),
|
|
description: t('description'),
|
|
keywords: t('keywords'),
|
|
alternates: {
|
|
canonical: currentUrl,
|
|
languages: {
|
|
'ro': 'https://biblical-guide.com/ro/',
|
|
'en': 'https://biblical-guide.com/en/',
|
|
'x-default': 'https://biblical-guide.com/'
|
|
}
|
|
},
|
|
openGraph: {
|
|
title: t('ogTitle'),
|
|
description: t('ogDescription'),
|
|
url: currentUrl,
|
|
siteName: locale === 'ro' ? 'Ghid Biblic' : 'Biblical Guide',
|
|
locale: locale,
|
|
type: 'website',
|
|
images: [
|
|
{
|
|
url: `https://ghidulbiblic.ro/og-image-${locale}.jpg`,
|
|
width: 1200,
|
|
height: 630,
|
|
alt: t('ogTitle'),
|
|
},
|
|
],
|
|
},
|
|
twitter: {
|
|
card: 'summary_large_image',
|
|
site: '@ghidbiblic',
|
|
title: t('twitterTitle'),
|
|
description: t('twitterDescription'),
|
|
images: [`https://ghidulbiblic.ro/og-image-${locale}.jpg`],
|
|
},
|
|
other: {
|
|
'application/ld+json': JSON.stringify({
|
|
"@context": "https://schema.org",
|
|
"@type": "MobileApplication",
|
|
"name": locale === 'ro' ? "Ghid Biblic" : "Biblical Guide",
|
|
"url": "https://ghidulbiblic.ro",
|
|
"description": t('description'),
|
|
"applicationCategory": "EducationApplication",
|
|
"operatingSystem": "iOS, Android, Web",
|
|
"inLanguage": [locale],
|
|
"offers": {
|
|
"@type": "Offer",
|
|
"price": "0",
|
|
"priceCurrency": "USD"
|
|
}
|
|
})
|
|
}
|
|
}
|
|
}
|
|
|
|
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>
|
|
)
|
|
} |