diff --git a/package.json b/package.json
index 3acfcbf90e..395428cabd 100644
--- a/package.json
+++ b/package.json
@@ -43,6 +43,7 @@
"lucide-react": "^0.509.0",
"next": "^15.3.2",
"next-intl": "^4.1.0",
+ "next-themes": "^0.4.6",
"pg": "^8.13.0",
"pino": "^9.5.0",
"pino-pretty": "^13.0.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index bb2e320a4d..ca5f34579d 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -65,6 +65,9 @@ importers:
next-intl:
specifier: ^4.1.0
version: 4.1.0(next@15.3.2(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(typescript@5.8.3)
+ next-themes:
+ specifier: ^0.4.6
+ version: 0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
pg:
specifier: ^8.13.0
version: 8.15.6
@@ -6449,6 +6452,12 @@ packages:
typescript:
optional: true
+ next-themes@0.4.6:
+ resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==}
+ peerDependencies:
+ react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
+
next@15.3.2:
resolution: {integrity: sha512-CA3BatMyHkxZ48sgOCLdVHjFU36N7TF1HhqAHLFOkV6buwZnvMI84Cug8xD56B9mCuKrqXnLn94417GrZ/jjCQ==}
engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
@@ -15704,6 +15713,11 @@ snapshots:
optionalDependencies:
typescript: 5.8.3
+ next-themes@0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
+ dependencies:
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+
next@15.3.2(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
dependencies:
'@next/env': 15.3.2
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index bccfa44103..904f5bde22 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -4,12 +4,11 @@ import type { Metadata } from 'next';
import { NextIntlClientProvider } from 'next-intl';
import { getLocale } from 'next-intl/server';
+import { ThemeProvider } from '@/components/ThemeProvider';
+
export const metadata: Metadata = {
icons: [
- {
- rel: 'apple-touch-icon',
- url: '/apple-touch-icon.png',
- },
+ { rel: 'apple-touch-icon', url: '/apple-touch-icon.png' },
{
rel: 'icon',
type: 'image/png',
@@ -22,14 +21,15 @@ export const metadata: Metadata = {
sizes: '16x16',
url: '/favicon-16x16.png',
},
- {
- rel: 'icon',
- url: '/favicon.ico',
- },
+ { rel: 'icon', url: '/favicon.ico' },
],
};
-export default async function RootLayout(props: { children: React.ReactNode }) {
+export default async function RootLayout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
const locale = await getLocale();
return (
@@ -38,7 +38,16 @@ export default async function RootLayout(props: { children: React.ReactNode }) {
className="bg-background text-foreground antialiased"
suppressHydrationWarning
>
- {props.children}
+
+
+ {children}
+
+