Commit Graph

308 Commits

Author SHA1 Message Date
03134cdc69 About menu: Contact links to relevantmediaproperties.com/contact 2026-06-29 18:35:45 +00:00
aa0d9540e8 Feed: strict newest-first sort; promos are badges only 2026-06-29 05:45:46 +00:00
7a84c94c3b Articles: force-dynamic + notFound for deleted posts (no stale ISR) 2026-06-29 05:38:52 +00:00
4730439e38 Team page: table layout without photos 2026-06-27 00:29:35 +00:00
eb05918960 fix(forum): complete member profiles — counts, avatars, strip AI metadata 2026-06-26 23:46:59 +00:00
4acc068732 fix(forum): hide Ask AV Beat AI widget on Integration Room routes 2026-06-26 23:17:50 +00:00
ab6f3041fc fix(forum): remove AI assistant disclosure from Integration Room 2026-06-26 23:13:21 +00:00
ceb5333077 Industry News: server-render initial feed posts (fix 0 articles on load) 2026-06-26 19:45:38 +00:00
7d41eebf62 Footer: fix copyright punctuation and title case 2026-06-26 17:39:59 +00:00
9fcf10817f Footer: remove Relevant Media Properties text from copyright 2026-06-26 17:36:29 +00:00
545c782d37 Industry News: remove author search filter 2026-06-26 17:32:57 +00:00
3f00851908 Content Partners: fix Magewell logo (official wordmark, not RMP) 2026-06-26 17:18:17 +00:00
3f23447af7 Manufacturers directory: fix light-theme text contrast and filter bar 2026-06-25 16:22:40 +00:00
64600c4f28 Manufacturer profile: fix light-theme text contrast and BMD logo 2026-06-25 16:15:36 +00:00
ce68699839 Content Partners: align with newsletter; Blackmagic PNG logo for dark band 2026-06-25 16:04:09 +00:00
423ec363d5 Content Partners: dark #0d1520 band matching Industry News section 2026-06-25 14:35:14 +00:00
b1baf2fd10 Content Partners: match Broadcast Beat partner logos (bb schema + broadcastbeat advertisers) 2026-06-25 14:15:39 +00:00
RMP Ops
8719b62808 ads: adopt canonical RMP BannerTracking (AdSanity-style gross + viewport dedup) 2026-06-18 03:26:26 +00:00
2623fbe4ac ads: pin aja-colorbox-300x250 as the first banner in every 300x250 rotation 2026-06-16 18:11:13 +00:00
b9621ede1a footer: surface RMP lockup next to RMP mention (light/dark-aware RmpMark) 2026-06-16 00:46:48 +00:00
f1e582610b newsletter: cross-property auto-subscribe disclosure on AV signup widgets 2026-06-15 21:07:27 +00:00
c9013249eb image-hosts: allow broadcastbeat.com + advertising.RMP
AV beat banners point at images on broadcastbeat.com and on
advertising.relevantmediaproperties.com. Without these in the Next.js
remotePatterns allowlist, /_next/image proxy returns 400 and the page
falls back to article-placeholder-v2.svg.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-12 02:52:42 +00:00
c3b2c284b5 fix: forum login social auth button text color was white-on-white
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-05 21:21:53 +00:00
36dc2577bd fix(contact): editorial email → editor@relevantmediaproperties.com
Per Ryan 2026-06-05. The avbeat-domain editor@ address routed to the
local AVB mailbox; RMP-wide editorial inbox is the canonical destination
going forward. Single href + display-text change on /about/contact.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-05 14:55:57 +00:00
91e60caa60 fix: /manufacturers UI cleanup + /about/team phone formatting + /about media-kit link
Three pointed fixes:

/manufacturers (cloned from BB; still had broadcast vibe)
  • Drop the hardcoded "NAB + IBC" filter chip.
  • Per-card "2026 NAB Show" / "IBC 2026" badges replaced by dynamic
    pills generated from shows_attending intersected with av.events
    (so each card now shows the actual AV shows that exhibitor is
    attending — InfoComm, CEDIA, ISE, DSE, etc.).
  • Page intro counts: drop nabCount / ibcCount hardcoding, compute
    "top 3 shows by exhibitor count" from the data and surface those
    counts dynamically. With only InfoComm 2026 currently tagged the
    line reads "851 at InfoComm 2026" — adds more rows once other
    shows are scraped.
  • Meta description + OG: pro-AV / display / signage instead of
    "broadcast, post-production, and live-production."

