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>
This commit is contained in:
2026-06-05 14:53:54 +00:00
parent a63a5db6d3
commit 91e60caa60
4 changed files with 41 additions and 31 deletions

View File

@@ -77,6 +77,15 @@ export default async function TeamPage() {
.map((w) => w.charAt(0).toUpperCase())
.join("");
// Format an E.164 US number as (XXX) XXX-XXXX. Falls back to the raw
// string for international or non-standard inputs.
const formatPhone = (raw: string): string => {
const digits = raw.replace(/[^0-9]/g, "");
const local = digits.startsWith("1") && digits.length === 11 ? digits.slice(1) : digits;
if (local.length !== 10) return raw;
return `(${local.slice(0, 3)}) ${local.slice(3, 6)}-${local.slice(6)}`;
};
// Derive @avbeat.com email from the persona slug. Real mailboxes
// are set up centrally; this is the authoring address surfaced to readers.
const editorialEmail = (p: Persona): { user: string; domain: string } | null => {
@@ -242,8 +251,8 @@ export default async function TeamPage() {
})()}
{p.phone && (
<div>
<a href={`tel:${p.phone.replace(/[^\d+]/g, '')}`} className="hover:text-[#7DD3FC] font-mono">
{p.phone}{p.extension ? ` ext. ${p.extension}` : ''}
<a href={`tel:${p.phone.replace(/[^\d+]/g, '')}${p.extension ? ',' + p.extension : ''}`} className="hover:text-[#7DD3FC] font-mono">
{formatPhone(p.phone)}{p.extension ? `, Ext. ${p.extension}` : ''}
</a>
</div>
)}