diff --git a/public/assets/images/personas/chloe-delgado.jpg b/public/assets/images/personas/chloe-delgado.jpg new file mode 100644 index 0000000..7359bca Binary files /dev/null and b/public/assets/images/personas/chloe-delgado.jpg differ diff --git a/public/assets/images/personas/darren-okafor.jpg b/public/assets/images/personas/darren-okafor.jpg new file mode 100644 index 0000000..8d3989d Binary files /dev/null and b/public/assets/images/personas/darren-okafor.jpg differ diff --git a/public/assets/images/personas/elena-vasquez.jpg b/public/assets/images/personas/elena-vasquez.jpg new file mode 100644 index 0000000..42650e2 Binary files /dev/null and b/public/assets/images/personas/elena-vasquez.jpg differ diff --git a/public/assets/images/personas/jeff-victor.jpg b/public/assets/images/personas/jeff-victor.jpg new file mode 100644 index 0000000..626e566 Binary files /dev/null and b/public/assets/images/personas/jeff-victor.jpg differ diff --git a/public/assets/images/personas/marcus-halverson.jpg b/public/assets/images/personas/marcus-halverson.jpg new file mode 100644 index 0000000..821309e Binary files /dev/null and b/public/assets/images/personas/marcus-halverson.jpg differ diff --git a/public/assets/images/personas/mike-trayton.jpg b/public/assets/images/personas/mike-trayton.jpg new file mode 100644 index 0000000..3e2a717 Binary files /dev/null and b/public/assets/images/personas/mike-trayton.jpg differ diff --git a/public/assets/images/personas/priya-rao.jpg b/public/assets/images/personas/priya-rao.jpg new file mode 100644 index 0000000..784a4ff Binary files /dev/null and b/public/assets/images/personas/priya-rao.jpg differ diff --git a/public/assets/images/personas/riley-park.jpg b/public/assets/images/personas/riley-park.jpg new file mode 100644 index 0000000..68508a8 Binary files /dev/null and b/public/assets/images/personas/riley-park.jpg differ diff --git a/public/assets/images/personas/sarah-quinn.jpg b/public/assets/images/personas/sarah-quinn.jpg new file mode 100644 index 0000000..350207d Binary files /dev/null and b/public/assets/images/personas/sarah-quinn.jpg differ diff --git a/src/app/about/team/page.tsx b/src/app/about/team/page.tsx index edfe7bd..6b2f783 100644 --- a/src/app/about/team/page.tsx +++ b/src/app/about/team/page.tsx @@ -27,6 +27,7 @@ interface OpsPersona { email: string | null; phone: string | null; extension: string | null; + avatar_url: string | null; } export default async function TeamPage() { @@ -60,9 +61,9 @@ export default async function TeamPage() { ); const { data: opsData } = await sbOps .from("personas") - .select("id, display_name, role, email, phone, extension") + .select("id, display_name, role, email, phone, extension, avatar_url") .eq("active", true) - .in("id", ["chloe", "riley"]); + .in("id", ["chloe", "jeff", "riley"]); const ops = (opsData || []) as OpsPersona[]; const displayBeat = (p: Persona) => @@ -80,7 +81,7 @@ export default async function TeamPage() { // are set up centrally; this is the authoring address surfaced to readers. const editorialEmail = (p: Persona): { user: string; domain: string } | null => { if (!p.slug) return null; - return { user: p.slug, domain: "broadcastbeat.com" }; + return { user: p.slug.replace(/-/g, "."), domain: "broadcastbeat.com" }; }; const splitEmail = (email: string): { user: string; domain: string } | null => { @@ -95,82 +96,152 @@ export default async function TeamPage() {
-
-
- Broadcast Beat + {/* Hero */} +
+
+
+
+ + Broadcast Beat · editorial +
+

+ The team behind every byline +

+

+ Beats covered by trained AI personas working under house style, plus the + business and support people who keep things moving. +

-

Editorial team

-

- Staff journalists by beat — a mix of human reporters and trained AI personas operating under house style. -

-
    - {team.map((p) => ( -
  • - {p.avatar_url && ( - {p.name} - )} -
    -

    {p.name}

    - {(p.beat || p.slug === "ryan-salazar") && ( -
    - {displayBeat(p)} -
    - )} - {p.bio &&

    {p.bio}

    } - {(() => { - const e = editorialEmail(p); - if (!e) return null; - return ( -

    - -

    - ); - })()} -
    -
  • - ))} -
+ {/* Editorial team — three-col grid on desktop, larger portraits */} +
+
+

Editorial

+ + {team.length} {team.length === 1 ? "writer" : "writers"} + +
- {ops.length > 0 && ( - <> -
-

Accounts & support

-

- For billing, accounts receivable, vendor onboarding, and general support questions — these are the people to reach. -

-
-
    - {ops.map((p) => ( -
  • -
    - {initials(p.display_name)} +
      + {team.map((p) => { + const e = editorialEmail(p); + return ( +
    • + {/* Top accent */} +
      + +
      + {p.avatar_url ? ( + + {p.name} + + ) : ( +
      + {initials(p.name)} +
      + )} +
      + +

      {p.name}

      +
      + {(p.beat || p.slug === "ryan-salazar") && ( +
      + {displayBeat(p)} +
      + )} +
      + + {p.bio && ( +

      + {p.bio} +

      + )} + + {e && ( + + )} +
    • + ); + })} +
    +
+ + {/* Operations — denser layout */} + {ops.length > 0 && ( +
+
+

+ Accounts & support +

+ + {ops.length} {ops.length === 1 ? "contact" : "contacts"} + +
+

+ For billing, accounts receivable, vendor onboarding, sales, and + general support questions — these are the people to reach. +

+ +
    + {ops.map((p) => ( +
  • + {p.avatar_url ? ( + {p.display_name} + ) : ( +
    + {initials(p.display_name)} +
    + )}
    -

    {p.display_name}

    -
    +

    {p.display_name}

    +
    {p.role}
    -
    +
    {p.email && (() => { const e = splitEmail(p.email); if (!e) return null; return ( -
    - +
    +
    ); })()} {p.phone && ( @@ -180,7 +251,7 @@ export default async function TeamPage() {
  • ))}
- +
)}