diff --git a/src/app/(app)/admin/layout.tsx b/src/app/(app)/admin/layout.tsx
new file mode 100644
index 0000000..1206a8f
--- /dev/null
+++ b/src/app/(app)/admin/layout.tsx
@@ -0,0 +1,21 @@
+import { ReactNode } from "react";
+import { AdminSidebar } from "@/components/admin/sidebar";
+import { Header } from "@/components/header";
+
+interface AdminLayoutProps {
+ children: ReactNode;
+}
+
+export default function AdminLayout({ children }: AdminLayoutProps) {
+ return (
+
+
+
+ {/**/}
+
+ {children}
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/src/app/(app)/admin/page.tsx b/src/app/(app)/admin/page.tsx
new file mode 100644
index 0000000..b987b3a
--- /dev/null
+++ b/src/app/(app)/admin/page.tsx
@@ -0,0 +1,27 @@
+import { AdminSidebar } from "@/components/admin/sidebar";
+import { Header } from "@/components/header";
+import { AdminDashboard } from "@/components/admin/dashboard";
+import AdminLayout from "@/app/(app)/admin/layout";
+import type { ReactElement } from "react";
+import prisma from "@/lib/prisma";
+
+export default async function AdminPage(): Promise {
+ const [userCount, problemCount] = await Promise.all([
+ prisma.user.count(),
+ prisma.problem.count(),
+ ]);
+
+ return (
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index d50795c..4669ff6 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -5,6 +5,8 @@ import { getLocale } from "next-intl/server";
import { NextIntlClientProvider } from "next-intl";
import { ThemeProvider } from "@/components/theme-provider";
import { SettingsDialog } from "@/components/settings-dialog";
+import { SessionProvider } from "next-auth/react";
+import { SidebarProvider } from "@/components/ui/sidebar";
export const metadata: Metadata = {
title: "Judge4c",
@@ -29,9 +31,13 @@ export default async function RootLayout({ children }: RootLayoutProps) {
enableSystem
disableTransitionOnChange
>
- {children}
-
-
+
+
+ {children}
+
+
+
+