diff --git a/src/features/flashcards/flashcards.tsx b/src/features/flashcards/flashcards.tsx index c5e02c8..581d79a 100644 --- a/src/features/flashcards/flashcards.tsx +++ b/src/features/flashcards/flashcards.tsx @@ -81,6 +81,8 @@ export function Flashcards({ members }: { members: readonly Member[] }) { const photo = member.photo === failedPhoto ? null : member.photo; const photoLabel = photo ? "Member photo" : "Member photo placeholder"; + const memberDetails = [member.year, member.role]; + const memberLabel = [member.name, ...memberDetails].join(". "); const nextPhoto = members[currentIndex + 1]?.photo; if (nextPhoto) { @@ -95,7 +97,7 @@ export function Flashcards({ members }: { members: readonly Member[] }) { size="custom" onClick={flip} aria-label={ - showName ? `${member.name}. Show photo` : `${photoLabel}. Show name` + showName ? `${memberLabel}. Show photo` : `${photoLabel}. Show name` } aria-keyshortcuts="ArrowUp ArrowDown Space Enter" className={cn(styles.card, "group block w-full rounded-2xl text-left")} @@ -141,12 +143,15 @@ export function Flashcards({ members }: { members: readonly Member[] }) { className={cn( styles.face, styles.back, - "bg-primary text-primary-foreground flex items-center justify-center rounded-2xl border border-transparent p-8 text-center shadow-sm", + "bg-primary text-primary-foreground flex flex-col items-center justify-center gap-3 rounded-2xl border border-transparent p-8 text-center shadow-sm", )} > {member.name} + + {memberDetails.join(" ยท ")} + @@ -220,7 +225,7 @@ export function Flashcards({ members }: { members: readonly Member[] }) { - {`Card ${currentIndex + 1} of ${members.length}. ${showName ? member.name : photoLabel}`} + {`Card ${currentIndex + 1} of ${members.length}. ${showName ? memberLabel : photoLabel}`} ); diff --git a/src/features/flashcards/members.ts b/src/features/flashcards/members.ts index c4ac0c0..cee61fe 100644 --- a/src/features/flashcards/members.ts +++ b/src/features/flashcards/members.ts @@ -3,6 +3,8 @@ import "server-only"; export type Member = { id: string; name: string; + year: string; + role: string; photo: string | null; }; @@ -10,251 +12,351 @@ export const members: readonly Member[] = [ { id: "halas-graden", name: "Halas Graden", + year: "Sophomore", + role: "Developer", photo: "/members/halas-graden.webp", }, { id: "shin-masada", name: "Shin Masada", + year: "Freshman", + role: "Developer", photo: "/members/shin-masada.webp", }, { id: "ruina-liu", name: "Ruina Liu", + year: "Sophomore", + role: "Developer", photo: "/members/ruina-liu.webp", }, { id: "kyle-yuen", name: "Kyle Yuen", + year: "Sophomore", + role: "Developer", photo: "/members/kyle-yuen.webp", }, { id: "Christopher-Tutor", name: "Christopher Tutor", + year: "Sophomore", + role: "Developer", photo: "/members/christopher-tutor.webp", }, { id: "joshua-zhang", name: "Joshua Zhang", + year: "Sophomore", + role: "Developer", photo: "/members/joshua-zhang.webp", }, { id: "6506829008", name: "Siddharth Yelisetty", + year: "Freshman", + role: "Developer", photo: "/members/siddharth-yelisetty.webp", }, { id: "rachel-he", name: "Rachel He", + year: "Freshman", + role: "Developer", photo: "/members/rachel-he.webp", }, { id: "connor-mao", name: "Connor Mao", + year: "Sophomore", + role: "Developer", photo: "/members/connor-mao.webp", }, { id: "gautham-gopinath", name: "Gautham Gopinath", + year: "Sophomore", + role: "Developer", photo: "/members/gautham-gopinath.webp", }, { id: "brennen-ho", name: "Brennen Ho", + year: "Senior", + role: "President", photo: "/members/brennen-ho.webp", }, { id: "rohan-george", name: "Rohan George", + year: "Sophomore", + role: "Developer", photo: "/members/rohan-george.webp", }, { id: "dale-dai", name: "Dale Dai", + year: "Freshman", + role: "Developer", photo: "/members/dale-dai.webp", }, { id: "darren-shen", name: "Darren Shen", + year: "Junior", + role: "Developer", photo: "/members/darren-shen.webp", }, { id: "marcus-cao", name: "Marcus Cao", + year: "Sophomore", + role: "Developer", photo: "/members/marcus-cao.webp", }, { id: "micah-muir", name: "Micah Muir", + year: "Sophomore", + role: "Developer", photo: "/members/micah-muir.webp", }, { id: "jeremy-sedillo", name: "Jeremy Sedillo", + year: "Senior", + role: "VP of Development", photo: "/members/jeremy-sedillo.webp", }, { id: "shubha-vajragiri", name: "Shubha Vajragiri", + year: "Junior", + role: "Dev Mentor", photo: "/members/shubha-vajragiri.webp", }, { id: "emily-teo", name: "Emily Teo", + year: "Junior", + role: "Dev Mentor", photo: "/members/emily-teo.webp", }, { id: "yirui-song", name: "Yirui Song", + year: "Senior", + role: "Project Manager", photo: "/members/yirui-song.webp", }, { id: "gavin-huang", name: "Gavin Huang", + year: "Sophomore", + role: "Technical Lead", photo: "/members/gavin-huang.webp", }, { id: "akhil-pullela", name: "Akhil Pullela", + year: "Junior", + role: "Developer", photo: "/members/akhil-pullela.webp", }, { id: "angela-zhuang", name: "Angela Zhuang", + year: "Junior", + role: "VP of Finance", photo: "/members/angela-zhuang.webp", }, { id: "naysa-bhargava", name: "Naysa Bhargava", + year: "Senior", + role: "VP of DEI", photo: "/members/naysa-bhargava.webp", }, { id: "daisy-fregoso", name: "Daisy Fregoso", + year: "Junior", + role: "Dev Mentor", photo: "/members/daisy-fregoso.webp", }, { id: "avni-hulyalkar", name: "Avni Hulyalkar", + year: "Senior", + role: "President", photo: "/members/avni-hulyalkar.webp", }, { id: "brian-shi", name: "Brian Shi", + year: "Junior", + role: "Developer", photo: "/members/brian-shi.webp", }, { id: "julia-mao", name: "Julia Mao", + year: "Junior", + role: "Project Manager", photo: "/members/julia-mao.webp", }, { id: "natasha-thombre", name: "Natasha Thombre", + year: "Sophomore", + role: "Dev Mentor", photo: "/members/natasha-thombre.webp", }, { id: "michelle-zhu", name: "Michelle Zhu", + year: "Sophomore", + role: "Technical Lead", photo: "/members/michelle-zhu.webp", }, { id: "sophie-shim", name: "Sophie Shim", + year: "Junior", + role: "Technical Lead", photo: "/members/sophie-shim.webp", }, { id: "trent-kobielusz", name: "Trent Kobielusz", + year: "Junior", + role: "Dev Mentor", photo: "/members/trent-kobielusz.webp", }, { id: "aaron-lee", name: "Aaron Lee", + year: "Junior", + role: "Design Mentor", photo: "/members/aaron-lee.webp", }, { id: "jamie-hsu", name: "Jamie Hsu", + year: "Senior", + role: "Project Manager", photo: "/members/jamie-hsu.webp", }, { id: "joshua-placido", name: "Joshua Placido", + year: "Senior", + role: "Design Mentor", photo: "/members/joshua-placido.webp", }, { id: "serena-li", name: "Serena Li", + year: "Senior", + role: "Dev Mentor", photo: "/members/serena-li.webp", }, { id: "charlotte-qin", name: "Charlotte Qin", + year: "Junior", + role: "VP of Internal Affairs", photo: "/members/charlotte-qin.webp", }, { id: "mark-mcguire", name: "Mark McGuire", + year: "Senior", + role: "VP of Product", photo: "/members/mark-mcguire.webp", }, { id: "andrew-choi", name: "Andrew Choi", + year: "Senior", + role: "VP of External Affairs", photo: "/members/andrew-choi.webp", }, { id: "christine-lai", name: "Christine Lai", + year: "Senior", + role: "Design Mentor", photo: "/members/christine-lai.webp", }, { id: "lian-song", name: "LiAn Song", + year: "Senior", + role: "VP of Design", photo: "/members/lian-song.webp", }, { id: "grace-li", name: "Grace Li", + year: "Senior", + role: "Dev Mentor", photo: "/members/grace-li.webp", }, { id: "jason-wiemels", name: "Jason Wiemels", + year: "Senior", + role: "Developer", photo: "/members/jason-wiemels.webp", }, { id: "josh-kim", name: "Josh Kim", + year: "Sophomore", + role: "VP of Internal Affairs (S27)", photo: "/members/josh-kim.webp", }, { id: "christine-wu", name: "Christine Wu", + year: "Sophomore", + role: "Designer", photo: "/members/christine-wu.webp", }, { id: "vani-sharma", name: "Vani Sharma", + year: "Sophomore", + role: "Designer", photo: "/members/vani-sharma.webp", }, { id: "cici-fang", name: "Cici Fang", + year: "Junior", + role: "Designer", photo: "/members/cici-fang.webp", }, { id: "dhrithi-vishwa", name: "Dhrithi Vishwa", + year: "Sophomore", + role: "Designer", photo: "/members/dhrithi-vishwa.webp", }, { id: "janice-yoon", name: "Janice Yoon", + year: "Junior", + role: "Designer", photo: "/members/janice-yoon.webp", }, { id: "emma-li", name: "Emma Li", + year: "Freshman", + role: "Designer", photo: "/members/emma-li.webp", }, ]; diff --git a/tests/members.test.ts b/tests/members.test.ts index 5c5425c..f91fd7f 100644 --- a/tests/members.test.ts +++ b/tests/members.test.ts @@ -11,6 +11,8 @@ it("uses unique member IDs", () => { it.each(members)("has valid details and a local photo for $id", (member) => { expect(member.id.trim()).not.toBe(""); expect(member.name.trim()).not.toBe(""); + expect(member.year.trim()).not.toBe(""); + expect(member.role.trim()).not.toBe(""); if (member.photo === null) return;