/about/team phone formatting
  • New formatPhone() helper: E.164 → "(213) 418-2600" pattern.
  • Extension format: ", Ext. NNN" (capital E, comma-separated).
  • tel: link still uses the raw digits + RFC-3966 ',ext' pause for
    PBX auto-dial on supported clients.

/about page media-kit link
  • Was href="/about/advertise" — a relative path that 404s (no such
    route exists). Replaced with the absolute media-kit URL on
    relevantmediaproperties.com that the /advertise + /about/contact
    pages already use. Opens in a new tab.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-05 14:53:54 +00:00
a63a5db6d3 fix(show-coverage): white show-title on dark card (was inheriting dark navy)
/show-coverage cards have bg-[#0b0f17] but the H3 had no color, so it
inherited text-[#0F172A] from the page wrapper — dark-on-dark, unreadable.
Forced text-white to match the header's main-menu text color.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-05 14:48:12 +00:00
8d548bdc9d fix(av-beat): skip_rewrite passthrough — Mike Nann (Writeturn) now publishes verbatim w/ noindex
Mike Nann's distribute.users record has skip_rewrite=true (set when task
#19 added the column). distribute-rmp's submit route forwards the flag
in its payload (task #20). BB's receive route handles it (task #21).
AV Beat's receive route was missing the branch entirely AND was writing
to .schema('bb') instead of 'av' — a copy-paste bug from when this file
was cloned from BB. So every Mike Nann submission to AV Beat was either
landing in BB's schema (wrong) or trying to and failing.

Fixed in this commit:

src/app/api/submission-receive/route.ts
  • .schema('bb')  →  .schema('av')   (the copy-paste bug)
  • Added skip_rewrite branch: when payload has skip_rewrite=true,
    insert straight into av.wp_imported_posts with status=published,
    noindex=true, and the contributor's firm/contact_name as byline.
    Skips the native_articles → AI-rewrite path entirely. Mirrors BB's
    pattern exactly. Audit row still written to original_submissions.

src/lib/articles/types.ts
  • Article.noindex?: boolean — surfaces the DB column to the renderer.

src/lib/articles/legacy-source.ts
  • SELECT_COLS adds noindex
  • ImportedPostRow gains noindex field
  • rowToArticle propagates !!row.noindex

src/app/news/[slug]/page.tsx + src/app/articles/[slug]/page.tsx
  • generateMetadata: when article.noindex, set robots = no-index +
    no-follow + nocache + googleBot no-image-index + other meta key
    "googlebot-news": "noindex". Matches BB's pattern.

src/app/news-sitemap.xml/route.ts
  • Adds .or('noindex.is.null,noindex.eq.false') so passthrough rows
    don't pollute the Google News sitemap.

src/app/rss/route.ts
  • Filters out a.noindex before emitting items.

Mike's existing user record is already flagged (DB verified), so the
moment this deploys + he submits, the next press release publishes
verbatim, gets noindex on every Google/social surface, and shows up
on the AV Beat news index without going through the AI rewrite job.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-05 14:32:04 +00:00
45cf96a203 feat(admin): mobile-friendly admin shell + promote-on-social MVP
Mobile admin chrome
- New <AdminShell> component: sticky dark top bar w/ hamburger that opens
  a right-side drawer listing every admin section grouped by area
  (Content / Editorial / Companies / Newsletter / AdOps / Accounting /
  People). Closes on route change, Esc, or backdrop tap. Body scroll
  locks while open.
- Wrapped /admin (dashboard) and /admin/articles with the shell. Other
  admin pages still render their own layouts — they'll get the wrapper
  in follow-ups; the shell sits ABOVE them so nothing breaks today.

Promote-story MVP (share URLs, no OAuth yet)
- New /admin/promote/[slug] page: per-article promote sheet w/ one button
  per platform. Each uses that platform's standard share URL:
    • LinkedIn  → /sharing/share-offsite/?url=
    • X         → /intent/tweet?text=…&url=…&hashtags=…
    • Facebook  → /sharer/sharer.php?u=…
    • Instagram → copies caption to clipboard + opens instagram:// camera
    • Email     → mailto: with subject + body pre-filled
  On iPhone each button opens the platform's native app via universal
  link. No OAuth, no API keys, works tonight.
- New "Promote" action button on every published article row in
  /admin/articles — links to /admin/promote/<slug>.

Next session
- Meta OAuth (Facebook Page + IG Business) — Ryan to register the Meta
  App in Business Suite first, then we wire one-tap server-side posting.
- LinkedIn OAuth + Marketing API.
- X paid API ($100/mo Basic decision pending).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-04 23:06:14 +00:00
a8dc457742 fix(mobile): mobile menu unreadable + secondary nav overflowing + forum auth white-on-light
Critical mobile bugs flagged from an iPhone screenshot.

1) Mobile hamburger menu — all main nav items (HOME / SHOW COVERAGE /
   DIRECTORY / FORUM / READING LIST) were `text-white` on
   `bg-[#F8FAFC]`, i.e. white-on-light. Effectively invisible. Legacy
   styling from the dark-theme era that never got updated. Flipped to
   `text-[#0F172A]` + `hover:bg-[#FFFFFF]` + `border-[#DCE6F2]` to match
   the My Profile / WP Import links right below them that were already
   correctly themed.

2) Secondary top nav (social icons / language switcher / Sign In + Join
   / newsletter email input) was a single h-8 flex row that always
   rendered — on a phone-width viewport the row spills the email input
   off the right edge. Added `hidden md:flex` so the whole bar
   disappears on mobile. Affordances stay reachable via the hamburger
   menu, in-forum Sign In/Join buttons, and the footer.

3) Forum auth pages (login, register, forgot-password, reset-password)
   had `text-white` on every H1 AND on every form input that uses
   `bg-[#F8FAFC]`. So users opening any of those four pages saw a blank
   white card with invisible labels and couldn't see what they were
   typing into the password fields. Same dark-theme regression as #1.
   Blanket-replaced `text-white` with `text-[#0F172A]` across all four
   files, then restored `text-white` only inside classNames that also
   contain `bg-[#1D4ED8]` / `bg-[#1E3A8A]` / `brand-gradient` (the
   submit buttons — those WERE correct).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-04 22:22:18 +00:00
