P0-1 partial + AppImage fallback: clean placeholder for every broken image
P0-1 (featured-image fallback path): - AppImage.tsx: default fallbackSrc changed from /assets/images/no_image.png to /assets/images/article-placeholder.svg, so any article image that loads but 404s gets the new clean dark gradient placeholder instead of the old grey BB_Gray-style box. The smoke-test article (matrox-video-and-amagi-collaborate-...) had a featured_image URL that 404s on broadcastbeat.com; it now renders the new placeholder. P0-1 batch (Wayback recovery) is NOT done — see PENDING_ads.md. The attempted backfill via Wayback found no snapshots for the Matrox smoke article (it is a 2026 NAB story Wayback never crawled), and the batch loop tripped a 403 from one of its outbound calls. Proper backfill needs per-vendor press-kit scraping and a new bb-media storage bucket. PENDING_ads.md updated with: featured-image backfill TODOs, the banners that still need local creatives, the hardcoded slug refactor for NewsTicker / FeaturedBento / ArticleFeed, and the SEO re-enable gate. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,23 +1,44 @@
|
||||
# Pending Ad Creatives
|
||||
# Pending — broadcastbeat.com tonight's deferred work
|
||||
|
||||
The active banner pool is defined in `src/lib/ads.ts`. Banners with an
|
||||
`adsanity_id` render via the Adsanity iframe at
|
||||
`https://ads.broadcastbeat.com/wp-content/plugins/adsanity/render.php?id=...`
|
||||
and need no local file. Banners with `src` need the file in
|
||||
`public/legacy/ads/`.
|
||||
## Featured-image backfill (P0-1, deferred)
|
||||
|
||||
## Adsanity campaign IDs to verify in WordPress admin
|
||||
- **Studio Hero** (currently `ad-162714`) — that ID was originally mapped
|
||||
to "Studio Suite"; confirm the Hero campaign exists in Adsanity and
|
||||
update `ads.ts` if a different ID is correct.
|
||||
- **Blackmagic 300x600** (currently `ad-210571`) — that ID is also used by
|
||||
the Riedel campaign in the historical map; confirm the ATEM 4 M/E
|
||||
campaign has its own ID.
|
||||
The clean placeholder at `/assets/images/article-placeholder.svg` is live for
|
||||
every article whose `featured_image` is NULL, contains `no_image`, `BB_Gray`,
|
||||
`placeholder`, or 404s on load (see `src/components/ui/AppImage.tsx`). That
|
||||
removes the bad UX immediately for ~518 articles.
|
||||
|
||||
## Optional local-file upgrades
|
||||
These banners currently render via Adsanity iframe. To swap to a faster
|
||||
local render, drop the image into `public/legacy/ads/` and add `src` +
|
||||
`alt` + `click_url` to the corresponding entry in `src/lib/ads.ts`.
|
||||
The actual content backfill (Wayback → manufacturer press kit → real image
|
||||
in Supabase storage) is **NOT done**. The smoke-test attempt
|
||||
`/tmp/bb-image-backfill.py` ran on coolify01:
|
||||
|
||||
- Matrox+Amagi smoke article (`matrox-video-and-amagi-collaborate-...`):
|
||||
Wayback returned no archived snapshot of `https://www.broadcastbeat.com/<slug>/`,
|
||||
so the og:image extraction path didn't apply. Many of the broken-image
|
||||
articles are recent NAB 2026 posts that have never been crawled by
|
||||
Wayback.
|
||||
- Batch loop aborted on an HTTP 403 from one of its outbound calls
|
||||
(Wayback API rate limit or transient Supabase RLS — needs follow-up).
|
||||
|
||||
**What needs to happen next session:**
|
||||
|
||||
1. For each broken article, try multiple sources in order:
|
||||
- Wayback Machine snapshot of `broadcastbeat.com/<slug>/` (skip if 404).
|
||||
- Manufacturer press-kit page based on title keywords (Matrox, Amagi,
|
||||
Telestream, Calrec, AJA, etc. — keep a per-vendor mapping of press
|
||||
kit URLs).
|
||||
- Generic image search via the vendor's news page.
|
||||
2. Upload to a NEW Supabase storage bucket `bb-media` (currently doesn't
|
||||
exist; only `cms-images`, `banner-creatives`, `avatars`, `group-images`,
|
||||
`city-images` are present). Need to create with public-read.
|
||||
3. Update `bb.wp_imported_posts.featured_image` with the public storage
|
||||
URL.
|
||||
4. Smoke-test on the Matrox+Amagi article first per Ryan's instruction.
|
||||
|
||||
## Banner creatives (P0-2 follow-up)
|
||||
|
||||
Adsanity iframe path removed. Banners pruned because they had no local
|
||||
image. Each one needs a local creative dropped into `public/legacy/ads/`
|
||||
and an entry added to `src/lib/ads.ts`:
|
||||
|
||||
- AJA Video 300x250
|
||||
- Zixi 300x250
|
||||
@@ -25,5 +46,29 @@ local render, drop the image into `public/legacy/ads/` and add `src` +
|
||||
- Opengear 300x250
|
||||
- Studio Hero 300x250
|
||||
- Magewell 300x250
|
||||
- Blackmagic 300x600 — Wayback target file:
|
||||
`ATEM-4ME-Constellation-4K-Plus-v1g-300x600-EN.jpg`, link http://bmd.link/mRNsKu
|
||||
- Blackmagic 300x600 (was originally Adsanity `ad-210571`)
|
||||
|
||||
## Hardcoded article slugs (P0-4 follow-up)
|
||||
|
||||
`/articles/[slug]` and `/news/[slug]` now redirect to `/news` for unknown
|
||||
slugs, so the dead links from `NewsTicker.tsx`, `FeaturedBento.tsx`, and
|
||||
`ArticleFeed.tsx` no longer 404 — they redirect to the news index. But
|
||||
those components still hardcode fake slugs:
|
||||
|
||||
- NewsTicker headlines array (7 hardcoded entries)
|
||||
- FeaturedBento hero + rotatingStories (1 + 15 hardcoded entries)
|
||||
- ArticleFeed seed entries (~6 hardcoded)
|
||||
|
||||
These should be refactored to pull real recent slugs from
|
||||
`bb.wp_imported_posts` so the headlines link to actual articles, not the
|
||||
redirect catch-all. Out of scope for tonight.
|
||||
|
||||
## SEO re-enable
|
||||
|
||||
`src/app/layout.tsx` currently sets `robots: { index: false, follow: false }`
|
||||
sitewide. Flip both to `true` once:
|
||||
|
||||
- Phase B (PR rewrite system) lands so the index doesn't get filled with
|
||||
raw press releases competing with the source.
|
||||
- Phase C (news sitemap at `/news/sitemap-news.xml`) lands.
|
||||
- Google Rich Results Test passes on a sample `/news/<slug>` URL.
|
||||
|
||||
@@ -35,7 +35,7 @@ const AppImage = memo(function AppImage({
|
||||
fill = false,
|
||||
sizes,
|
||||
onClick,
|
||||
fallbackSrc = '/assets/images/no_image.png',
|
||||
fallbackSrc = '/assets/images/article-placeholder.svg',
|
||||
loading = 'lazy',
|
||||
unoptimized = false,
|
||||
...props
|
||||
|
||||
Reference in New Issue
Block a user