diff --git a/src/app/(dashboard)/broadcasts/new/page.tsx b/src/app/(dashboard)/broadcasts/new/page.tsx index d55c6be..14426f4 100644 --- a/src/app/(dashboard)/broadcasts/new/page.tsx +++ b/src/app/(dashboard)/broadcasts/new/page.tsx @@ -59,7 +59,11 @@ export default function NewBroadcastPage() { }); router.push(`/broadcasts/${broadcastId}`); } catch (err) { + // Previously swallowed with console.error — the wizard would + // just no-op, leaving the user confused. Surface the reason. + const message = err instanceof Error ? err.message : 'Broadcast failed'; console.error('Broadcast failed:', err); + toast.error(message); } } diff --git a/src/hooks/use-broadcast-sending.ts b/src/hooks/use-broadcast-sending.ts index 4a487f7..ebfb470 100644 --- a/src/hooks/use-broadcast-sending.ts +++ b/src/hooks/use-broadcast-sending.ts @@ -249,6 +249,19 @@ export function useBroadcastSending(): UseBroadcastSendingReturn { const supabase = createClient(); try { + // ── Step 0: Resolve current user ────────────────────────────── + // broadcasts.user_id is NOT NULL + guarded by RLS + // (auth.uid() = user_id). Without this, the INSERT below was + // silently failing with 23502 / 42501 — the wizard would + // no-op with no feedback. + const { + data: { session }, + } = await supabase.auth.getSession(); + const user = session?.user; + if (!user) { + throw new Error('You are not signed in.'); + } + // ── Step 1: Resolve audience contacts ───────────────────────── setProgress(5); const contacts = await resolveAudience(payload.audience); @@ -262,6 +275,7 @@ export function useBroadcastSending(): UseBroadcastSendingReturn { const { data: broadcast, error: broadcastError } = await supabase .from('broadcasts') .insert({ + user_id: user.id, name: payload.name, template_name: payload.template.name, template_language: payload.template.language ?? 'en_US', @@ -284,7 +298,9 @@ export function useBroadcastSending(): UseBroadcastSendingReturn { .single(); if (broadcastError || !broadcast) { - throw new Error(`Failed to create broadcast: ${broadcastError?.message}`); + throw new Error( + `Failed to create broadcast: ${broadcastError?.message ?? 'unknown error'}`, + ); } // ── Step 3: Insert recipient rows ─────────────────────────────