761ebf0cdc fix(placeholder): rename SVG to bust Cloudflare cache
The new A-monogram placeholder shipped in d8ca8ff was correct in the
deployed container, but Cloudflare was serving the previous cached SVG
(cf-cache-status: HIT, last-modified from this morning) because the
account token doesn't carry Zone:Cache Purge scope, so we couldn't
issue an API purge.

Renaming the file to article-placeholder-v2.svg gives CF a fresh URL
to cache, sidestepping the missing-permission entirely. Updated all
6 referencing files (AppImage fallback, legacy-source FALLBACK_IMAGE
constants, FeaturedBento[FromDb], manufacturers/authors pages).

Old file (cached as the old wordmark) just becomes a dangling asset —
not referenced from anywhere, harmless.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-04 21:44:20 +00:00
d8ca8ff3ec fix(article-detail): sidebar column width + placeholder using new mark
Two pointed bugs on the article detail page:

1) Width alignment. The right-rail Related Articles and Related Forum
   Posts boxes were free-stretching to the lg:col-span-4 width while the
   SidebarAdStack below them rendered ads at their natural 300px (items-
   end, right-aligned). The visual result: boxes overhung the ad column
   on both edges. Wrapped each sidebar in an inner `w-full lg:w-[300px]
   lg:ml-auto` div so every block (ads + boxes + newsletter) shares one
   300px column on lg+ and stays full-width on mobile. Applied to both
   article templates (/articles/[slug] and /news/[slug]).

