diff --git a/components/frontend/src/app/integrations/page.tsx b/components/frontend/src/app/integrations/page.tsx index 466bcb7bf..39360cdbc 100644 --- a/components/frontend/src/app/integrations/page.tsx +++ b/components/frontend/src/app/integrations/page.tsx @@ -1,6 +1,11 @@ +import type { Metadata } from 'next' import React from 'react' import IntegrationsClient from '@/app/integrations/IntegrationsClient' +export const metadata: Metadata = { + title: 'Integrations · Ambient Code Platform', +} + export const dynamic = 'force-dynamic' export const revalidate = 0 diff --git a/components/frontend/src/app/projects/[name]/layout.tsx b/components/frontend/src/app/projects/[name]/layout.tsx new file mode 100644 index 000000000..66799aca7 --- /dev/null +++ b/components/frontend/src/app/projects/[name]/layout.tsx @@ -0,0 +1,7 @@ +export default function WorkspaceLayout({ + children, +}: { + children: React.ReactNode; +}) { + return children; +} diff --git a/components/frontend/src/app/projects/[name]/page.tsx b/components/frontend/src/app/projects/[name]/page.tsx index a2b8688da..f64c951f7 100644 --- a/components/frontend/src/app/projects/[name]/page.tsx +++ b/components/frontend/src/app/projects/[name]/page.tsx @@ -99,6 +99,12 @@ export default function ProjectDetailsPage() { const initialSection = (searchParams.get('section') as Section) || 'sessions'; const [activeSection, setActiveSection] = useState
(initialSection); + // Update page title with display name when available + useEffect(() => { + const title = project?.displayName || projectName; + document.title = `${title} · Ambient Code Platform`; + }, [project?.displayName, projectName]); + // Update active section when query parameter changes useEffect(() => { const sectionParam = searchParams.get('section') as Section; diff --git a/components/frontend/src/app/projects/[name]/sessions/[sessionName]/layout.tsx b/components/frontend/src/app/projects/[name]/sessions/[sessionName]/layout.tsx new file mode 100644 index 000000000..c1fb2f5d2 --- /dev/null +++ b/components/frontend/src/app/projects/[name]/sessions/[sessionName]/layout.tsx @@ -0,0 +1,7 @@ +export default function SessionLayout({ + children, +}: { + children: React.ReactNode; +}) { + return children; +} diff --git a/components/frontend/src/app/projects/[name]/sessions/[sessionName]/page.tsx b/components/frontend/src/app/projects/[name]/sessions/[sessionName]/page.tsx index b0f4dad0e..ff7c298e3 100644 --- a/components/frontend/src/app/projects/[name]/sessions/[sessionName]/page.tsx +++ b/components/frontend/src/app/projects/[name]/sessions/[sessionName]/page.tsx @@ -251,6 +251,14 @@ export default function ProjectSessionDetailPage({ return undefined; }, [capabilities?.framework, runnerTypes]); + // Update page title with display name when available + useEffect(() => { + const title = session?.spec?.displayName || sessionName; + if (title) { + document.title = `${title} · Ambient Code Platform`; + } + }, [session?.spec?.displayName, sessionName]); + // Track the current Langfuse trace ID for feedback association const [langfuseTraceId, setLangfuseTraceId] = useState(null); diff --git a/components/frontend/src/app/projects/layout.tsx b/components/frontend/src/app/projects/layout.tsx new file mode 100644 index 000000000..e826c6a87 --- /dev/null +++ b/components/frontend/src/app/projects/layout.tsx @@ -0,0 +1,13 @@ +import type { Metadata } from "next"; + +export const metadata: Metadata = { + title: "Workspaces · Ambient Code Platform", +}; + +export default function WorkspacesLayout({ + children, +}: { + children: React.ReactNode; +}) { + return children; +}