diff --git a/apps/pyconkr-2025/src/App.tsx b/apps/pyconkr-2025/src/App.tsx
index 7ce3a4c..b0a6ffc 100644
--- a/apps/pyconkr-2025/src/App.tsx
+++ b/apps/pyconkr-2025/src/App.tsx
@@ -1,17 +1,10 @@
import { useBackendClient, useFlattenSiteMapQuery, useSponsorQuery } from "@frontend/common/src/hooks/useAPI";
+import * as BackendAPISchemas from "@frontend/common/src/schemas/backendAPI";
import { buildNestedSiteMap } from "@frontend/common/src/utils";
import * as React from "react";
-import { Route, Routes, useLocation } from "react-router-dom";
+import { Outlet, ScrollRestoration, useLocation } from "react-router-dom";
import * as R from "remeda";
-import * as BackendAPISchemas from "@frontend/common/src/schemas/backendAPI";
-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: React.FC = () => {
@@ -45,15 +38,9 @@ export const App: React.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 eef13e6..63c3dc4 100644
--- a/apps/pyconkr-2025/src/main.tsx
+++ b/apps/pyconkr-2025/src/main.tsx
@@ -9,9 +9,9 @@ import { ReactQueryDevtools } from "@tanstack/react-query-devtools";
import { SnackbarProvider } from "notistack";
import * as React from "react";
import * as ReactDom 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";
@@ -85,23 +85,21 @@ const MainApp: React.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 051811e..b0a6ffc 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 * as BackendAPISchemas from "@frontend/common/src/schemas/backendAPI";
import { buildNestedSiteMap } from "@frontend/common/src/utils";
import * as React from "react";
-import { Route, Routes, useLocation } from "react-router-dom";
+import { Outlet, ScrollRestoration, useLocation } from "react-router-dom";
import * as R 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: React.FC = () => {
@@ -43,14 +38,9 @@ export const App: React.FC = () => {
}, [location, language, flatSiteMap, sponsorTiers]);
return (
-
- }>
- } />
- } />
- } />
- } />
- } />
-
-
+ <>
+
+
+ >
);
};
diff --git a/apps/pyconkr-2026/src/main.tsx b/apps/pyconkr-2026/src/main.tsx
index cf24b1f..bdd66fc 100644
--- a/apps/pyconkr-2026/src/main.tsx
+++ b/apps/pyconkr-2026/src/main.tsx
@@ -9,13 +9,13 @@ import { ReactQueryDevtools } from "@tanstack/react-query-devtools";
import { SnackbarProvider } from "notistack";
import * as React from "react";
import * as ReactDom 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({
@@ -85,23 +85,21 @@ const MainApp: React.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: },
+ ],
+ },
+ ],
+ },
+]);