2) Placeholder rendered the old "AV BEAT" wordmark when an article had no
   featured image. Rebuilt article-placeholder.svg around the new brand
   mark — the A-monogram tile with the blue gradient (#2563EB→#1E3A8A)
   that matches AnimatedLogo + the rest of the brand-gradient system.
   Same 1200×630 dimensions so OG/feed embeds aren't affected.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-04 20:34:30 +00:00
3a65e776ac fix(ai-disclosure): remove every visible "AI persona" reference + team-card visibility
Two unrelated production bugs called out in the same review pass:

1) AI persona disclosure — strictly removed everywhere readers see it.
   - /about/team hero subtitle no longer says "trained AI personas working
     under house style"; copy now reads like every other newsroom team page.
   - /about "How we work" block drops the line about AI assistants
     rewriting press releases + the "Our AI personas are clearly labeled"
     sentence. Reworded to just describe the editorial process.
   - ArticleComments no longer renders the small "AI" chip beside
     is_ai_seeded commenters. The flag stays in the DB for internal
     accounting; it just doesn't surface in the UI.
   - Stale code comments in articles/[slug] + news/[slug] that referenced
     "AI personas participate (tagged)" cleaned up.
   The is_ai_seeded / is_ai_response columns are now strictly internal-only.

2) Team page card visibility — the page wrapper got switched from
   text-[#e5e7eb] to text-[#0F172A] in the recent restyle, which fixed
   white-on-white outside the cards but left the dark-card H3 names
   inheriting dark navy on a dark navy bg = invisible. Forced text-white
   on both H3s (editorial + ops). Email rows now use min-w-0 + flex-1 +
   block truncate so long addresses ellipsis inside the card instead of
   pushing the layout past the right edge.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-04 20:27:25 +00:00
ca317f26a9 feat(ratings): real reader ratings with no-login, 1-vote-per-session
Adds a no-auth star rating system backed by a centralized cross-property
table on supabase01.

Database:
- distribute.article_ratings (id, property, article_slug, rating 1..5,
  session_id, ip_hash, user_agent, created_at) with UNIQUE
  (property, article_slug, session_id). property column means every RMP
  site shares one table; AV Beat writes 'avbeat', BB writes 'bb', etc.
- distribute.article_rating_aggregates view rolls up real_count + real_avg
  per (property, slug).

API (/api/articles/rating):
- GET ?slug=X → { avg, count, my_rating } — reads aggregate, plus the
  current session's vote if any.
- POST { slug, rating } → inserts the vote; unique_violation on duplicate
  is silently swallowed (one vote per session). Returns updated summary.
- Session lives in `av_rate_sid` cookie (uuid, 1y, sameSite=lax). Cookie
  is minted by the API on first request, so the client never has to know
  about it.

StarRating component:
- Now interactive — hover preview, click to submit, "thanks!" affordance.
- Merges the existing deterministic baseline (slug-hash → 4.0–5.0 + age-
  scaled count) with the real aggregate using the baseline as a Bayesian
  prior, so a single real rating doesn't crater the displayed average.
- Once the current session has voted, stars show "your rating" and
  hover/click are disabled.
- Text colors updated #d0d0d0 → #0F172A so the rating number is readable
  on AV Beat's light backgrounds.

Property identifier hardcoded as "avbeat" at the top of the route — when
porting to BB / SNS / BLB / etc., change that constant and keep
everything else identical.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-04 19:32:28 +00:00
f44add70c7 feat(brand+promotion): brand-gradient system, restyled /about/* + team + contact, alias-based client matcher
Three coupled rollouts in one shot.

PART A — client highlight matcher (DB migration applied separately):
- promoted-articles.ts: AdvertiserName now carries brand_aliases; matcher
  iterates legal name + every alias with word-boundary regex and picks the
  longest match across all candidates so "Magewell Launches…" resolves to
  "Magewell Electronics Co., Ltd." via its Magewell alias.
- New isStoryAboutClient gate: hard-accept at position 0, accept if any
  editorial frame ("Product Spotlight:", "Review:", "First Look", …) appears
  in the prefix, hard-reject if the prefix ends with a partner/usage phrase
  ("with", "using", "powered by", "dealer of", "integration with", "used",
  "deploys", "runs on", "leverages", …), otherwise accept within a 32-char
  subject window. Validated against 5,000 historical posts: 27 partner
  false-positives blocked, 3 editorial-frame stories correctly saved, the
  Magewell article now highlights.

PART B — restyling /about, /about/team, /about/contact:
- New .brand-gradient utility: #2563EB→#1E3A8A linear-gradient with a
  16%-opacity diagonal sheen that sweeps in the first 30% of a 7s cycle
  and rests offscreen-right for the rest. Respects prefers-reduced-motion
  (band parked statically at 6% opacity).
- Team page: dark legacy hero (red radial, #ff5a55 eyebrows) replaced with
  brand-gradient hero; outer text wrapper #e5e7eb → #0F172A so section
  headings stop being white-on-white; all serif H1/H2/H3 → font-display;
  red accents (#ff5a55 / #ff6b66 / rgba(214,7,1)) → blue (#93C5FD / #7DD3FC
  / rgba(29,78,216)).
- About page: H1 + Stat values → font-display; Stat cards get a brand-
  gradient top stripe.
- Contact page: outer wrapper #e5e7eb → #0F172A (fixes the white-on-white
  Contact H1); H1 gets explicit text-[#0F172A] + font-display; dark contact
  cards keep dark bg but gain a brand-gradient top stripe + explicit
  text-[#e5e7eb] body + brighter cyan eyebrow/link colors.

PART C — richer Industry News client highlight:
- ArticleFeed: client-promoted row swaps the static border-l-4 for an
  absolute-positioned .brand-gradient strip on the left edge (sheen pulses
  through). Row gets a slightly richer bg tint (from-#1D4ED8/12 via /4).
- HIGHLIGHT pill now uses .brand-gradient instead of the static blue chip.

Also shipping the earlier-staged work:
- AnimatedLogo onDark: white ring around tile + brighter (#E2E8F0) tagline
  + cyan accent rule for the blue header.
- Article-prose: em/strong/code dark colors (em fixes the trailing
  copyright/trademark ghost text), hr line color, figcaption readable.
- ArticleComments: "Sign in to join the discussion" bar uses brand-gradient
  + white/outline buttons that read on blue.
- Forum: Discover/Following, Newest/Top Voted/Unanswered, Sign in to post,
  Start a thread, Create account — slim pills, brand-gradient active.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-04 18:37:15 +00:00
0b2ed8cd7f fix(article): kill mobile-breakpoint drop-cap rule missed in prior pass
The 720px media query had its own ::first-letter override at 52px that
survived the desktop-rule removal — first letter was still rendering
oversized on mobile. Removing this completes the drop-cap rip-out.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-04 17:14:12 +00:00
abc4f6fc8e fix(article): remove drop-cap + match link color/font to body text
Two complaints on /news/[slug]:
- the oversized first-letter drop-cap looked editorial-magazine, not in
  spec — first paragraph should start as normal prose
- inline links rendered near-white against the white page because
  Tailwind Typography's prose-a variable was overriding the (no-!important)
  brand-blue rule, leaving ghost links unreadable

Drop the ::first-letter rule entirely. Force link color to #1e293b body,
font-family to inherit, and decoration color to currentColor so the
underline is the only visual link cue (still WCAG-distinguishable
without relying on color). Hover keeps brand blue.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-04 16:52:59 +00:00
bf484c14c3 fix(header): switch AnimatedLogo to onDark variant for blue header contrast
Header bar is #1D4ED8 but logo was rendering with navy text on the tile's
#2563EB→#1E3A8A gradient — wordmark + tagline were nearly invisible. Flip
all three header breakpoints to variant="onDark" (white wordmark, slate-200
tagline). Also: switch the onDark tagline accent rule from #1D4ED8 (same
blue, invisible) to #7DD3FC cyan, and paint a faint white ring around the
tile so the rounded mark stays distinct from the header background.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-04 16:42:02 +00:00
ops-bot
e43d8737cf feat(brand): wire AnimatedLogo into Header + Footer
- Header: replaces AvBeatLogo across all 3 breakpoints (full / no-tagline / iconOnly).
- Footer: replaces AvBeatLogo full variant.
- AnimatedLogo: new iconOnly prop hides the wordmark+tagline span entirely for the mobile breakpoint.

Existing AvBeatLogo file kept on disk for now (unimported, can be deleted later) so we have a quick rollback target if anyone wants the static A+V monogram back.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-04 16:15:01 +00:00
ops-bot
6b1a5c281a feat(brand): AnimatedLogo component + Space Grotesk display font
- src/app/layout.tsx: load Space_Grotesk via next/font/google as
  --font-display (weights 500/600/700, self-hosted, display:swap).
- src/components/AnimatedLogo.tsx: standalone animated brand mark.
  Single-A monogram in #2563EB->#1E3A8A tile, Space Grotesk 700
  wordmark, Inter tagline with accent rule. Stroke-draw + cyan signal
  pulse + sheen sweep + text fade. Pure SVG/CSS, no animation libs.
  Respects prefers-reduced-motion. Variants: onLight | onDark.
- src/app/preview/animated-logo/page.tsx: preview route at
  /preview/animated-logo (noindex). Existing AvBeatLogo untouched —
  Header/Footer wiring unchanged.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-04 16:07:06 +00:00
ops-bot
aa5bee95e2 fix(seo): strip HTML from meta description + OG/Twitter/Schema.org
Article excerpts sometimes contain raw <p> tags; Next.js HTML-escapes
them into the page <meta>, surfacing as literal '&lt;p&gt;' in view-source
and breaking SEO previews. cleanExcerpt() strips tags + entities for all
plain-text meta surfaces.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-04 15:21:26 +00:00
ops-bot
e84f69f241 ui(cards): object-contain on article-card images so portraits don't crop
Boxes stay sized; tall/odd-ratio images letterbox cleanly against the
existing slate card background instead of being chopped at the edges.
Applied to FeaturedBento, FeaturedBentoFromDb, ArticleFeed, NewsPageClient,
SpotlightCarousel, FeaturedCarousel, AISuggestedArticles, search/page.tsx.

Avatars (rounded-full) unchanged — still object-cover.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-04 15:08:50 +00:00
ops-bot
bc49c676c3 ui(placeholder): rebrand article-placeholder.svg from BROADCAST BEAT to AV BEAT
Sarah Quinn's author page (and any article missing a featured_image) was
showing the old BB-branded placeholder. New SVG uses the AV Beat navy/cyan
palette and 'PRO AV · DISPLAY · LIVE PRODUCTION' tagline.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-04 15:07:38 +00:00
ops-bot
c35ed117b2 ui(footer): swap legacy logo.svg for AvBeatLogo (matches header)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-04 15:03:25 +00:00
ops-bot
c959a5f8f7 ui(article): editorial standard — cap featured image at 480px (mirror of BB)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-04 14:56:26 +00:00
ops-bot
9fa69ef74e ui(article): bb-article-prose Georgia -> Inter sans + body smoothing
Mirror of the BB article-prose change. Font-family swap only; colors were
already dark on AVB. Body smoothing re-enabled per Ryan.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-04 14:53:40 +00:00
ops-bot
d832e624cc contact+ads: route advertising mail to advertising@relevantmediaproperties.com
Adverts/contact UI emails on /about/contact + /advertise now point at the
central advertising alias (forwarded to ryan.salazar@). Media-kit hyperlink
on /about/contact corrected to relevantmediaproperties.com/av-beat---media-kit.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-04 14:11:19 +00:00
ops-bot
e521820a2c ui(featured): make 'All featured' CTA prominent — pill button instead of text link
Was 11px mono with no background; now a navy outlined pill with uppercase
bold tracking, light-blue fill, and hover state. Same target route.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-04 13:54:43 +00:00
6e9a163cfd fix(contrast,brand): full audit sweep — white-on-white + cross-component renames
- forum/page.tsx: text-white → navy on TopThreads, Following feed, Discover feed cards, search input, select, category grid, Community Guidelines; greys lightened where applicable for new white surface
- forum/[slug]/page.tsx: same sweep for category page (h1, h2, thread rows, new-thread form, search/sort bar) + hover:bg-[#1e2a3a] → slate-200
- forum/user/[username]/page.tsx: text-[#cccccc]/[#bfbfbf]/[#e0e0e0] + bg-[#222] tag chip + #9ca3af labels → readable on white card
- authors/[slug]/page.tsx: profile contact/facts cards readable
- search/page.tsx: h1 + h2 navy + hover slate
- news/[slug]/NewsArticleDetailClient.tsx: toast color
- news/NewsPageClient.tsx: import cleanExcerpt, strip HTML from listing excerpts
- privacy/terms/page.tsx: h1 + h2 + body greys to readable navy/slate
- error.tsx: page-level text to navy + button border slate
- about/page.tsx: page body text + Stat/Block cards to white surface w/ navy text
- Header.tsx: mobile hamburger + dropdown links → readable navy + slate border
- NotificationCenter.tsx: hover + unread bg flipped to light blue
- AISuggestedArticles.tsx: hover bg → slate-200
- Footer.tsx: link greys to #475569 + #DCE6F2 borders
- AskBBAI.tsx: copy rename 'BB AI' → 'AV Beat AI' (greeting, button, header, aria)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-03 22:13:42 +00:00
2826f0b566 ui(avbeat): industry-news card hover from near-black #1c1c1c → slate-200 #e2e8f0
src/styles/tailwind.css:195 .article-card:hover background-color was #1c1c1c (near-black, leftover from the dark theme). On the white page that made the card go black on hover and the text disappear into it. Swapped to #e2e8f0 (Tailwind slate-200) so the hover reads as a clean dark-gray distinct from the white surface while keeping the navy article title + slate excerpt fully readable.
2026-06-03 21:40:34 +00:00
a5d4c50186 fix(contrast,brand): secondary-page H1/subtitle white-on-white + rename 'The Crew Lounge' → 'The Integration Room'
CONTRAST (white-on-white on light surfaces, mirrors the prior article-body pass):
  - show-coverage/page.tsx:72  <main> wrapper text-[#e5e7eb] → text-[#0F172A]
  - show-coverage/page.tsx:76  '0 upcoming / 0 past / 0 total' subtitle text-[#9ca3af] → text-[#475569]
  - manufacturers/page.tsx:79  H1 'AV Integration Manufacturers' text-[#e0e0e0] → text-[#0F172A]
  - manufacturers/page.tsx:82  '… manufacturers' subtitle text-[#e0e0e0]/70 → text-[#475569]
  - forum/page.tsx:294 hero H1 text-white → text-[#0F172A]
  - forum/page.tsx:296 hero intro 'Connect with pro AV integrators…' text-[#aab4c4] → text-[#475569]
  - forum/page.tsx:116 'Top Performing Threads' H2 text-white → text-[#0F172A]
  - forum/page.tsx:581 'Browse Categories' H2 text-white → text-[#0F172A]

  Skipped per direct exclusion: forum/page.tsx:591 (per-category card titles).

  Homepage featured grid checked, no edit needed: FeaturedBento 2x2 h3 is already text-[#0F172A] on bg-#FFFFFF; FeaturedBentoFromDb hero is white on a dark image gradient (correct overlay pattern).

BRAND RENAME: forum is renamed everywhere user-visible.
  - forum/page.tsx hero img alt + H1 text 'The Crew Lounge' → 'The Integration Room'
  - forum/layout.tsx — all 7 occurrences (title, description, openGraph, twitter, JSON-LD WebPage name, breadcrumb item)
  - components/crew-lounge/CrewLoungeLogo.tsx — img alt
  - forum/user/[username]/page.tsx — '← Back to The Crew Lounge' link

  Logo SVG filename (/logos/crew-lounge-logo.svg) and React component name (CrewLoungeLogo) intentionally NOT renamed — they're internal asset paths and would cascade through unrelated imports; only user-visible brand strings touched.
2026-06-03 20:14:23 +00:00