From 242ed1101ec607fcf2e6e09abc3741ac9d9b2760 Mon Sep 17 00:00:00 2001 From: Sharang Parnerkar <30073382+mighty840@users.noreply.github.com> Date: Tue, 14 Apr 2026 16:25:37 +0200 Subject: [PATCH] =?UTF-8?q?style(team):=20tighter=20card=20layout=20?= =?UTF-8?q?=E2=80=94=20equal=20height,=20equity=20pill,=20GitHub/LinkedIn?= =?UTF-8?q?=20detection?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - grid items-stretch so cards match height - Smaller avatar (16->64px) to free vertical space - Equity moved to a top-right pill (compact); decimals collapsed via equityDisplay() - Profile link icon auto-detects GitHub vs LinkedIn vs generic - Expertise tags get their own divider strip at card bottom — cleaner hierarchy - Card background lightened from 0.08 to 0.04 with subtle hover border Bio text itself shortened on the data side (both draft versions via admin API). --- pitch-deck/components/slides/TeamSlide.tsx | 144 ++++++++++++--------- 1 file changed, 82 insertions(+), 62 deletions(-) diff --git a/pitch-deck/components/slides/TeamSlide.tsx b/pitch-deck/components/slides/TeamSlide.tsx index f50d033..48a578e 100644 --- a/pitch-deck/components/slides/TeamSlide.tsx +++ b/pitch-deck/components/slides/TeamSlide.tsx @@ -3,7 +3,7 @@ import { motion } from 'framer-motion' import { Language, PitchTeamMember } from '@/lib/types' import { t } from '@/lib/i18n' -import { User, Linkedin } from 'lucide-react' +import { User, Linkedin, Github } from 'lucide-react' import GradientText from '../ui/GradientText' import FadeInView from '../ui/FadeInView' import Image from 'next/image' @@ -13,89 +13,109 @@ interface TeamSlideProps { team: PitchTeamMember[] } +function equityDisplay(pct: number | string | null | undefined): string { + const n = Number(pct) + if (!Number.isFinite(n)) return '—' + return Number.isInteger(n) ? `${n}%` : `${n.toFixed(1)}%` +} + +function detectProfileLink(url: string | null | undefined): { icon: typeof Linkedin | typeof Github; label: string } | null { + if (!url) return null + if (url.includes('github.com')) return { icon: Github, label: 'GitHub' } + if (url.includes('linkedin.com')) return { icon: Linkedin, label: 'LinkedIn' } + return { icon: Linkedin, label: 'Profile' } +} + export default function TeamSlide({ lang, team }: TeamSlideProps) { const i = t(lang) return (
- +

{i.team.title}

{i.team.subtitle}

-
- {team.map((member, idx) => ( - -
- {/* Avatar — Foto oder Fallback */} - {member.photo_url ? ( -
- {member.name} -
- ) : ( -
- -
- )} +
+ {team.map((member, idx) => { + const link = detectProfileLink(member.linkedin_url) + const LinkIcon = link?.icon + return ( + + {/* Header: avatar + name + role */} +
+ {member.photo_url ? ( +
+ {member.name} +
+ ) : ( +
+ +
+ )} -
-
-

{member.name}

- {member.linkedin_url && ( - - - - )} -
-

- {lang === 'de' ? member.role_de : member.role_en} -

-

- {lang === 'de' ? member.bio_de : member.bio_en} -

- - {/* Equity */} -
- {i.team.equity}: - {member.equity_pct}% +
+
+

{member.name}

+ {link && LinkIcon && ( + + + + )} +
+

+ {lang === 'de' ? member.role_de : member.role_en} +

- {/* Expertise Tags */} -
+ {/* Equity pill in top-right */} +
+
{i.team.equity}
+
{equityDisplay(member.equity_pct)}
+
+
+ + {/* Bio */} +

+ {lang === 'de' ? member.bio_de : member.bio_en} +

+ + {/* Expertise tags */} + {(member.expertise || []).length > 0 && ( +
{(member.expertise || []).map((skill, sidx) => ( {skill} ))}
-
-
- - ))} + )} + + ) + })}
)