From fa94e92af56e81716d4543fe3106e7899a1165bd Mon Sep 17 00:00:00 2001 From: Ryan Salazar Date: Wed, 20 May 2026 06:14:02 +0000 Subject: [PATCH] chore: purge all rocket.new references from source - Replace img.rocket.new mock URLs in authors/[slug] + FeaturedBento with /assets/images/article-placeholder.svg (live DB data drives these pages now; the static maps are fallback only). - Replace broadcastb5322.builtwithrocket.new with broadcastbeat.com in admin API routes, news detail, forum layout, and the 4 Supabase edge functions that build outbound email links. - Swap rocket-hosted JSON-LD logo URL in root layout for the local /assets/images/logo.png we already ship. - Drop img.rocket.new from the Next.js image-hosts allowlist; add supabase.onsethost.com so storage proxy URLs can render. The DB has had zero rocket.new image refs for weeks; this finishes the job in the codebase so no page on broadcastbeat.com can render a rocket-hosted asset anymore. --- image-hosts.config.js | 4 +-- src/app/api/admin/articles/route.ts | 4 +-- .../admin/company-coverage-reminder/route.ts | 4 +-- src/app/api/admin/suspensions/route.ts | 2 +- src/app/api/admin/users/route.ts | 2 +- src/app/authors/[slug]/page.tsx | 32 +++++++++---------- src/app/forum/layout.tsx | 8 ++--- .../home-page/components/FeaturedBento.tsx | 22 ++++++------- src/app/layout.tsx | 2 +- .../news/[slug]/NewsArticleDetailClient.tsx | 4 +-- .../send-article-notification/index.ts | 2 +- .../send-contributor-invite/index.ts | 2 +- .../send-newsletter-confirmation/index.ts | 2 +- .../functions/send-weekly-digest/index.ts | 14 ++++---- 14 files changed, 52 insertions(+), 52 deletions(-) diff --git a/image-hosts.config.js b/image-hosts.config.js index 579591e..54b96ca 100644 --- a/image-hosts.config.js +++ b/image-hosts.config.js @@ -17,11 +17,11 @@ export const imageHosts = [ }, { protocol: 'https', - hostname: 'img.rocket.new', + hostname: '*.supabase.co', }, { protocol: 'https', - hostname: '*.supabase.co', + hostname: 'supabase.onsethost.com', }, { protocol: 'https', diff --git a/src/app/api/admin/articles/route.ts b/src/app/api/admin/articles/route.ts index 128ddf0..f174777 100644 --- a/src/app/api/admin/articles/route.ts +++ b/src/app/api/admin/articles/route.ts @@ -81,7 +81,7 @@ export async function POST(req: NextRequest) { // Trigger article publish notification if published immediately if (status === 'published' && data) { try { - const siteUrl = process.env.NEXT_PUBLIC_SITE_URL || 'https://broadcastb5322.builtwithrocket.new'; + const siteUrl = process.env.NEXT_PUBLIC_SITE_URL || 'https://broadcastbeat.com'; fetch(`${siteUrl}/api/newsletter/notify-article`, { method: 'POST', headers: { @@ -152,7 +152,7 @@ export async function PATCH(req: NextRequest) { .single(); if (articleData) { - const siteUrl = process.env.NEXT_PUBLIC_SITE_URL || 'https://broadcastb5322.builtwithrocket.new'; + const siteUrl = process.env.NEXT_PUBLIC_SITE_URL || 'https://broadcastbeat.com'; // Fire-and-forget: call notify-article route internally fetch(`${siteUrl}/api/newsletter/notify-article`, { method: 'POST', diff --git a/src/app/api/admin/company-coverage-reminder/route.ts b/src/app/api/admin/company-coverage-reminder/route.ts index f6e042f..8005b89 100644 --- a/src/app/api/admin/company-coverage-reminder/route.ts +++ b/src/app/api/admin/company-coverage-reminder/route.ts @@ -31,12 +31,12 @@ export async function POST(request: NextRequest) { ${moreText} - Review Story Queue โ†’

- Manage settings at Company Tracker + Manage settings at Company Tracker

`, diff --git a/src/app/api/admin/suspensions/route.ts b/src/app/api/admin/suspensions/route.ts index e57c8f9..68a7d73 100644 --- a/src/app/api/admin/suspensions/route.ts +++ b/src/app/api/admin/suspensions/route.ts @@ -2,7 +2,7 @@ import { NextRequest, NextResponse } from 'next/server'; import { createClient } from '@/lib/supabase/server'; import nodemailer from 'nodemailer'; -const siteUrl = process.env.NEXT_PUBLIC_SITE_URL || 'https://broadcastb5322.builtwithrocket.new'; +const siteUrl = process.env.NEXT_PUBLIC_SITE_URL || 'https://broadcastbeat.com'; async function sendSuspensionEmail( email: string, diff --git a/src/app/api/admin/users/route.ts b/src/app/api/admin/users/route.ts index 693e63a..c9a39f8 100644 --- a/src/app/api/admin/users/route.ts +++ b/src/app/api/admin/users/route.ts @@ -107,7 +107,7 @@ export async function POST(req: NextRequest) { // Send email via Supabase Edge Function const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL; const supabaseAnonKey = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY; - const siteUrl = process.env.NEXT_PUBLIC_SITE_URL || 'https://broadcastb5322.builtwithrocket.new'; + const siteUrl = process.env.NEXT_PUBLIC_SITE_URL || 'https://broadcastbeat.com'; try { const emailRes = await fetch(`${supabaseUrl}/functions/v1/send-contributor-invite`, { diff --git a/src/app/authors/[slug]/page.tsx b/src/app/authors/[slug]/page.tsx index ffb2f7e..462043a 100644 --- a/src/app/authors/[slug]/page.tsx +++ b/src/app/authors/[slug]/page.tsx @@ -59,8 +59,8 @@ const authors: Record = { slug: "staff-reporter", name: "Broadcast Beat", title: "Broadcast Beat Editorial Team", - avatar: "https://img.rocket.new/generatedImages/rocket_gen_img_1aa16f5c7-1766559876206.png", - coverImage: "https://img.rocket.new/generatedImages/rocket_gen_img_1aa16f5c7-1766559876206.png", + avatar: "/assets/images/article-placeholder.svg", + coverImage: "/assets/images/article-placeholder.svg", bio: "The Broadcast Beat editorial team covers breaking news and product announcements from across the broadcast technology industry. Our team of experienced journalists and industry insiders brings you the latest developments from NAB, IBC, and beyond.", location: "Global", joinedDate: "December 2013", @@ -76,8 +76,8 @@ const authors: Record = { slug: "james-whitfield", name: "James Whitfield", title: "Senior Technology Correspondent", - avatar: "https://img.rocket.new/generatedImages/rocket_gen_img_19e7400b1-1772340616911.png", - coverImage: "https://img.rocket.new/generatedImages/rocket_gen_img_19e7400b1-1772340616911.png", + avatar: "/assets/images/article-placeholder.svg", + coverImage: "/assets/images/article-placeholder.svg", bio: "James Whitfield is a senior technology correspondent with over 15 years of experience covering the broadcast and media technology industry. He specializes in ad tech, monetization strategies, and the business of broadcasting. James has interviewed hundreds of industry leaders and covered every major broadcast technology event since 2010.", location: "New York, NY", joinedDate: "March 2018", @@ -144,8 +144,8 @@ const authors: Record = { slug: "marcus-rivera", name: "Marcus Rivera", title: "Sports Broadcasting Correspondent", - avatar: "https://img.rocket.new/generatedImages/rocket_gen_img_14648a787-1772373242232.png", - coverImage: "https://img.rocket.new/generatedImages/rocket_gen_img_14648a787-1772373242232.png", + avatar: "/assets/images/article-placeholder.svg", + coverImage: "/assets/images/article-placeholder.svg", bio: "Marcus Rivera covers sports broadcasting technology for Broadcast Beat, with a particular focus on live production, fan engagement, and the evolving landscape of sports media rights. He brings a unique perspective that combines technical knowledge with an understanding of the sports media business.", location: "Miami, FL", joinedDate: "April 2020", @@ -167,7 +167,7 @@ const authorArticles: Record = { excerpt: "New cloud-native platform extends Telestream Cloud Services to support Global Ingest, automation, review, and real-time monitoring.", category: "BROADCAST", date: "March 11, 2026", - image: "https://img.rocket.new/generatedImages/rocket_gen_img_11ff3d2ff-1773287949660.png", + image: "/assets/images/article-placeholder.svg", alt: "Cloud services infrastructure for broadcast production environments", readTime: "4 min read" }, @@ -177,7 +177,7 @@ const authorArticles: Record = { excerpt: "No-code application builder designed to transform complex live data into immersive interactive storytelling experiences.", category: "BROADCAST", date: "March 8, 2026", - image: "https://img.rocket.new/generatedImages/rocket_gen_img_188669b2b-1773287951738.png", + image: "/assets/images/article-placeholder.svg", alt: "Interactive data storytelling platform for broadcast and enterprise use", readTime: "3 min read" }, @@ -187,7 +187,7 @@ const authorArticles: Record = { excerpt: "New distributed architecture addresses the growing demand for scalable, resilient live IP transport solutions.", category: "BROADCAST", date: "March 7, 2026", - image: "https://img.rocket.new/generatedImages/rocket_gen_img_1876db6da-1773287949606.png", + image: "/assets/images/article-placeholder.svg", alt: "Network infrastructure for distributed video gateway IP transport system", readTime: "3 min read" }], @@ -199,7 +199,7 @@ const authorArticles: Record = { excerpt: "Enterprise-grade intelligent ad management built to scale digital-first revenue across every channel.", category: "BROADCAST", date: "March 11, 2026", - image: "https://img.rocket.new/generatedImages/rocket_gen_img_1805d1575-1773287951103.png", + image: "/assets/images/article-placeholder.svg", alt: "Digital monetization analytics dashboard for broadcast advertising", readTime: "5 min read" }, @@ -209,7 +209,7 @@ const authorArticles: Record = { excerpt: "Purpose-driven solutions designed to help broadcasters reduce operational costs while improving content monetization.", category: "BROADCAST", date: "March 5, 2026", - image: "https://img.rocket.new/generatedImages/rocket_gen_img_12c71bf4d-1768883320639.png", + image: "/assets/images/article-placeholder.svg", alt: "Broadcast technology monetization solutions at NAB Show 2026", readTime: "4 min read" }], @@ -221,7 +221,7 @@ const authorArticles: Record = { excerpt: "The broadcast industry is going through a rapid evolution that's signalling a more collaborative and location-independent future.", category: "BROADCAST", date: "March 10, 2026", - image: "https://img.rocket.new/generatedImages/rocket_gen_img_10468e182-1773287953747.png", + image: "/assets/images/article-placeholder.svg", alt: "Calrec audio mixing console for broadcast production at NAB 2026", readTime: "6 min read" }], @@ -233,7 +233,7 @@ const authorArticles: Record = { excerpt: "Strategic conversations about content performance and audience intelligence are shifting the way media organizations approach their metadata strategies.", category: "FEATURED", date: "March 9, 2026", - image: "https://img.rocket.new/generatedImages/rocket_gen_img_1c523ae5f-1773287954372.png", + image: "/assets/images/article-placeholder.svg", alt: "Media metadata intelligence and content analytics visualization", readTime: "8 min read" }, @@ -243,7 +243,7 @@ const authorArticles: Record = { excerpt: "Advancing Semantic Intelligence capabilities to help studios and networks unlock greater value from their content libraries.", category: "POST PRODUCTION", date: "March 9, 2026", - image: "https://img.rocket.new/generatedImages/rocket_gen_img_19f6e3fe6-1769744394519.png", + image: "/assets/images/article-placeholder.svg", alt: "Content management system for media title management and monetization", readTime: "5 min read" }], @@ -255,7 +255,7 @@ const authorArticles: Record = { excerpt: "Annual media statistics report reveals video's growing dominance in enterprise storage requirements.", category: "FEATURED", date: "March 6, 2026", - image: "https://img.rocket.new/generatedImages/rocket_gen_img_140568f68-1773287953452.png", + image: "/assets/images/article-placeholder.svg", alt: "Video storage statistics and media asset management data visualization", readTime: "5 min read" }], @@ -267,7 +267,7 @@ const authorArticles: Record = { excerpt: "Real-time fan engagement enhances viewing and accelerates growth of the world's fastest-growing racket sport.", category: "BROADCAST", date: "March 10, 2026", - image: "https://img.rocket.new/generatedImages/rocket_gen_img_1747232a3-1773287951222.png", + image: "/assets/images/article-placeholder.svg", alt: "Interactive sports broadcast experience on streaming platform", readTime: "4 min read" }] diff --git a/src/app/forum/layout.tsx b/src/app/forum/layout.tsx index 07bdfb3..9e6b2b1 100644 --- a/src/app/forum/layout.tsx +++ b/src/app/forum/layout.tsx @@ -23,17 +23,17 @@ export default function ForumLayout({ children }: { children: React.ReactNode }) '@type': 'WebPage', name: 'Broadcast Beat โ€” The Crew Lounge', description: 'The Crew Lounge: an industry community for broadcast, motion picture and post production professionals worldwide.', - url: 'https://broadcastb5322.builtwithrocket.new/forum', + url: 'https://broadcastbeat.com/forum', isPartOf: { '@type': 'WebSite', name: 'Broadcast Beat', - url: 'https://broadcastb5322.builtwithrocket.new', + url: 'https://broadcastbeat.com', }, breadcrumb: { '@type': 'BreadcrumbList', itemListElement: [ - { '@type': 'ListItem', position: 1, name: 'Home', item: 'https://broadcastb5322.builtwithrocket.new' }, - { '@type': 'ListItem', position: 2, name: 'The Crew Lounge', item: 'https://broadcastb5322.builtwithrocket.new/forum' }, + { '@type': 'ListItem', position: 1, name: 'Home', item: 'https://broadcastbeat.com' }, + { '@type': 'ListItem', position: 2, name: 'The Crew Lounge', item: 'https://broadcastbeat.com/forum' }, ], }, }; diff --git a/src/app/home-page/components/FeaturedBento.tsx b/src/app/home-page/components/FeaturedBento.tsx index abb303c..33362cd 100644 --- a/src/app/home-page/components/FeaturedBento.tsx +++ b/src/app/home-page/components/FeaturedBento.tsx @@ -47,77 +47,77 @@ const rotatingStories = [ { title: "Telestream Expands Its Cloud Services with the Introduction of UP", category: "BROADCAST", - image: "https://img.rocket.new/generatedImages/rocket_gen_img_11ff3d2ff-1773287949660.png", + image: "/assets/images/article-placeholder.svg", alt: "Cloud services infrastructure for broadcast production environments", slug: "telestream-expands-cloud-services-up", }, { title: "Operative Launches AOS Configuration for Digital-First Monetization", category: "BROADCAST", - image: "https://img.rocket.new/generatedImages/rocket_gen_img_1805d1575-1773287951103.png", + image: "/assets/images/article-placeholder.svg", alt: "Digital monetization analytics dashboard for broadcast advertising", slug: "operative-launches-aos-configuration", }, { title: "Calrec Redefines Broadcast Workflows at NAB 2026 with its Most Powerful Audio Lineup Yet", category: "BROADCAST", - image: "https://img.rocket.new/generatedImages/rocket_gen_img_10468e182-1773287953747.png", + image: "/assets/images/article-placeholder.svg", alt: "Calrec audio mixing console for broadcast production at NAB 2026", slug: "calrec-redefines-broadcast-workflows-nab-2026", }, { title: "Ease Live Powers Interactive Premier Padel Experiences on Red Bull TV as Viewership Surges 30%", category: "BROADCAST", - image: "https://img.rocket.new/generatedImages/rocket_gen_img_1747232a3-1773287951222.png", + image: "/assets/images/article-placeholder.svg", alt: "Interactive sports broadcast experience on streaming platform", slug: "ease-live-premier-padel-red-bull-tv", }, { title: "From Metadata to Meaning: Why Semantic Intelligence Is Media\'s Next Competitive Advantage", category: "FEATURED", - image: "https://img.rocket.new/generatedImages/rocket_gen_img_1c523ae5f-1773287954372.png", + image: "/assets/images/article-placeholder.svg", alt: "Media metadata intelligence and content analytics visualization", slug: "from-metadata-to-meaning-semantic-intelligence", }, { title: "Mediagenix Title Management Accelerates Content Monetization Through Advanced Semantic Intelligence", category: "POST PRODUCTION", - image: "https://img.rocket.new/generatedImages/rocket_gen_img_19f6e3fe6-1769744394519.png", + image: "/assets/images/article-placeholder.svg", alt: "Content management system for media title management and monetization", slug: "mediagenix-title-management", }, { title: "Emergent Launches Fusion: The \'Interactive Anything\' Platform Transforming Data-Driven Storytelling", category: "BROADCAST", - image: "https://img.rocket.new/generatedImages/rocket_gen_img_188669b2b-1773287951738.png", + image: "/assets/images/article-placeholder.svg", alt: "Interactive data storytelling platform for broadcast and enterprise use", slug: "emergent-launches-fusion-platform", }, { title: "Matrox Video Enables the Next Era of Software-Defined Media Production at NAB 2026", category: "BROADCAST", - image: "https://img.rocket.new/generatedImages/rocket_gen_img_17266f6cf-1773287953058.png", + image: "/assets/images/article-placeholder.svg", alt: "Matrox video production hardware and software at NAB 2026 exhibition", slug: "matrox-video-software-defined-nab-2026", }, { title: "Video is King: 2026 Iconik Media Stats Report Finds Video Consumes 64% of Storage Needs", category: "FEATURED", - image: "https://img.rocket.new/generatedImages/rocket_gen_img_140568f68-1773287953452.png", + image: "/assets/images/article-placeholder.svg", alt: "Video storage statistics and media asset management data visualization", slug: "video-is-king-2026-iconik-media-stats", }, { title: "QuickLink\'s Latest StudioEdge Models to Make North American Debut at NAB 2026", category: "BROADCAST", - image: "https://img.rocket.new/generatedImages/rocket_gen_img_19c4ba922-1773287953682.png", + image: "/assets/images/article-placeholder.svg", alt: "QuickLink StudioEdge broadcast production equipment at NAB exhibition", slug: "quicklink-studioedge-nab-2026", }, { title: "Utah Scientific Expands Technology Partner Program With Integrations From Audinate, Bitfocus, and Skaarhoj", category: "BROADCAST", - image: "https://img.rocket.new/generatedImages/rocket_gen_img_1ea12f02f-1768375990494.png", + image: "/assets/images/article-placeholder.svg", alt: "Broadcast routing and control system technology partner integration", slug: "utah-scientific-partner-program", }, diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 416582b..f364129 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -95,7 +95,7 @@ export default function RootLayout({ '@type': 'Organization', name: 'Broadcast Beat', url: 'https://broadcastbeat.com', - logo: "https://img.rocket.new/generatedImages/rocket_gen_img_1ab0c6b82-1768715893826.png", + logo: "https://broadcastbeat.com/assets/images/logo.png", description: 'The digital platform for broadcast engineering professionals. Breaking news, deep-dive features, and industry spotlights from NAB to IBC and beyond.', sameAs: [ 'https://linkedin.com', diff --git a/src/app/news/[slug]/NewsArticleDetailClient.tsx b/src/app/news/[slug]/NewsArticleDetailClient.tsx index 855cade..4e599a4 100644 --- a/src/app/news/[slug]/NewsArticleDetailClient.tsx +++ b/src/app/news/[slug]/NewsArticleDetailClient.tsx @@ -226,7 +226,7 @@ export default function NewsArticleDetailClient({ setEmailSending(true); setEmailStatus("idle"); try { - const articleUrl = `${process.env.NEXT_PUBLIC_SITE_URL || "https://broadcastb5322.builtwithrocket.new"}/news/${article.slug}`; + const articleUrl = `${process.env.NEXT_PUBLIC_SITE_URL || "https://broadcastbeat.com"}/news/${article.slug}`; const res = await fetch("/api/news/share-email", { method: "POST", headers: { "Content-Type": "application/json" }, @@ -262,7 +262,7 @@ export default function NewsArticleDetailClient({ const articleUrl = typeof window !== "undefined" ? window.location.href - : `https://broadcastb5322.builtwithrocket.new/news/${article.slug}`; + : `https://broadcastbeat.com/news/${article.slug}`; return (
diff --git a/supabase/functions/send-article-notification/index.ts b/supabase/functions/send-article-notification/index.ts index f56e954..4d46032 100644 --- a/supabase/functions/send-article-notification/index.ts +++ b/supabase/functions/send-article-notification/index.ts @@ -34,7 +34,7 @@ serve(async (req) => { throw new Error("RESEND_API_KEY is not set"); } - const siteUrl = "https://broadcastb5322.builtwithrocket.new"; + const siteUrl = "https://broadcastbeat.com"; const articleUrl = article.slug ? `${siteUrl}/articles/${article.slug}` : article.wp_slug diff --git a/supabase/functions/send-contributor-invite/index.ts b/supabase/functions/send-contributor-invite/index.ts index 07b467a..4da029f 100644 --- a/supabase/functions/send-contributor-invite/index.ts +++ b/supabase/functions/send-contributor-invite/index.ts @@ -20,7 +20,7 @@ serve(async (req) => { throw new Error("RESEND_API_KEY is not set"); } - const acceptUrl = `${siteUrl || "https://broadcastb5322.builtwithrocket.new"}/invite/accept?token=${token}`; + const acceptUrl = `${siteUrl || "https://broadcastbeat.com"}/invite/accept?token=${token}`; const roleLabel = role === "editor" ? "Editor" : role === "admin" ? "Administrator" : "Contributor"; diff --git a/supabase/functions/send-newsletter-confirmation/index.ts b/supabase/functions/send-newsletter-confirmation/index.ts index 4b3ae42..7087c6b 100644 --- a/supabase/functions/send-newsletter-confirmation/index.ts +++ b/supabase/functions/send-newsletter-confirmation/index.ts @@ -65,7 +65,7 @@ serve(async (req) => {

Your selected topics:

${topicsList}
- + Read Latest News โ†’ diff --git a/supabase/functions/send-weekly-digest/index.ts b/supabase/functions/send-weekly-digest/index.ts index 407272e..2ab199c 100644 --- a/supabase/functions/send-weekly-digest/index.ts +++ b/supabase/functions/send-weekly-digest/index.ts @@ -185,7 +185,7 @@ function buildDigestHtml(params: {
- Visit the Forum + Visit the Forum
@@ -196,9 +196,9 @@ function buildDigestHtml(params: {

You're receiving this because you opted in to the weekly digest.

- Manage email preferences + Manage email preferences ยท - BroadcastBeat + BroadcastBeat @@ -274,7 +274,7 @@ serve(async (req) => { const replies = (repliesRaw ?? []).map((r: any) => ({ thread_title: r.forum_threads?.title ?? "Thread", reply_body: r.body ?? "", - link: `https://broadcastb5322.builtwithrocket.new/forum/thread/${r.thread_id}`, + link: `https://broadcastbeat.com/forum/thread/${r.thread_id}`, created_at: r.created_at, })); @@ -301,7 +301,7 @@ serve(async (req) => { const key = v.target_id; const title = (v as any).forum_threads?.title ?? "Thread"; if (!upvoteMap.has(key)) { - upvoteMap.set(key, { target_type: "thread", title, link: `https://broadcastb5322.builtwithrocket.new/forum/thread/${v.target_id}`, count: 0 }); + upvoteMap.set(key, { target_type: "thread", title, link: `https://broadcastbeat.com/forum/thread/${v.target_id}`, count: 0 }); } upvoteMap.get(key)!.count++; } @@ -310,7 +310,7 @@ serve(async (req) => { const threadId = (v as any).forum_replies?.thread_id; const title = (v as any).forum_replies?.forum_threads?.title ?? "Reply"; if (!upvoteMap.has(key)) { - upvoteMap.set(key, { target_type: "reply", title, link: `https://broadcastb5322.builtwithrocket.new/forum/thread/${threadId}`, count: 0 }); + upvoteMap.set(key, { target_type: "reply", title, link: `https://broadcastbeat.com/forum/thread/${threadId}`, count: 0 }); } upvoteMap.get(key)!.count++; } @@ -329,7 +329,7 @@ serve(async (req) => { const mentions = (mentionsRaw ?? []).map((m: any) => ({ thread_title: m.body ?? m.title ?? "Thread", actor_name: m.actor_name ?? "Someone", - link: m.link ?? "https://broadcastb5322.builtwithrocket.new/forum", + link: m.link ?? "https://broadcastbeat.com/forum", created_at: m.created_at, }));