From 8b3520cd4971ebac23d6de0e84eb083283d96b3b Mon Sep 17 00:00:00 2001 From: seank021 Date: Sat, 21 Mar 2026 22:37:08 +0900 Subject: [PATCH 1/2] feat: combine phd and postdoc in alum, visiting researcher -> past researcher section in alum --- src/app/people/page.tsx | 92 ++++++++++++++++++++++++++++++++++- src/components/AlumniCard.tsx | 11 ++++- src/data/members.ts | 3 +- tsconfig.json | 2 +- 4 files changed, 104 insertions(+), 4 deletions(-) diff --git a/src/app/people/page.tsx b/src/app/people/page.tsx index e67ee82..d53740b 100644 --- a/src/app/people/page.tsx +++ b/src/app/people/page.tsx @@ -122,6 +122,93 @@ export default function Page() { > Alumni {KixlabPositions.map(position => { + // group Ph.D. students and Postdocs together under "Ph.D. / Postdoc" section + if (position === 'Ph.D. Student') { + return null + } + if (position === 'Postdoc Researcher') { + const postdocs = ALUMNI_MEMBERS_BY_POSITION['Postdoc Researcher'] || [] + const phds = ALUMNI_MEMBERS_BY_POSITION['Ph.D. Student'] || [] + const combined = [...postdocs, ...phds] + if (combined.length > 0) { + const seasonOrder = ['Fall', 'Summer', 'Spring', 'Winter'] + combined.sort((a, b) => { + const aIsAlumni = a.isAlumni ?? false + const bIsAlumni = b.isAlumni ?? false + const aEndYear = aIsAlumni ? a.endYear ?? a.startYear ?? 3000 : 3000 + const bEndYear = bIsAlumni ? b.endYear ?? b.startYear ?? 3000 : 3000 + const aEndSeason = aIsAlumni ? a.endSeason ?? a.startSeason ?? 'Winter' : 'Winter' + const bEndSeason = bIsAlumni ? b.endSeason ?? b.startSeason ?? 'Winter' : 'Winter' + if (aEndYear !== bEndYear) { + return bEndYear - aEndYear + } + const seasonA = seasonOrder.indexOf(aEndSeason) + const seasonB = seasonOrder.indexOf(bEndSeason) + if (seasonA !== seasonB) { + return seasonA - seasonB + } + if (a.lastName === b.lastName) { + return a.firstName.localeCompare(b.firstName) + } + return a.lastName.localeCompare(b.lastName) + }) + return ( + + Ph.D. / Postdoc + + {combined.map((alumnus, i) => ( + + ))} + + + ) + } + return null + } + + // group Visiting Researchers and Past Researchers together under "Past Researcher" + if (position === 'Past Researcher') { + return null + } + if (position === 'Visiting Researcher') { + const visitingResearchers = ALUMNI_MEMBERS_BY_POSITION['Visiting Researcher'] || [] + const pastMembers = ALUMNI_MEMBERS_BY_POSITION['Past Researcher'] || [] + const combined = [...visitingResearchers, ...pastMembers] + if (combined.length > 0) { + combined.sort((a, b) => { + const aIsAlumni = a.isAlumni ?? false + const bIsAlumni = b.isAlumni ?? false + const aEndYear = aIsAlumni ? a.endYear ?? a.startYear ?? 3000 : 3000 + const bEndYear = bIsAlumni ? b.endYear ?? b.startYear ?? 3000 : 3000 + const aEndSeason = aIsAlumni ? a.endSeason ?? a.startSeason ?? 'Winter' : 'Winter' + const bEndSeason = bIsAlumni ? b.endSeason ?? b.startSeason ?? 'Winter' : 'Winter' + if (aEndYear !== bEndYear) { + return bEndYear - aEndYear + } + const seasonA = ['Fall', 'Summer', 'Spring', 'Winter'].indexOf(aEndSeason) + const seasonB = ['Fall', 'Summer', 'Spring', 'Winter'].indexOf(bEndSeason) + if (seasonA !== seasonB) { + return seasonA - seasonB + } + if (a.lastName === b.lastName) { + return a.firstName.localeCompare(b.firstName) + } + return a.lastName.localeCompare(b.lastName) + }) + return ( + + Past Researcher + + {combined.map((alumnus, i) => ( + + ))} + + + ) + } + return null + } + return ( ALUMNI_MEMBERS_BY_POSITION[position] && ALUMNI_MEMBERS_BY_POSITION[position].length > 0 && ( @@ -152,7 +239,10 @@ export default function Page() { startCase(position)), 'alumni']} + sidebarList={[ + ...kixlabPositions.filter(position => position !== 'Past Researcher').map(position => startCase(position)), + 'alumni', + ]} sectionRefs={sectionRefs} /> diff --git a/src/components/AlumniCard.tsx b/src/components/AlumniCard.tsx index 1a9a4a9..077e5be 100644 --- a/src/components/AlumniCard.tsx +++ b/src/components/AlumniCard.tsx @@ -72,7 +72,15 @@ const Description = styled.span` font-style: italic; ` -export const AlumniCard = ({ mem }: { mem: Member }) => { +const Role = styled.span` + ${FontVariant.body_md} + color: ${Color.black}; +` + +export const AlumniCard = ({ mem, showRole }: { mem: Member; showRole?: boolean }) => { + const role = + mem.kixlabPosition === 'Postdoc Researcher' ? '(Postdoc)' : mem.kixlabPosition === 'Ph.D. Student' ? '(Ph.D.)' : '' + return ( @@ -85,6 +93,7 @@ export const AlumniCard = ({ mem }: { mem: Member }) => { {mem.firstName} {mem.lastName} )} + {showRole && role && {role}} {mem.affiliation && {mem.affiliation}} {Array.isArray(mem.periods) && mem.periods.length > 0 ? ( diff --git a/src/data/members.ts b/src/data/members.ts index 866d3ce..68adedc 100644 --- a/src/data/members.ts +++ b/src/data/members.ts @@ -4,6 +4,7 @@ export const KixlabPositions = [ 'Ph.D. Student', 'M.S. Student', 'Visiting Researcher', + 'Past Researcher', 'Undergrad Intern', 'Staff', ] as const @@ -592,7 +593,7 @@ export const MEMBERS = { firstName: 'Sung-Chul', lastName: 'Lee', email: 'leesungchul@kaist.ac.kr', - kixlabPosition: 'Ph.D. Student', + kixlabPosition: 'Past Researcher', img: 'sclee.png', isAlumni: true, hoverImg: { HANBOK: 'members-hanbok/sclee.jpg' }, diff --git a/tsconfig.json b/tsconfig.json index ceefe45..072d0dd 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -16,7 +16,7 @@ "resolveJsonModule": true, "forceConsistentCasingInFileNames": true, "isolatedModules": true, - "jsx": "react-jsx", + "jsx": "preserve", "incremental": true, "plugins": [ { From 20ba965c90362774530f4fb967465d8abf2c17a6 Mon Sep 17 00:00:00 2001 From: seank021 Date: Tue, 23 Jun 2026 11:51:24 +0900 Subject: [PATCH 2/2] feat: alumnify for thiemo, jihoon, gosu, eugene --- src/data/members.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/data/members.ts b/src/data/members.ts index d0b7845..3755a94 100644 --- a/src/data/members.ts +++ b/src/data/members.ts @@ -93,6 +93,7 @@ export const MEMBERS = { startYear: 2026, startSeason: 'Spring', affiliation: 'Bern University of Applied Sciences', + isAlumni: true, }, haerilee: { firstName: 'Haeri', @@ -141,6 +142,9 @@ export const MEMBERS = { affiliation: 'ROK.Army', startYear: 2026, startSeason: 'Winter', + endYear: 2026, + endSeason: 'Spring', + isAlumni: true, }, yurilee: { firstName: 'Yuri', @@ -164,6 +168,9 @@ export const MEMBERS = { affiliation: 'SNU', startYear: 2026, startSeason: 'Winter', + endYear: 2026, + endSeason: 'Spring', + isAlumni: true, }, chanyoungpark: { firstName: 'Chanyoung', @@ -483,6 +490,11 @@ export const MEMBERS = { img: 'gosuchoi.jpg', hoverImg: { HANBOK: 'members-hanbok/gosuchoi.png' }, affiliation: 'KAIST', + startYear: 2024, + startSeason: 'Winter', + endYear: 2026, + endSeason: 'Spring', + isAlumni: true, }, seungjukim: { firstName: 'Seungju',