diff --git a/packages/web/src/app/layout.tsx b/packages/web/src/app/layout.tsx index 98e0547ce4..347c65647c 100644 --- a/packages/web/src/app/layout.tsx +++ b/packages/web/src/app/layout.tsx @@ -34,6 +34,9 @@ export async function generateMetadata(): Promise { export default function RootLayout({ children }: { children: ReactNode }) { return ( + + + {children} @@ -41,3 +44,4 @@ export default function RootLayout({ children }: { children: ReactNode }) { ); } + diff --git a/packages/web/src/app/manifest.test.ts b/packages/web/src/app/manifest.test.ts index de9f098087..9f2f3f043e 100644 --- a/packages/web/src/app/manifest.test.ts +++ b/packages/web/src/app/manifest.test.ts @@ -6,9 +6,9 @@ vi.mock("@/lib/project-name", () => ({ describe("app manifest", () => { it("builds the PWA manifest with project-aware naming and icons", async () => { - const { default: manifest } = await import("./manifest"); + const { buildPwaManifest } = await import("@/lib/pwa-manifest"); - expect(manifest()).toMatchObject({ + expect(buildPwaManifest()).toMatchObject({ name: "ao | Agent Orchestrator", short_name: "ao", start_url: "/", diff --git a/packages/web/src/app/manifest.webmanifest/route.ts b/packages/web/src/app/manifest.webmanifest/route.ts new file mode 100644 index 0000000000..1c85da6eb6 --- /dev/null +++ b/packages/web/src/app/manifest.webmanifest/route.ts @@ -0,0 +1,11 @@ +import { buildPwaManifest } from "@/lib/pwa-manifest"; + +export function GET() { + const manifest = buildPwaManifest(); + return new Response(JSON.stringify(manifest), { + headers: { + "Content-Type": "application/manifest+json", + "Cache-Control": "public, max-age=0, must-revalidate", + }, + }); +} diff --git a/packages/web/src/app/manifest.ts b/packages/web/src/lib/pwa-manifest.ts similarity index 93% rename from packages/web/src/app/manifest.ts rename to packages/web/src/lib/pwa-manifest.ts index 2138c2d92f..09fbd7b715 100644 --- a/packages/web/src/app/manifest.ts +++ b/packages/web/src/lib/pwa-manifest.ts @@ -1,7 +1,7 @@ import type { MetadataRoute } from "next"; import { getProjectName } from "@/lib/project-name"; -export default function manifest(): MetadataRoute.Manifest { +export function buildPwaManifest(): MetadataRoute.Manifest { const projectName = getProjectName(); return { name: `ao | ${projectName}`,