diff --git a/autogpt_platform/frontend/src/app/(platform)/build/components/MainBuilderPage.tsx b/autogpt_platform/frontend/src/app/(platform)/build/components/MainBuilderPage.tsx
new file mode 100644
index 000000000000..c96e33ad0ea5
--- /dev/null
+++ b/autogpt_platform/frontend/src/app/(platform)/build/components/MainBuilderPage.tsx
@@ -0,0 +1,50 @@
+"use client";
+
+import { useOnboarding } from "@/providers/onboarding/onboarding-provider";
+import FlowEditor from "@/app/(platform)/build/components/legacy-builder/Flow/Flow";
+import { GraphID } from "@/lib/autogpt-server-api/types";
+import { useSearchParams } from "next/navigation";
+import { useEffect } from "react";
+import { Flow } from "./FlowEditor/Flow";
+import { BuilderViewTabs } from "./BuilderViewTabs/BuilderViewTabs";
+import { useBuilderView } from "./BuilderViewTabs/useBuilderViewTabs";
+
+function BuilderContent() {
+ const query = useSearchParams();
+ const { completeStep } = useOnboarding();
+
+ useEffect(() => {
+ completeStep("BUILDER_OPEN");
+ }, [completeStep]);
+
+ const _graphVersion = query.get("flowVersion");
+ const graphVersion = _graphVersion ? parseInt(_graphVersion) : undefined;
+ return (
+
+ );
+}
+
+export default function MainBuilderPage() {
+ const {
+ isSwitchEnabled,
+ selectedView,
+ setSelectedView,
+ isNewFlowEditorEnabled,
+ } = useBuilderView();
+
+ // Switch is temporary, we will remove it once our new flow editor is ready
+ if (isSwitchEnabled) {
+ return (
+
+
+ {selectedView === "new" ? : }
+
+ );
+ }
+
+ return isNewFlowEditorEnabled ? : ;
+}
diff --git a/autogpt_platform/frontend/src/app/(platform)/build/components/legacy-builder/Flow/Flow.tsx b/autogpt_platform/frontend/src/app/(platform)/build/components/legacy-builder/Flow/Flow.tsx
index ca2b317d8597..92a07fc312d3 100644
--- a/autogpt_platform/frontend/src/app/(platform)/build/components/legacy-builder/Flow/Flow.tsx
+++ b/autogpt_platform/frontend/src/app/(platform)/build/components/legacy-builder/Flow/Flow.tsx
@@ -164,13 +164,6 @@ const FlowEditor: React.FC<{
// It stores the dimension of all nodes with position as well
const [nodeDimensions, setNodeDimensions] = useState({});
- // Set page title with or without graph name
- useEffect(() => {
- document.title = savedAgent
- ? `${savedAgent.name} - Builder - AutoGPT Platform`
- : `Builder - AutoGPT Platform`;
- }, [savedAgent]);
-
const graphHasWebhookNodes = useMemo(
() =>
nodes.some((n) =>
diff --git a/autogpt_platform/frontend/src/app/(platform)/build/page.tsx b/autogpt_platform/frontend/src/app/(platform)/build/page.tsx
index 6df571ef61c6..34a166cca8d4 100644
--- a/autogpt_platform/frontend/src/app/(platform)/build/page.tsx
+++ b/autogpt_platform/frontend/src/app/(platform)/build/page.tsx
@@ -1,51 +1,36 @@
-"use client";
+import { Metadata } from "next";
+import MainBuilderPage from "./components/MainBuilderPage";
+import { getV1GetSpecificGraph } from "@/app/api/__generated__/endpoints/graphs/graphs";
-import { useOnboarding } from "@/providers/onboarding/onboarding-provider";
-import FlowEditor from "@/app/(platform)/build/components/legacy-builder/Flow/Flow";
-// import LoadingBox from "@/components/__legacy__/ui/loading";
-import { GraphID } from "@/lib/autogpt-server-api/types";
-import { useSearchParams } from "next/navigation";
-import { useEffect } from "react";
-import { Flow } from "./components/FlowEditor/Flow";
-import { BuilderViewTabs } from "./components/BuilderViewTabs/BuilderViewTabs";
-import { useBuilderView } from "./components/BuilderViewTabs/useBuilderViewTabs";
+export async function generateMetadata({
+ searchParams,
+}: {
+ searchParams: Promise<{ flowID: string; flowVersion: string }>;
+}): Promise {
+ const { flowID, flowVersion } = await searchParams;
-function BuilderContent() {
- const query = useSearchParams();
- const { completeStep } = useOnboarding();
-
- useEffect(() => {
- completeStep("BUILDER_OPEN");
- }, [completeStep]);
-
- const _graphVersion = query.get("flowVersion");
- const graphVersion = _graphVersion ? parseInt(_graphVersion) : undefined;
- return (
-
- );
-}
+ if (!flowID || !flowVersion) {
+ return {
+ title: `Builder - AutoGPT Platform`,
+ };
+ }
-export default function BuilderPage() {
- const {
- isSwitchEnabled,
- selectedView,
- setSelectedView,
- isNewFlowEditorEnabled,
- } = useBuilderView();
+ const { data: graph } = await getV1GetSpecificGraph(flowID, {
+ version: parseInt(flowVersion),
+ });
- // Switch is temporary, we will remove it once our new flow editor is ready
- if (isSwitchEnabled) {
- return (
-
-
- {selectedView === "new" ? : }
-
- );
+ if (!graph || typeof graph !== "object" || !("name" in graph)) {
+ return {
+ title: `Builder - AutoGPT Platform`,
+ };
}
- return isNewFlowEditorEnabled ? : ;
+ return {
+ title: `${graph.name} - Builder - AutoGPT Platform`,
+ };
}
+const BuilderPage = () => {
+ return ;
+};
+
+export default BuilderPage;