- Replaces the prior Rocket scaffold (saved on pre-bb-clone-rollback branch) - Domain: broadcastbeat.com -> avbeat.com - Brand: Broadcast Beat -> AV Beat - Slug: broadcastbeat -> avbeat (package, identifiers) - Schema fallback: bb -> av (env var name unchanged) - Placeholder AV BEAT logo (gold->red gradient) at /assets/logos/av.svg - All BB/RMP logo references repointed Outstanding before public DNS swap: - Supabase av schema bootstrap (mirror of bb tables) - WordPress archive import (avbeat-com -> av.articles) - Coolify env vars - dev-avbeat.onsethost.com staging deploy + visual review
40 lines
1.8 KiB
TypeScript
40 lines
1.8 KiB
TypeScript
import { NextRequest, NextResponse } from 'next/server';
|
|
import nodemailer from 'nodemailer';
|
|
|
|
export async function POST(request: NextRequest) {
|
|
try {
|
|
const { username, term } = await request.json();
|
|
|
|
const transport = nodemailer.createTransport({
|
|
host: process.env.SMTP_HOST,
|
|
port: parseInt(process.env.SMTP_PORT || '587'),
|
|
secure: false,
|
|
auth: { user: process.env.SMTP_USER, pass: process.env.SMTP_PASS },
|
|
});
|
|
|
|
await transport.sendMail({
|
|
from: `"${process.env.SMTP_FROM_NAME || 'AV Beat'}" <${process.env.SMTP_FROM_EMAIL}>`,
|
|
to: 'editor@avbeat.com',
|
|
subject: `[AV Beat] Blocked post attempt — banned term triggered`,
|
|
html: `
|
|
<div style="font-family:Arial,sans-serif;max-width:600px;background:#0a0a0a;color:#e5e5e5;padding:32px;border-radius:8px;">
|
|
<h2 style="color:#ef4444;margin:0 0 16px;">Blocked Post Attempt</h2>
|
|
<p style="color:#aaa;font-size:14px;line-height:1.6;">
|
|
A post submission was blocked by the banned terms system.
|
|
</p>
|
|
<div style="background:#111;border:1px solid #252525;border-radius:6px;padding:16px;margin:16px 0;">
|
|
<p style="margin:0 0 8px;color:#888;font-size:12px;text-transform:uppercase;letter-spacing:0.05em;">Details</p>
|
|
<p style="margin:0 0 6px;font-size:14px;color:#e5e5e5;"><strong>User:</strong> ${username}</p>
|
|
<p style="margin:0;font-size:14px;color:#e5e5e5;"><strong>Triggered term:</strong> ${term}</p>
|
|
</div>
|
|
<p style="color:#555;font-size:12px;">The post was saved as a draft. The contributor was shown a generic error message with no indication of the ban.</p>
|
|
</div>
|
|
`,
|
|
});
|
|
|
|
return NextResponse.json({ success: true });
|
|
} catch {
|
|
return NextResponse.json({ success: false });
|
|
}
|
|
}
|