diff --git a/web/src/app/app.tsx b/web/src/app/app.tsx
deleted file mode 100644
index 36edc31..0000000
--- a/web/src/app/app.tsx
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
-// SPDX-License-Identifier: MIT
-
-"use client";
-
-import { GithubOutlined } from "@ant-design/icons";
-import Link from "next/link";
-import { useMemo } from "react";
-
-import { Button } from "~/components/ui/button";
-import { useReplay } from "~/core/replay";
-import { useStore } from "~/core/store";
-import { cn } from "~/lib/utils";
-
-import { Logo } from "./_components/logo";
-import { MessagesBlock } from "./_components/messages-block";
-import { ResearchBlock } from "./_components/research-block";
-import { ThemeToggle } from "./_components/theme-toggle";
-import { Tooltip } from "./_components/tooltip";
-import { SettingsDialog } from "./_settings/dialogs/settings-dialog";
-
-export default function App() {
- const { isReplay } = useReplay();
- const openResearchId = useStore((state) => state.openResearchId);
- const doubleColumnMode = useMemo(
- () => openResearchId !== null,
- [openResearchId],
- );
- return (
-
- );
-}
diff --git a/web/src/app/chat/main.tsx b/web/src/app/chat/main.tsx
new file mode 100644
index 0000000..3d41653
--- /dev/null
+++ b/web/src/app/chat/main.tsx
@@ -0,0 +1,54 @@
+// Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
+// SPDX-License-Identifier: MIT
+
+"use client";
+
+import { GithubOutlined } from "@ant-design/icons";
+import Link from "next/link";
+import { useMemo } from "react";
+
+import { Button } from "~/components/ui/button";
+import { useReplay } from "~/core/replay";
+import { useStore } from "~/core/store";
+import { cn } from "~/lib/utils";
+
+import { Logo } from "../_components/logo";
+import { MessagesBlock } from "../_components/messages-block";
+import { ResearchBlock } from "../_components/research-block";
+import { ThemeToggle } from "../_components/theme-toggle";
+import { Tooltip } from "../_components/tooltip";
+import { SettingsDialog } from "../_settings/dialogs/settings-dialog";
+
+export default function Main() {
+ const { isReplay } = useReplay();
+ const openResearchId = useStore((state) => state.openResearchId);
+ const doubleColumnMode = useMemo(
+ () => openResearchId !== null,
+ [openResearchId],
+ );
+ return (
+
+
+
+
+ );
+}
diff --git a/web/src/app/chat/page.tsx b/web/src/app/chat/page.tsx
new file mode 100644
index 0000000..26dba29
--- /dev/null
+++ b/web/src/app/chat/page.tsx
@@ -0,0 +1,47 @@
+// Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
+// SPDX-License-Identifier: MIT
+
+"use client";
+
+import { GithubOutlined } from "@ant-design/icons";
+import dynamic from "next/dynamic";
+import Link from "next/link";
+import { Suspense } from "react";
+
+import { Button } from "~/components/ui/button";
+import { useReplay } from "~/core/replay";
+
+import { Logo } from "../_components/logo";
+import { ThemeToggle } from "../_components/theme-toggle";
+import { Tooltip } from "../_components/tooltip";
+import { SettingsDialog } from "../_settings/dialogs/settings-dialog";
+
+const Main = dynamic(() => import("./main"), { ssr: false });
+
+export default function HomePage() {
+ const { isReplay } = useReplay();
+ return (
+ }>
+
+
+
+ );
+}
diff --git a/web/src/app/page.tsx b/web/src/app/page.tsx
index cc4fb26..5e802ff 100644
--- a/web/src/app/page.tsx
+++ b/web/src/app/page.tsx
@@ -3,15 +3,8 @@
"use client";
-import dynamic from "next/dynamic";
-import { Suspense } from "react";
-
-const App = dynamic(() => import("./app"), { ssr: false });
+import { redirect } from "next/navigation";
export default function HomePage() {
- return (
- Loading DeerFlow...}>
-
-
- );
+ redirect("/chat");
}