From d1b47006f4bd1077bb06cb8e4a9f6fe1d9aa67a0 Mon Sep 17 00:00:00 2001 From: Felipe Cardoso Date: Tue, 18 Nov 2025 12:41:57 +0100 Subject: [PATCH] Remove all obsolete authentication, settings, admin, and demo-related components and pages - Eliminated redundant components, pages, and layouts related to authentication (`login`, `register`, `password-reset`, etc.), user settings, admin, and demos. - Simplified the frontend structure by removing unused dynamic imports, forms, and test code. - Refactored configurations and metadata imports to exclude references to removed features. - Streamlined the project for future development and improved maintainability by discarding legacy and unused code. --- .../src/app/(authenticated)/settings/page.tsx | 10 -- .../src/app/{ => [locale]}/(auth)/layout.tsx | 0 .../app/{ => [locale]}/(auth)/login/page.tsx | 0 .../confirm/PasswordResetConfirmContent.tsx | 5 +- .../(auth)/password-reset/confirm/page.tsx | 0 .../(auth)/password-reset/page.tsx | 0 .../{ => [locale]}/(auth)/register/page.tsx | 0 .../{ => [locale]}/(authenticated)/layout.tsx | 0 .../(authenticated)/settings/layout.tsx | 4 +- .../(authenticated)/settings/page.tsx | 11 +++ .../settings/password/page.tsx | 0 .../settings/preferences/page.tsx | 0 .../(authenticated)/settings/profile/page.tsx | 0 .../settings/sessions/page.tsx | 0 .../src/app/{ => [locale]}/admin/layout.tsx | 0 .../admin/organizations/[id]/members/page.tsx | 2 +- .../admin/organizations/page.tsx | 2 +- .../src/app/{ => [locale]}/admin/page.tsx | 2 +- .../{ => [locale]}/admin/settings/page.tsx | 2 +- .../app/{ => [locale]}/admin/users/page.tsx | 2 +- .../src/app/{ => [locale]}/demos/page.tsx | 2 +- .../{ => [locale]}/dev/components/page.tsx | 0 .../dev/docs/design-system/[...slug]/page.tsx | 0 .../src/app/{ => [locale]}/dev/docs/page.tsx | 2 +- .../src/app/{ => [locale]}/dev/forms/page.tsx | 2 +- .../src/app/{ => [locale]}/dev/layout.tsx | 0 .../app/{ => [locale]}/dev/layouts/page.tsx | 2 +- frontend/src/app/{ => [locale]}/dev/page.tsx | 2 +- .../app/{ => [locale]}/dev/spacing/page.tsx | 2 +- .../src/app/{ => [locale]}/forbidden/page.tsx | 2 +- frontend/src/app/[locale]/layout.tsx | 88 +++++++++++++++++ frontend/src/app/[locale]/page.tsx | 99 +++++++++++++++++++ frontend/src/app/layout.tsx | 69 ++----------- frontend/src/app/page.tsx | 99 +------------------ .../src/components/admin/AdminSidebar.tsx | 4 +- frontend/src/components/admin/Breadcrumbs.tsx | 4 +- .../OrganizationManagementContent.tsx | 3 +- .../OrganizationMembersContent.tsx | 3 +- .../admin/users/UserManagementContent.tsx | 3 +- frontend/src/components/auth/AuthGuard.tsx | 2 +- frontend/src/components/auth/LoginForm.tsx | 2 +- .../auth/PasswordResetConfirmForm.tsx | 2 +- .../auth/PasswordResetRequestForm.tsx | 2 +- frontend/src/components/auth/RegisterForm.tsx | 2 +- .../src/components/dev/DevBreadcrumbs.tsx | 2 +- frontend/src/components/dev/DevLayout.tsx | 4 +- .../src/components/home/AnimatedTerminal.tsx | 2 +- frontend/src/components/home/CTASection.tsx | 2 +- .../components/home/DemoCredentialsModal.tsx | 2 +- frontend/src/components/home/DemoSection.tsx | 2 +- frontend/src/components/home/FeatureCard.tsx | 2 +- frontend/src/components/home/Header.tsx | 2 +- frontend/src/components/home/HeroSection.tsx | 2 +- frontend/src/components/layout/Footer.tsx | 2 +- frontend/src/components/layout/Header.tsx | 4 +- frontend/src/middleware.ts | 5 +- 56 files changed, 259 insertions(+), 208 deletions(-) delete mode 100644 frontend/src/app/(authenticated)/settings/page.tsx rename frontend/src/app/{ => [locale]}/(auth)/layout.tsx (100%) rename frontend/src/app/{ => [locale]}/(auth)/login/page.tsx (100%) rename frontend/src/app/{ => [locale]}/(auth)/password-reset/confirm/PasswordResetConfirmContent.tsx (94%) rename frontend/src/app/{ => [locale]}/(auth)/password-reset/confirm/page.tsx (100%) rename frontend/src/app/{ => [locale]}/(auth)/password-reset/page.tsx (100%) rename frontend/src/app/{ => [locale]}/(auth)/register/page.tsx (100%) rename frontend/src/app/{ => [locale]}/(authenticated)/layout.tsx (100%) rename frontend/src/app/{ => [locale]}/(authenticated)/settings/layout.tsx (95%) create mode 100644 frontend/src/app/[locale]/(authenticated)/settings/page.tsx rename frontend/src/app/{ => [locale]}/(authenticated)/settings/password/page.tsx (100%) rename frontend/src/app/{ => [locale]}/(authenticated)/settings/preferences/page.tsx (100%) rename frontend/src/app/{ => [locale]}/(authenticated)/settings/profile/page.tsx (100%) rename frontend/src/app/{ => [locale]}/(authenticated)/settings/sessions/page.tsx (100%) rename frontend/src/app/{ => [locale]}/admin/layout.tsx (100%) rename frontend/src/app/{ => [locale]}/admin/organizations/[id]/members/page.tsx (96%) rename frontend/src/app/{ => [locale]}/admin/organizations/page.tsx (96%) rename frontend/src/app/{ => [locale]}/admin/page.tsx (98%) rename frontend/src/app/{ => [locale]}/admin/settings/page.tsx (97%) rename frontend/src/app/{ => [locale]}/admin/users/page.tsx (96%) rename frontend/src/app/{ => [locale]}/demos/page.tsx (99%) rename frontend/src/app/{ => [locale]}/dev/components/page.tsx (100%) rename frontend/src/app/{ => [locale]}/dev/docs/design-system/[...slug]/page.tsx (100%) rename frontend/src/app/{ => [locale]}/dev/docs/page.tsx (99%) rename frontend/src/app/{ => [locale]}/dev/forms/page.tsx (99%) rename frontend/src/app/{ => [locale]}/dev/layout.tsx (100%) rename frontend/src/app/{ => [locale]}/dev/layouts/page.tsx (99%) rename frontend/src/app/{ => [locale]}/dev/page.tsx (99%) rename frontend/src/app/{ => [locale]}/dev/spacing/page.tsx (99%) rename frontend/src/app/{ => [locale]}/forbidden/page.tsx (97%) create mode 100644 frontend/src/app/[locale]/layout.tsx create mode 100755 frontend/src/app/[locale]/page.tsx mode change 100755 => 100644 frontend/src/app/page.tsx diff --git a/frontend/src/app/(authenticated)/settings/page.tsx b/frontend/src/app/(authenticated)/settings/page.tsx deleted file mode 100644 index a5392e0..0000000 --- a/frontend/src/app/(authenticated)/settings/page.tsx +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Settings Index Page - * Redirects to /settings/profile - */ - -import { redirect } from 'next/navigation'; - -export default function SettingsPage() { - redirect('/settings/profile'); -} diff --git a/frontend/src/app/(auth)/layout.tsx b/frontend/src/app/[locale]/(auth)/layout.tsx similarity index 100% rename from frontend/src/app/(auth)/layout.tsx rename to frontend/src/app/[locale]/(auth)/layout.tsx diff --git a/frontend/src/app/(auth)/login/page.tsx b/frontend/src/app/[locale]/(auth)/login/page.tsx similarity index 100% rename from frontend/src/app/(auth)/login/page.tsx rename to frontend/src/app/[locale]/(auth)/login/page.tsx diff --git a/frontend/src/app/(auth)/password-reset/confirm/PasswordResetConfirmContent.tsx b/frontend/src/app/[locale]/(auth)/password-reset/confirm/PasswordResetConfirmContent.tsx similarity index 94% rename from frontend/src/app/(auth)/password-reset/confirm/PasswordResetConfirmContent.tsx rename to frontend/src/app/[locale]/(auth)/password-reset/confirm/PasswordResetConfirmContent.tsx index 2aebae7..bf71b3b 100644 --- a/frontend/src/app/(auth)/password-reset/confirm/PasswordResetConfirmContent.tsx +++ b/frontend/src/app/[locale]/(auth)/password-reset/confirm/PasswordResetConfirmContent.tsx @@ -5,11 +5,12 @@ 'use client'; -import { useSearchParams, useRouter } from 'next/navigation'; +import { useSearchParams } from 'next/navigation'; +import { useRouter } from '@/lib/i18n/routing'; import { useEffect, useRef } from 'react'; import dynamic from 'next/dynamic'; import { Alert } from '@/components/ui/alert'; -import Link from 'next/link'; +import { Link } from '@/lib/i18n/routing'; // Code-split PasswordResetConfirmForm (319 lines) const PasswordResetConfirmForm = dynamic( diff --git a/frontend/src/app/(auth)/password-reset/confirm/page.tsx b/frontend/src/app/[locale]/(auth)/password-reset/confirm/page.tsx similarity index 100% rename from frontend/src/app/(auth)/password-reset/confirm/page.tsx rename to frontend/src/app/[locale]/(auth)/password-reset/confirm/page.tsx diff --git a/frontend/src/app/(auth)/password-reset/page.tsx b/frontend/src/app/[locale]/(auth)/password-reset/page.tsx similarity index 100% rename from frontend/src/app/(auth)/password-reset/page.tsx rename to frontend/src/app/[locale]/(auth)/password-reset/page.tsx diff --git a/frontend/src/app/(auth)/register/page.tsx b/frontend/src/app/[locale]/(auth)/register/page.tsx similarity index 100% rename from frontend/src/app/(auth)/register/page.tsx rename to frontend/src/app/[locale]/(auth)/register/page.tsx diff --git a/frontend/src/app/(authenticated)/layout.tsx b/frontend/src/app/[locale]/(authenticated)/layout.tsx similarity index 100% rename from frontend/src/app/(authenticated)/layout.tsx rename to frontend/src/app/[locale]/(authenticated)/layout.tsx diff --git a/frontend/src/app/(authenticated)/settings/layout.tsx b/frontend/src/app/[locale]/(authenticated)/settings/layout.tsx similarity index 95% rename from frontend/src/app/(authenticated)/settings/layout.tsx rename to frontend/src/app/[locale]/(authenticated)/settings/layout.tsx index dfe65d2..0300f81 100644 --- a/frontend/src/app/(authenticated)/settings/layout.tsx +++ b/frontend/src/app/[locale]/(authenticated)/settings/layout.tsx @@ -5,8 +5,8 @@ 'use client'; -import { usePathname } from 'next/navigation'; -import Link from 'next/link'; +import { usePathname } from '@/lib/i18n/routing'; +import { Link } from '@/lib/i18n/routing'; import { Tabs, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { User, Lock, Monitor, Settings as SettingsIcon } from 'lucide-react'; diff --git a/frontend/src/app/[locale]/(authenticated)/settings/page.tsx b/frontend/src/app/[locale]/(authenticated)/settings/page.tsx new file mode 100644 index 0000000..30aef36 --- /dev/null +++ b/frontend/src/app/[locale]/(authenticated)/settings/page.tsx @@ -0,0 +1,11 @@ +/** + * Settings Index Page + * Redirects to /settings/profile + */ + +import { redirect } from 'next/navigation'; + +export default async function SettingsPage({ params }: { params: Promise<{ locale: string }> }) { + const { locale } = await params; + redirect(`/${locale}/settings/profile`); +} diff --git a/frontend/src/app/(authenticated)/settings/password/page.tsx b/frontend/src/app/[locale]/(authenticated)/settings/password/page.tsx similarity index 100% rename from frontend/src/app/(authenticated)/settings/password/page.tsx rename to frontend/src/app/[locale]/(authenticated)/settings/password/page.tsx diff --git a/frontend/src/app/(authenticated)/settings/preferences/page.tsx b/frontend/src/app/[locale]/(authenticated)/settings/preferences/page.tsx similarity index 100% rename from frontend/src/app/(authenticated)/settings/preferences/page.tsx rename to frontend/src/app/[locale]/(authenticated)/settings/preferences/page.tsx diff --git a/frontend/src/app/(authenticated)/settings/profile/page.tsx b/frontend/src/app/[locale]/(authenticated)/settings/profile/page.tsx similarity index 100% rename from frontend/src/app/(authenticated)/settings/profile/page.tsx rename to frontend/src/app/[locale]/(authenticated)/settings/profile/page.tsx diff --git a/frontend/src/app/(authenticated)/settings/sessions/page.tsx b/frontend/src/app/[locale]/(authenticated)/settings/sessions/page.tsx similarity index 100% rename from frontend/src/app/(authenticated)/settings/sessions/page.tsx rename to frontend/src/app/[locale]/(authenticated)/settings/sessions/page.tsx diff --git a/frontend/src/app/admin/layout.tsx b/frontend/src/app/[locale]/admin/layout.tsx similarity index 100% rename from frontend/src/app/admin/layout.tsx rename to frontend/src/app/[locale]/admin/layout.tsx diff --git a/frontend/src/app/admin/organizations/[id]/members/page.tsx b/frontend/src/app/[locale]/admin/organizations/[id]/members/page.tsx similarity index 96% rename from frontend/src/app/admin/organizations/[id]/members/page.tsx rename to frontend/src/app/[locale]/admin/organizations/[id]/members/page.tsx index c189381..cf46144 100644 --- a/frontend/src/app/admin/organizations/[id]/members/page.tsx +++ b/frontend/src/app/[locale]/admin/organizations/[id]/members/page.tsx @@ -6,7 +6,7 @@ /* istanbul ignore next - Next.js type import for metadata */ import type { Metadata } from 'next'; -import Link from 'next/link'; +import { Link } from '@/lib/i18n/routing'; import { ArrowLeft } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { OrganizationMembersContent } from '@/components/admin/organizations/OrganizationMembersContent'; diff --git a/frontend/src/app/admin/organizations/page.tsx b/frontend/src/app/[locale]/admin/organizations/page.tsx similarity index 96% rename from frontend/src/app/admin/organizations/page.tsx rename to frontend/src/app/[locale]/admin/organizations/page.tsx index eaefd8b..422bf14 100644 --- a/frontend/src/app/admin/organizations/page.tsx +++ b/frontend/src/app/[locale]/admin/organizations/page.tsx @@ -6,7 +6,7 @@ /* istanbul ignore next - Next.js type import for metadata */ import type { Metadata } from 'next'; -import Link from 'next/link'; +import { Link } from '@/lib/i18n/routing'; import { ArrowLeft } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { OrganizationManagementContent } from '@/components/admin/organizations/OrganizationManagementContent'; diff --git a/frontend/src/app/admin/page.tsx b/frontend/src/app/[locale]/admin/page.tsx similarity index 98% rename from frontend/src/app/admin/page.tsx rename to frontend/src/app/[locale]/admin/page.tsx index 63aafec..95c6952 100644 --- a/frontend/src/app/admin/page.tsx +++ b/frontend/src/app/[locale]/admin/page.tsx @@ -6,7 +6,7 @@ /* istanbul ignore next - Next.js type import for metadata */ import type { Metadata } from 'next'; -import Link from 'next/link'; +import { Link } from '@/lib/i18n/routing'; import { DashboardStats } from '@/components/admin'; import { UserGrowthChart, diff --git a/frontend/src/app/admin/settings/page.tsx b/frontend/src/app/[locale]/admin/settings/page.tsx similarity index 97% rename from frontend/src/app/admin/settings/page.tsx rename to frontend/src/app/[locale]/admin/settings/page.tsx index 5aa3a32..74bb903 100644 --- a/frontend/src/app/admin/settings/page.tsx +++ b/frontend/src/app/[locale]/admin/settings/page.tsx @@ -6,7 +6,7 @@ /* istanbul ignore next - Next.js type import for metadata */ import type { Metadata } from 'next'; -import Link from 'next/link'; +import { Link } from '@/lib/i18n/routing'; import { ArrowLeft } from 'lucide-react'; import { Button } from '@/components/ui/button'; diff --git a/frontend/src/app/admin/users/page.tsx b/frontend/src/app/[locale]/admin/users/page.tsx similarity index 96% rename from frontend/src/app/admin/users/page.tsx rename to frontend/src/app/[locale]/admin/users/page.tsx index aed5f45..968e919 100644 --- a/frontend/src/app/admin/users/page.tsx +++ b/frontend/src/app/[locale]/admin/users/page.tsx @@ -6,7 +6,7 @@ /* istanbul ignore next - Next.js type import for metadata */ import type { Metadata } from 'next'; -import Link from 'next/link'; +import { Link } from '@/lib/i18n/routing'; import { ArrowLeft } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { UserManagementContent } from '@/components/admin/users/UserManagementContent'; diff --git a/frontend/src/app/demos/page.tsx b/frontend/src/app/[locale]/demos/page.tsx similarity index 99% rename from frontend/src/app/demos/page.tsx rename to frontend/src/app/[locale]/demos/page.tsx index fb7760b..e21da2e 100644 --- a/frontend/src/app/demos/page.tsx +++ b/frontend/src/app/[locale]/demos/page.tsx @@ -4,7 +4,7 @@ */ import type { Metadata } from 'next'; -import Link from 'next/link'; +import { Link } from '@/lib/i18n/routing'; import { Palette, ShieldCheck, diff --git a/frontend/src/app/dev/components/page.tsx b/frontend/src/app/[locale]/dev/components/page.tsx similarity index 100% rename from frontend/src/app/dev/components/page.tsx rename to frontend/src/app/[locale]/dev/components/page.tsx diff --git a/frontend/src/app/dev/docs/design-system/[...slug]/page.tsx b/frontend/src/app/[locale]/dev/docs/design-system/[...slug]/page.tsx similarity index 100% rename from frontend/src/app/dev/docs/design-system/[...slug]/page.tsx rename to frontend/src/app/[locale]/dev/docs/design-system/[...slug]/page.tsx diff --git a/frontend/src/app/dev/docs/page.tsx b/frontend/src/app/[locale]/dev/docs/page.tsx similarity index 99% rename from frontend/src/app/dev/docs/page.tsx rename to frontend/src/app/[locale]/dev/docs/page.tsx index f783121..b1f324f 100644 --- a/frontend/src/app/dev/docs/page.tsx +++ b/frontend/src/app/[locale]/dev/docs/page.tsx @@ -4,7 +4,7 @@ * Access: /dev/docs */ -import Link from 'next/link'; +import { Link } from '@/lib/i18n/routing'; import { BookOpen, Sparkles, diff --git a/frontend/src/app/dev/forms/page.tsx b/frontend/src/app/[locale]/dev/forms/page.tsx similarity index 99% rename from frontend/src/app/dev/forms/page.tsx rename to frontend/src/app/[locale]/dev/forms/page.tsx index 869d2a2..f4a40ce 100644 --- a/frontend/src/app/dev/forms/page.tsx +++ b/frontend/src/app/[locale]/dev/forms/page.tsx @@ -7,7 +7,7 @@ 'use client'; import { useState } from 'react'; -import Link from 'next/link'; +import { Link } from '@/lib/i18n/routing'; import { useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import { z } from 'zod'; diff --git a/frontend/src/app/dev/layout.tsx b/frontend/src/app/[locale]/dev/layout.tsx similarity index 100% rename from frontend/src/app/dev/layout.tsx rename to frontend/src/app/[locale]/dev/layout.tsx diff --git a/frontend/src/app/dev/layouts/page.tsx b/frontend/src/app/[locale]/dev/layouts/page.tsx similarity index 99% rename from frontend/src/app/dev/layouts/page.tsx rename to frontend/src/app/[locale]/dev/layouts/page.tsx index c697a4f..6f13295 100644 --- a/frontend/src/app/dev/layouts/page.tsx +++ b/frontend/src/app/[locale]/dev/layouts/page.tsx @@ -5,7 +5,7 @@ */ import type { Metadata } from 'next'; -import Link from 'next/link'; +import { Link } from '@/lib/i18n/routing'; import { Grid3x3 } from 'lucide-react'; import { DevBreadcrumbs } from '@/components/dev/DevBreadcrumbs'; import { Button } from '@/components/ui/button'; diff --git a/frontend/src/app/dev/page.tsx b/frontend/src/app/[locale]/dev/page.tsx similarity index 99% rename from frontend/src/app/dev/page.tsx rename to frontend/src/app/[locale]/dev/page.tsx index 7224472..df0155b 100644 --- a/frontend/src/app/dev/page.tsx +++ b/frontend/src/app/[locale]/dev/page.tsx @@ -5,7 +5,7 @@ */ import type { Metadata } from 'next'; -import Link from 'next/link'; +import { Link } from '@/lib/i18n/routing'; import { Palette, Layout, Ruler, FileText, BookOpen, ArrowRight, Sparkles } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; diff --git a/frontend/src/app/dev/spacing/page.tsx b/frontend/src/app/[locale]/dev/spacing/page.tsx similarity index 99% rename from frontend/src/app/dev/spacing/page.tsx rename to frontend/src/app/[locale]/dev/spacing/page.tsx index af4cc07..9e00b9c 100644 --- a/frontend/src/app/dev/spacing/page.tsx +++ b/frontend/src/app/[locale]/dev/spacing/page.tsx @@ -6,7 +6,7 @@ import type { Metadata } from 'next'; import dynamic from 'next/dynamic'; -import Link from 'next/link'; +import { Link } from '@/lib/i18n/routing'; import { Ruler } from 'lucide-react'; import { DevBreadcrumbs } from '@/components/dev/DevBreadcrumbs'; import { Button } from '@/components/ui/button'; diff --git a/frontend/src/app/forbidden/page.tsx b/frontend/src/app/[locale]/forbidden/page.tsx similarity index 97% rename from frontend/src/app/forbidden/page.tsx rename to frontend/src/app/[locale]/forbidden/page.tsx index bcbb208..c9899fc 100644 --- a/frontend/src/app/forbidden/page.tsx +++ b/frontend/src/app/[locale]/forbidden/page.tsx @@ -5,7 +5,7 @@ /* istanbul ignore next - Next.js type import for metadata */ import type { Metadata } from 'next'; -import Link from 'next/link'; +import { Link } from '@/lib/i18n/routing'; import { ShieldAlert } from 'lucide-react'; import { Button } from '@/components/ui/button'; diff --git a/frontend/src/app/[locale]/layout.tsx b/frontend/src/app/[locale]/layout.tsx new file mode 100644 index 0000000..98c98d2 --- /dev/null +++ b/frontend/src/app/[locale]/layout.tsx @@ -0,0 +1,88 @@ +import type { Metadata } from 'next'; +import { Geist, Geist_Mono } from 'next/font/google'; +import { notFound } from 'next/navigation'; +import { routing } from '@/lib/i18n/routing'; +import { NextIntlClientProvider } from 'next-intl'; +import { getMessages } from 'next-intl/server'; +import '../globals.css'; +import { Providers } from '../providers'; +import { AuthProvider } from '@/lib/auth/AuthContext'; +import { AuthInitializer } from '@/components/auth'; + +const geistSans = Geist({ + variable: '--font-geist-sans', + subsets: ['latin'], + display: 'swap', // Prevent font from blocking render + preload: true, +}); + +const geistMono = Geist_Mono({ + variable: '--font-geist-mono', + subsets: ['latin'], + display: 'swap', // Prevent font from blocking render + preload: false, // Only preload primary font +}); + +export const metadata: Metadata = { + title: 'FastNext Template', + description: 'FastAPI + Next.js Template', +}; + +export default async function LocaleLayout({ + children, + params, +}: Readonly<{ + children: React.ReactNode; + params: Promise<{ locale: string }>; +}>) { + // Await params in Next.js 15 + const { locale } = await params; + + // Ensure that the incoming `locale` is valid + if (!routing.locales.includes(locale as 'en' | 'it')) { + notFound(); + } + + // Providing all messages to the client + // side is the easiest way to get started + const messages = await getMessages(); + + return ( + + + {/* Theme initialization script - runs before React hydrates to prevent FOUC */} +