From c8bacfd7b86e9573051361223dd30c01468c416b Mon Sep 17 00:00:00 2001 From: BASICBIT Date: Tue, 23 Jun 2026 12:29:23 -0400 Subject: [PATCH 1/5] Add event watch surface opt-in --- .../src/app/_components/event-public-page.tsx | 2 + .../app/_components/event-watch-surface.tsx | 4 +- apps/web/src/app/events/event-editor-form.tsx | 17 +++++- apps/web/src/convex/playwright-fixtures.ts | 2 + convex/_eventInputs.ts | 3 + convex/_eventPublic.ts | 2 + convex/events.ts | 3 + convex/schema.ts | 1 + docs/backend/event-schema.md | 6 +- docs/planning/architecture.md | 2 +- docs/planning/prd.md | 2 +- docs/planning/product-spec.md | 2 +- tests/backend/event-foundation.test.ts | 57 +++++++++++++++++++ 13 files changed, 96 insertions(+), 7 deletions(-) diff --git a/apps/web/src/app/_components/event-public-page.tsx b/apps/web/src/app/_components/event-public-page.tsx index 621cf76..a3825ba 100644 --- a/apps/web/src/app/_components/event-public-page.tsx +++ b/apps/web/src/app/_components/event-public-page.tsx @@ -72,6 +72,7 @@ export type PublicEventPreview = { export type PublicEvent = Omit & { slug: string; notes?: string; + watchSurfaceEnabled: boolean; authoredMediaLinks: Array<{ type: EventMediaLinkType; label: string; @@ -282,6 +283,7 @@ export function EventPublicPage({ event, showEditLink = false }: { event: Public diff --git a/apps/web/src/app/_components/event-watch-surface.tsx b/apps/web/src/app/_components/event-watch-surface.tsx index 8f61f44..4058ff8 100644 --- a/apps/web/src/app/_components/event-watch-surface.tsx +++ b/apps/web/src/app/_components/event-watch-surface.tsx @@ -444,11 +444,13 @@ function WatchHlsVideo({ embed }: { embed: Extract export function EventWatchSurface({ doorsOpenAt, endAt, + enabled, mediaLinks, startAt, }: { doorsOpenAt?: number; endAt?: number; + enabled: boolean; mediaLinks: EventWatchMediaLink[]; startAt: number; }) { @@ -456,7 +458,7 @@ export function EventWatchSurface({ const currentTimestamp = useCurrentTimestamp(); const primaryWatchLink = selectPrimaryWatchLink(mediaLinks); - if (!primaryWatchLink || !isInScheduledWatchWindow({ doorsOpenAt, endAt, now: currentTimestamp, startAt })) { + if (!enabled || !primaryWatchLink || !isInScheduledWatchWindow({ doorsOpenAt, endAt, now: currentTimestamp, startAt })) { return null; } diff --git a/apps/web/src/app/events/event-editor-form.tsx b/apps/web/src/app/events/event-editor-form.tsx index 1f637fd..80bf131 100644 --- a/apps/web/src/app/events/event-editor-form.tsx +++ b/apps/web/src/app/events/event-editor-form.tsx @@ -579,6 +579,7 @@ function ConnectedEventEditorForm({ event }: { event?: PublicEvent }) { sourceLabel: optionalString(stringField(formData.get("sourceLabel"))), sourceUrl: optionalString(stringField(formData.get("sourceUrl"))), posterImageUrl: optionalString(stringField(formData.get("posterImageUrl"))), + watchSurfaceEnabled: formData.get("watchSurfaceEnabled") === "on", mediaLinks: parseMediaLinks(mediaLinksText), participantLinks: parseParticipantLinks(stringField(formData.get("participantLinks"))), slotLinks: parseSlotLinks(slotText, startAt), @@ -687,13 +688,27 @@ function ConnectedEventEditorForm({ event }: { event?: PublicEvent }) {