diff --git a/apps/pyconkr-2025/src/App.tsx b/apps/pyconkr-2025/src/App.tsx
index 81bdf8f..bf17c63 100644
--- a/apps/pyconkr-2025/src/App.tsx
+++ b/apps/pyconkr-2025/src/App.tsx
@@ -2,16 +2,8 @@ import { useBackendClient, useFlattenSiteMapQuery, useSponsorQuery } from "@fron
import { NestedSiteMapSchema } from "@frontend/common/schemas/backendAPI";
import { buildNestedSiteMap } from "@frontend/common/utils";
import { FC, useEffect } from "react";
-import { Route, Routes, useLocation } from "react-router-dom";
+import { Outlet, ScrollRestoration, useLocation } from "react-router-dom";
import { isEmpty, isNullish } from "remeda";
-
-import MainLayout from "./components/layout/index.tsx";
-import { PageIdParamRenderer, RouteRenderer } from "./components/pages/dynamic_route.tsx";
-import { PresentationDetailPage } from "./components/pages/presentation_detail.tsx";
-import { ShopSignInPage } from "./components/pages/sign_in.tsx";
-import { SponsorDetailPage } from "./components/pages/sponsor_detail.tsx";
-import { Test } from "./components/pages/test.tsx";
-import { IS_DEBUG_ENV } from "./consts";
import { useAppContext } from "./contexts/app_context";
export const App: FC = () => {
@@ -45,15 +37,9 @@ export const App: FC = () => {
}, [location, language, flatSiteMap, sponsorTiers]);
return (
-
- }>
- {IS_DEBUG_ENV && } />}
- } />
- } />
- } />
- } />
- } />
-
-
+ <>
+
+
+ >
);
};
diff --git a/apps/pyconkr-2025/src/main.tsx b/apps/pyconkr-2025/src/main.tsx
index 3a008c4..769a981 100644
--- a/apps/pyconkr-2025/src/main.tsx
+++ b/apps/pyconkr-2025/src/main.tsx
@@ -11,9 +11,9 @@ import { ReactQueryDevtools } from "@tanstack/react-query-devtools";
import { SnackbarProvider } from "notistack";
import { FC, StrictMode, useState } from "react";
import { createRoot } from "react-dom/client";
-import { BrowserRouter } from "react-router-dom";
+import { RouterProvider } from "react-router-dom";
-import { App } from "./App.tsx";
+import { router } from "./router.tsx";
import { IS_DEBUG_ENV } from "./consts";
import { LOCAL_STORAGE_LANGUAGE_KEY } from "./consts/local_stroage.ts";
import { PyConKRMDXComponents } from "./consts/mdx_components.ts";
@@ -84,23 +84,21 @@ export const MainApp: FC = () => {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/pyconkr-2025/src/router.tsx b/apps/pyconkr-2025/src/router.tsx
new file mode 100644
index 0000000..3cd7990
--- /dev/null
+++ b/apps/pyconkr-2025/src/router.tsx
@@ -0,0 +1,29 @@
+import { createBrowserRouter } from "react-router-dom";
+
+import { App } from "./App.tsx";
+import MainLayout from "./components/layout/index.tsx";
+import { PageIdParamRenderer, RouteRenderer } from "./components/pages/dynamic_route.tsx";
+import { PresentationDetailPage } from "./components/pages/presentation_detail.tsx";
+import { ShopSignInPage } from "./components/pages/sign_in.tsx";
+import { SponsorDetailPage } from "./components/pages/sponsor_detail.tsx";
+import { Test } from "./components/pages/test.tsx";
+import { IS_DEBUG_ENV } from "./consts";
+
+export const router = createBrowserRouter([
+ {
+ element: ,
+ children: [
+ {
+ element: ,
+ children: [
+ ...(IS_DEBUG_ENV ? [{ path: "/debug", element: }] : []),
+ { path: "/account/sign-in", element: },
+ { path: "/sponsors/:id", element: },
+ { path: "/presentations/:id", element: },
+ { path: "/pages/:id", element: },
+ { path: "*", element: },
+ ],
+ },
+ ],
+ },
+]);
diff --git a/apps/pyconkr-2026/src/App.tsx b/apps/pyconkr-2026/src/App.tsx
index ad96358..ca0cb5c 100644
--- a/apps/pyconkr-2026/src/App.tsx
+++ b/apps/pyconkr-2026/src/App.tsx
@@ -2,14 +2,9 @@ import { useBackendClient, useFlattenSiteMapQuery, useSponsorQuery } from "@fron
import { NestedSiteMapSchema } from "@frontend/common/schemas/backendAPI";
import { buildNestedSiteMap } from "@frontend/common/utils";
import { FC, useEffect } from "react";
-import { Route, Routes, useLocation } from "react-router-dom";
+import { Outlet, ScrollRestoration, useLocation } from "react-router-dom";
import { isEmpty, isNullish } from "remeda";
-import MainLayout from "./components/layout/index.tsx";
-import { PageIdParamRenderer, RouteRenderer } from "./components/pages/dynamic_route.tsx";
-import { PresentationDetailPage } from "./components/pages/presentation_detail.tsx";
-import { ShopSignInPage } from "./components/pages/sign_in.tsx";
-import { SponsorDetailPage } from "./components/pages/sponsor_detail.tsx";
import { useAppContext } from "./contexts/app_context";
export const App: FC = () => {
@@ -43,14 +38,9 @@ export const App: FC = () => {
}, [location, language, flatSiteMap, sponsorTiers]);
return (
-
- }>
- } />
- } />
- } />
- } />
- } />
-
-
+ <>
+
+
+ >
);
};
diff --git a/apps/pyconkr-2026/src/main.tsx b/apps/pyconkr-2026/src/main.tsx
index 1169837..93692a4 100644
--- a/apps/pyconkr-2026/src/main.tsx
+++ b/apps/pyconkr-2026/src/main.tsx
@@ -11,13 +11,13 @@ import { ReactQueryDevtools } from "@tanstack/react-query-devtools";
import { SnackbarProvider } from "notistack";
import { FC, StrictMode, useState } from "react";
import { createRoot } from "react-dom/client";
-import { BrowserRouter } from "react-router-dom";
+import { RouterProvider } from "react-router-dom";
-import { App } from "./App.tsx";
import { IS_DEBUG_ENV } from "./consts";
import { LOCAL_STORAGE_LANGUAGE_KEY } from "./consts/local_stroage.ts";
import { PyConKRMDXComponents } from "./consts/mdx_components.ts";
import { AppContext, AppContextType } from "./contexts/app_context.tsx";
+import { router } from "./router.tsx";
import { globalStyles, muiTheme } from "./styles/globalStyles.ts";
const queryClient = new QueryClient({
@@ -84,23 +84,21 @@ export const MainApp: FC = () => {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/pyconkr-2026/src/router.tsx b/apps/pyconkr-2026/src/router.tsx
new file mode 100644
index 0000000..4fd035a
--- /dev/null
+++ b/apps/pyconkr-2026/src/router.tsx
@@ -0,0 +1,26 @@
+import { createBrowserRouter } from "react-router-dom";
+
+import { App } from "./App.tsx";
+import MainLayout from "./components/layout/index.tsx";
+import { PageIdParamRenderer, RouteRenderer } from "./components/pages/dynamic_route.tsx";
+import { PresentationDetailPage } from "./components/pages/presentation_detail.tsx";
+import { ShopSignInPage } from "./components/pages/sign_in.tsx";
+import { SponsorDetailPage } from "./components/pages/sponsor_detail.tsx";
+
+export const router = createBrowserRouter([
+ {
+ element: ,
+ children: [
+ {
+ element: ,
+ children: [
+ { path: "/account/sign-in", element: },
+ { path: "/sponsors/:id", element: },
+ { path: "/presentations/:id", element: },
+ { path: "/pages/:id", element: },
+ { path: "*", element: },
+ ],
+ },
+ ],
+ },
+]);