From 5b11c63c315aaaea4a95e81369749cffd7eddf25 Mon Sep 17 00:00:00 2001 From: Ekkasit Samathimankong Date: Tue, 3 Mar 2026 01:45:58 +0000 Subject: [PATCH 1/2] feat(web): add /watch/easter route page --- apps/web/src/app/easter/page.tsx | 42 ++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 apps/web/src/app/easter/page.tsx diff --git a/apps/web/src/app/easter/page.tsx b/apps/web/src/app/easter/page.tsx new file mode 100644 index 00000000..79b89b6e --- /dev/null +++ b/apps/web/src/app/easter/page.tsx @@ -0,0 +1,42 @@ +import type { Metadata } from "next" +import { getLocale } from "@/lib/locale" +import { getWatchExperience } from "@/lib/content" +import { SectionRenderer, type Section } from "@/components/sections" +import { ExperienceEmpty } from "@/components/ExperienceEmpty" +import { ExperienceError } from "@/components/ExperienceError" + +export const metadata: Metadata = { + title: "Watch Easter", + description: + "Watch Easter content, livestreams, and featured videos on Forge.", + alternates: { + canonical: "/easter", + }, +} + +export default async function EasterPage() { + const locale = await getLocale() + const result = await getWatchExperience(locale, { slug: "easter" }) + + if (result.error) { + return + } + + const experience = result.data + if (!experience?.sections?.length) { + return + } + + const sections = experience.sections.filter( + (s): s is Section => s !== null && s.__typename !== "Error", + ) + + return ( +
+ {sections.map((section, i) => { + const key = section.id ?? `section-${i}` + return + })} +
+ ) +} From 4de3b874da697113968bafcefea64161c2e30fff Mon Sep 17 00:00:00 2001 From: Ekkasit Samathimankong Date: Tue, 3 Mar 2026 02:50:40 +0000 Subject: [PATCH 2/2] fix(web): move easter page to /watch/easter route and add post-filter guard Move page from app/easter to app/watch/easter so the route matches /watch/easter. Update canonical URL and add empty-sections guard after filtering out null/Error entries. Co-Authored-By: Claude Opus 4.6 --- apps/web/src/app/{ => watch}/easter/page.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) rename apps/web/src/app/{ => watch}/easter/page.tsx (92%) diff --git a/apps/web/src/app/easter/page.tsx b/apps/web/src/app/watch/easter/page.tsx similarity index 92% rename from apps/web/src/app/easter/page.tsx rename to apps/web/src/app/watch/easter/page.tsx index 79b89b6e..6cf2f1ec 100644 --- a/apps/web/src/app/easter/page.tsx +++ b/apps/web/src/app/watch/easter/page.tsx @@ -10,7 +10,7 @@ export const metadata: Metadata = { description: "Watch Easter content, livestreams, and featured videos on Forge.", alternates: { - canonical: "/easter", + canonical: "/watch/easter", }, } @@ -31,6 +31,10 @@ export default async function EasterPage() { (s): s is Section => s !== null && s.__typename !== "Error", ) + if (sections.length === 0) { + return + } + return (
{sections.map((section, i) => {