From 4730439e3894a6b7c8a8f2f47bd3104a3d30cb6e Mon Sep 17 00:00:00 2001 From: Local Administrator Date: Sat, 27 Jun 2026 00:29:35 +0000 Subject: [PATCH] Team page: table layout without photos --- src/app/about/team/page.tsx | 255 ++++++++++++++++++------------------ 1 file changed, 125 insertions(+), 130 deletions(-) diff --git a/src/app/about/team/page.tsx b/src/app/about/team/page.tsx index 267633c..baf7619 100644 --- a/src/app/about/team/page.tsx +++ b/src/app/about/team/page.tsx @@ -44,7 +44,6 @@ export default async function TeamPage() { .select("slug, name, bio, beat, avatar_url") .eq("active", true); const raw = (data || []) as Persona[]; - // Ryan Salazar pinned first as Founder / Editor-in-Chief; rest alphabetical. const team = [ ...raw.filter((p) => p.slug === "ryan-salazar"), ...raw @@ -52,8 +51,6 @@ export default async function TeamPage() { .sort((a, b) => a.name.localeCompare(b.name)), ]; - // Operations staff — pulsedesk personas (accounts receivable, support). - // Only the company-wide RMP roles, not property-specific auto-attendants. const sbOps = createClient( process.env.NEXT_PUBLIC_SUPABASE_URL!, process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!, @@ -67,18 +64,8 @@ export default async function TeamPage() { const ops = (opsData || []) as OpsPersona[]; const displayBeat = (p: Persona) => - p.slug === "ryan-salazar" ? "FOUNDER / EDITOR-IN-CHIEF" : p.beat?.replace(/-/g, " "); + p.slug === "ryan-salazar" ? "Founder / Editor-in-Chief" : p.beat?.replace(/-/g, " ") ?? ""; - const initials = (name: string) => - name - .split(" ") - .filter(Boolean) - .slice(0, 2) - .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; @@ -86,8 +73,6 @@ export default async function TeamPage() { 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 => { if (!p.slug) return null; return { user: p.slug.replace(/-/g, "."), domain: "avbeat.com" }; @@ -99,13 +84,19 @@ export default async function TeamPage() { return { user: email.slice(0, at), domain: email.slice(at + 1) }; }; + const tableWrap = "overflow-x-auto rounded-xl border border-[#1a1f2a] bg-[#0b0f17]"; + const tableClass = "w-full min-w-[640px] text-sm text-left border-collapse"; + const thClass = + "px-4 py-3 text-[10px] font-mono uppercase tracking-[0.14em] text-[#93C5FD] bg-[#141a25] border-b border-[#1a1f2a] whitespace-nowrap"; + const tdClass = "px-4 py-4 align-top border-b border-[#1a1f2a] text-[#aab1bd]"; + const trHover = "hover:bg-[#111827]/60 transition-colors"; + return (
- {/* Hero — brand-gradient (animated sheen) */}
@@ -122,7 +113,6 @@ export default async function TeamPage() {
- {/* Editorial team — three-col grid on desktop, larger portraits */}

Editorial

@@ -131,75 +121,68 @@ export default async function TeamPage() {
-
    - {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)} +
    + + + + + + + + + + + {team.map((p) => { + const e = editorialEmail(p); + return ( + + + + + + + ); + })} + +
    NameRoleFocusContact
    + + {p.name} + + + {(p.beat || p.slug === "ryan-salazar") && ( + + {displayBeat(p)} + + )} + + {p.bio ? ( +

    {p.bio}

    + ) : ( + + )} +
    +
    + {e && ( + + )} + + Profile → +
    - )} - - - - {p.bio && ( -

    - {p.bio} -

    - )} - - {e && ( -
    -
    - -
    - - View → - -
    - )} - - ); - })} - +
    +
- {/* Operations — denser layout */} {ops.length > 0 && (
@@ -215,52 +198,64 @@ export default async function TeamPage() { general support questions — these are the people to reach.

-
)}
@@ -275,4 +270,4 @@ export default async function TeamPage() {
); -} +} \ No newline at end of file