From 2714f41a10314f588704c3cf8b11bdc42c2f3802 Mon Sep 17 00:00:00 2001 From: Echo Date: Fri, 6 Feb 2026 10:01:35 -0800 Subject: [PATCH] Fix digest send endpoint to actually email via Resend --- src/app/api/digest/send/route.ts | 57 ++++++++++++++++++++------------ 1 file changed, 36 insertions(+), 21 deletions(-) diff --git a/src/app/api/digest/send/route.ts b/src/app/api/digest/send/route.ts index 241147f7..2c522812 100644 --- a/src/app/api/digest/send/route.ts +++ b/src/app/api/digest/send/route.ts @@ -2,7 +2,7 @@ import { NextRequest, NextResponse } from 'next/server'; import { render } from '@react-email/components'; import { requireCronAuth } from '@/lib/server/cron-auth'; import { getSupabaseAdmin } from '@/lib/server/supabase-admin'; -import { sendDigestEmail } from '@/lib/resend'; +import { resend, FROM_EMAIL, REPLY_TO } from '@/lib/resend'; import { DigestEmail } from '@/components/emails/DigestEmail'; export async function POST(req: NextRequest) { @@ -83,9 +83,16 @@ export async function POST(req: NextRequest) { date: today, }; - // Render email to HTML + // Render email to HTML (same content for all recipients) const emailHtml = await render(DigestEmail(emailProps)); + if (!resend) { + return NextResponse.json( + { error: 'Email service not configured' }, + { status: 500 } + ); + } + // Send to each subscriber const results = { total: subscribers.length, @@ -94,29 +101,37 @@ export async function POST(req: NextRequest) { errors: [] as string[], }; - // TODO: Fix sendDigestEmail parameters to match function signature - // Temporarily disabled to fix build - // for (const subscriber of subscribers) { - // if (!subscriber.email) continue; - // const result = await sendDigestEmail({ - // to: subscriber.email, - // recipientName: subscriber.name || subscriber.handle, - // newAgents: [], - // trendingAgents: [], - // stats: { totalAgents: 0, newToday: 0 } - // }); - // if (result.success) results.sent++; - // else { - // results.failed++; - // results.errors.push(`${subscriber.handle}: ${result.error}`); - // } - // } - results.sent = subscribers.length; // Mock for now + const subject = `🤖 forAgents.dev Daily Digest — ${today}`; + + for (const subscriber of subscribers) { + if (!subscriber.email) continue; + + try { + const { error } = await resend.emails.send({ + from: FROM_EMAIL, + to: subscriber.email, + subject, + html: emailHtml, + replyTo: REPLY_TO, + }); + + if (error) { + results.failed++; + results.errors.push(`${subscriber.handle}: ${error.message}`); + } else { + results.sent++; + } + } catch (err) { + results.failed++; + results.errors.push(`${subscriber.handle}: Failed to send`); + console.error('Digest send failed:', err); + } + } console.log(`Digest sent: ${results.sent}/${results.total}`); return NextResponse.json({ - success: true, + success: results.failed === 0, results, }); } catch (error) {