Update team page (#648)
continuous-integration/drone/push Build is passing Details

Co-authored-by: dlslo <dlslo@uwaterloo.ca>
Reviewed-on: #648
Reviewed-by: Richard Shuai <r2shuai@csclub.uwaterloo.ca>
This commit is contained in:
Darren Lo 2024-01-26 19:51:25 -05:00
parent a5136eafaa
commit 89a1d7dea1
15 changed files with 569 additions and 111 deletions

View File

@ -1,9 +1,24 @@
[
{ "name": "Alexander Liao", "role": "Team Lead" },
{ "name": "Muhammad Hamza" },
{ "name": "Kushal Goel" },
{ "name": "Cathie Yan" },
{ "name": "Ryan Zhou" },
{ "name": "Emily Huang" },
{ "name": "Franklin Ramirez" }
{
"name": "Alexander Liao",
"role": "Team Lead"
},
{
"name": "Muhammad Hamza"
},
{
"name": "Kushal Goel"
},
{
"name": "Cathie Yan"
},
{
"name": "Ryan Zhou"
},
{
"name": "Emily Huang"
},
{
"name": "Franklin Ramirez"
}
]

View File

@ -1,14 +1,40 @@
[
{ "name": "Anny Wei", "role": "Team Lead" },
{ "name": "Kim Guo" },
{ "name": "Shelley Chen" },
{ "name": "MingMing Zhang" },
{ "name": "Lucy Qi" },
{ "name": "Roni Wu" },
{ "name": "Jessica Chan" },
{ "name": "Linda Wang" },
{ "name": "Kelly Qu" },
{ "name": "Prabhsharan Singh Sethi" },
{ "name": "Lila Hoang" },
{ "role": "Advisor", "name": "Cadey Chen" }
{
"name": "Anny Wei",
"role": "Team Lead"
},
{
"name": "Jia Huang"
},
{
"name": "Kim Guo"
},
{
"name": "Prabhsharan Singh Sethi"
},
{
"name": "Hailey Chan"
},
{
"name": "Sayma Khan"
},
{
"name": "Jessica Chan"
},
{
"name": "Linda Wang"
},
{
"name": "Kelly Qu"
},
{
"name": "Lila Hoang"
},
{
"name": "Lucy Qi"
},
{
"name": "Cadey Chen",
"role": "Advisor"
}
]

View File

@ -0,0 +1,31 @@
[
{
"name": "Roger Cao",
"role": "Team Lead"
},
{
"name": "Amy Wang"
},
{
"name": "Eric Sheen"
},
{
"name": "Gordon Lin"
},
{
"name": "Logan Maier"
},
{
"name": "Naman Sood"
},
{
"name": "Laura Nguyen",
"role": "Advisor"
},
{
"name": "Sat Arora"
},
{
"name": "Siimar Leen Kaur"
}
]

View File

@ -1,12 +1,34 @@
[
{ "name": "Prabhav Khera", "role": "Team Lead"},
{ "name": "Fan Yang", "role": "Team Lead" },
{ "name": "Nicole Go" },
{ "name": "David Gan" },
{ "name": "Priyanshu Sharma" },
{ "name": "Kavin Desi Valli" },
{ "name": "Andy Si" },
{ "name": "Richard Fan" },
{ "role": "Advisor", "name": "Marcus Chan" },
{ "role": "Advisor", "name": "Laura Nguyen" }
{
"name": "Prabhav Khera",
"role": "Team Lead"
},
{
"name": "Fan Yang",
"role": "Team Lead"
},
{
"name": "Patrick Huynh"
},
{
"name": "Rosanne Zhu"
},
{
"name": "Andy Si"
},
{
"name": "David Gan"
},
{
"name": "Edmond Li"
},
{
"name": "Di Nguyen"
},
{
"name": "Priyanshu Sharma"
},
{
"name": "Marcus Chan"
}
]

View File

@ -1,16 +1,66 @@
[
{ "name": "Anthony Wang", "role": "Team Lead" },
{ "name": "Stella Tian", "role": "Team Lead" },
{ "name": "Andrea Ma" },
{ "name": "Nicholas Tao" },
{ "name": "Zhehai Zhang" },
{ "name": "Jonathan Shanmuganantham" },
{ "name": "Angeline Garapati" },
{ "name": "Harshitha Durai" },
{ "name": "Samuel Bai" },
{ "name": "Carter Moore" },
{ "name": "Peter Lim" },
{ "name": "Manasva Katyal" },
{ "name": "Sydnie Chau" },
{ "role": "Advisor", "name": "Sarah Wilson" }
{
"name": "Andrea Ma",
"role": "Team Lead"
},
{
"name": "Nicholas Tao",
"role": "Team Lead"
},
{
"name": "Stella Tian"
},
{
"name": "Zhehai Zhang"
},
{
"name": "Jonathan Shanmuganantham"
},
{
"name": "Angeline Garapati"
},
{
"name": "Harshitha Durai"
},
{
"name": "Samuel Bai"
},
{
"name": "Carter Moore"
},
{
"name": "Peter Lim"
},
{
"name": "Manasva Katyal"
},
{
"name": "Sydnie Chau"
},
{
"name": "Sarah Wilson",
"role": "Advisor"
},
{
"name": "Anthony Wang",
"role": "Advisor"
},
{
"name": "Aditya Bang"
},
{
"name": "Vaaranan Yogalingam"
},
{
"name": "Jason D'Souza"
},
{
"name": "Joseph Perez"
},
{
"name": "Oliver Mao"
},
{
"name": "Molly Wu"
}
]

View File

@ -1,8 +1,18 @@
[
{ "name": "Devin Yanche Li", "role": "Team Lead" },
{ "name": "Julien Hongyi Liang" },
{ "name": "David Kofman" },
{ "name": "Advait Sangle" },
{ "name": "Josephina Kim" },
{ "name": "Jason D'Souza" }
{
"name": "Devin Yanche Li",
"role": "Team Lead"
},
{
"name": "Julien Liang"
},
{
"name": "David Kofman"
},
{
"name": "Josephina Kim"
},
{
"name": "Grace Yin"
}
]

View File

@ -1,9 +1,22 @@
[
{ "name": "Arijit Chowdhury", "role": "Team Lead" },
{ "name": "Sabina Gorbachev", "role": "Team Lead" },
{ "name": "Martha Mengesha" },
{ "name": "Krish Arora" },
{ "name": "Lila Hoang" },
{ "name": "Siimar Leen Kaur" },
{ "role": "Advisor", "name": "Joshua Duho Kim" }
{
"name": "Arijit Chowdhury",
"role": "Team Lead"
},
{
"name": "Lila Hoang",
"role": "Team Lead"
},
{
"name": "Sophia Ho"
},
{
"name": "Siimar Leen Kaur"
},
{
"name": "Martha Mengesha"
},
{
"name": "Krish Arora"
}
]

View File

@ -0,0 +1,77 @@
[
{
"name": "Tiger Ding"
},
{
"name": "Ivy Lei"
},
{
"name": "Nathan Chung"
},
{
"name": "Amy Wang"
},
{
"name": "Andrea Ma"
},
{
"name": "Felix Yang"
},
{
"name": "Gordon Lin"
},
{
"name": "Sean Zhang"
},
{
"name": "Siimar Leen Kaur"
},
{
"name": "Sat Arora"
},
{
"name": "Saurin Patel"
},
{
"name": "Ethan Kwon"
},
{
"name": "Grace Feng"
},
{
"name": "Kevin Cui"
},
{
"name": "Laura Nguyen"
},
{
"name": "Gaurav Talreja"
},
{
"name": "Marcus Chan"
},
{
"name": "Nikki Guo"
},
{
"name": "Raymond Li"
},
{
"name": "Richard Fan"
},
{
"name": "Roger Cao"
},
{
"name": "Shahan Nedadahandeh"
},
{
"name": "Tejas Srikanth"
},
{
"name": "Yi (Justin) Wang"
},
{
"name": "Jessica Ding"
}
]

View File

@ -1,9 +1,25 @@
[
{ "name": "Angela Xu", "role": "Team Lead" },
{ "name": "Rami Abdul Rahim" },
{ "name": "Helen Xia" },
{ "name": "Varuni Gupta" },
{ "name": "Evelina Zheng" },
{ "role": "Advisor", "name": "Daniel Su" },
{ "role": "Advisor", "name": "Bonnie Peng" }
{
"name": "Varuni Gupta",
"role": "Team Lead"
},
{
"name": "Siyuan Zhao"
},
{
"name": "Evelina Zheng"
},
{
"name": "Enming Yang"
},
{
"name": "Helen Xia"
},
{
"name": "Gordon Lin"
},
{
"name": "Daniel Su",
"role": "Advisor"
}
]

View File

@ -1,11 +1,29 @@
[
{ "name": "Gordon Lin", "role": "Team Lead" },
{ "name": "Kim Guo" },
{ "name": "Imane Yacoubi" },
{ "name": "Ashnoor Randhawa" },
{ "name": "Mayank Mehra" },
{ "name": "Katherine Liu" },
{ "name": "Franklin Ramirez" },
{ "role": "Advisor", "name": "Ivy Lei" },
{ "role": "Advisor", "name": "Kevin Cui" }
{
"name": "Kim Guo",
"role": "Team Lead"
},
{
"name": "Tiger Ding"
},
{
"name": "Katherine Liu"
},
{
"name": "Ethan Kwon"
},
{
"name": "Franklin Ramirez"
},
{
"name": "Varuni Gupta"
},
{
"name": "Imane Yacoubi",
"role": "Advisor"
},
{
"name": "Gordon Lin",
"role": "Advisor"
}
]

View File

@ -1,8 +1,21 @@
[
{ "name": "Nathan Chung", "role": "Team Lead" },
{ "role": "Advisor", "name": "Raymond Li" },
{ "role": "Advisor", "name": "Max Erenberg" },
{ "role": "Advisor", "name": "Yiao Shen" },
{ "name": "Rio Liu" },
{ "name": "Edwin Zhang" }
{
"name": "Nathan Chung",
"role": "Team Lead"
},
{
"name": "Raymond Li"
},
{
"name": "Max Erenberg"
},
{
"name": "Yiao Shen"
},
{
"name": "Rio Liu"
},
{
"name": "Edwin Zhang"
}
]

View File

@ -1,19 +1,60 @@
[
{ "name": "Nathan Chung", "role": "Team Lead" },
{ "role": "Advisor", "name": "Raymond Li" },
{ "role": "Advisor", "name": "Max Erenberg" },
{ "role": "Advisor", "name": "Yiao Shen" },
{ "name": "Rio Liu" },
{ "name": "Edwin Zhang" },
{ "name": "Justin Chung" },
{ "name": "Sean Zhang" },
{ "name": "Jonathan Leung" },
{ "name": "Young Wang" },
{ "name": "Anthony Chen" },
{ "name": "Eric Li" },
{ "name": "Kevin Salapatek" },
{ "name": "Ohm Patel" },
{ "name": "Leon Zhang" },
{ "name": "Yi (Justin) Wang" },
{ "name": "Frank Tao" }
{
"name": "Nathan Chung",
"role": "Team Lead"
},
{
"name": "Raymond Li",
"role": "Advisor"
},
{
"name": "Max Erenberg",
"role": "Advisor"
},
{
"name": "Yiao Shen",
"role": "Advisor"
},
{
"name": "Rio Liu"
},
{
"name": "Edwin Zhang"
},
{
"name": "Justin Chung"
},
{
"name": "Yi (Justin) Wang"
},
{
"name": "Jonathan Leung"
},
{
"name": "Di Nguyen"
},
{
"name": "Vincent Xie"
},
{
"name": "Amol Venkataraman"
},
{
"name": "Eric Li"
},
{
"name": "Ohm Patel"
},
{
"name": "Leon Zhang"
},
{
"name": "Anthony Chen"
},
{
"name": "Young Wang"
},
{
"name": "Frank Tao"
}
]

View File

@ -1,13 +1,38 @@
[
{ "name": "Darren Lo", "role": "Team Lead" },
{ "name": "Richard Shuai", "role": "Team Lead" },
{ "name": "Daniel Su" },
{ "name": "Ryan Zhu" },
{ "name": "Owen Pan" },
{ "name": "Annie Sun" },
{ "name": "Tejas Srikanth" },
{ "role": "Advisor", "name": "Aditya Thakral" },
{ "role": "Advisor", "name": "Neil Parikh" },
{ "role": "Advisor", "name": "Shahan NedaDahandeh" },
{ "role": "Advisor", "name": "Amy Wang" }
{
"name": "Darren Lo",
"role": "Team Lead"
},
{
"name": "Richard Shuai",
"role": "Advisor"
},
{
"name": "Daniel Su"
},
{
"name": "Ryan Zhu"
},
{
"name": "Owen Pan"
},
{
"name": "Tejas Srikanth"
},
{
"name": "Aditya Thakral",
"role": "Advisor"
},
{
"name": "Neil Parikh",
"role": "Advisor"
},
{
"name": "Shahan NedaDahandeh",
"role": "Advisor"
},
{
"name": "Amy Wang",
"role": "Advisor"
}
]

View File

@ -15,11 +15,14 @@ import {
getMemberImagePath,
} from "@/lib/team";
import classProfileData from "../../content/team/class-profile-committee.json";
import designData from "../../content/team/design-team.json";
import discordModsData from "../../content/team/discord-mods-team.json";
import discordData from "../../content/team/discord-team.json";
import eventsData from "../../content/team/events-team.json";
import externalData from "../../content/team/external-affairs-team.json";
import marketingData from "../../content/team/marketing-team.json";
import officeStaffData from "../../content/team/office-staff.json";
import photographyData from "../../content/team/photography-team.json";
import repsData from "../../content/team/representatives-team.json";
import systemsData from "../../content/team/systems-committee.json";
@ -159,6 +162,11 @@ export const getStaticProps: GetStaticProps<Props> = async () => {
// Note that rawTeams do not contain image paths of members, even though
// TypeScript thinks that it does. It's just to simplify some code.
const rawTeams = [
{
id: "classProfile",
name: "Class Profile",
members: classProfileData,
},
{
id: "reps",
name: "Community Representatives",
@ -174,11 +182,11 @@ export const getStaticProps: GetStaticProps<Props> = async () => {
name: "Discord Bot (CodeyBot) Developers",
members: discordData,
},
// {
// id: "discord",
// name: "Discord Moderators",
// members: discordModsData,
// },
{
id: "discord",
name: "Discord Moderators",
members: discordModsData,
},
{
id: "events",
name: "Events",
@ -194,6 +202,11 @@ export const getStaticProps: GetStaticProps<Props> = async () => {
name: "Marketing",
members: marketingData,
},
{
id: "officeStaff",
name: "Office Staff",
members: officeStaffData,
},
{
id: "photography",
name: "Photography",

88
scripts/updateTeam.py Normal file
View File

@ -0,0 +1,88 @@
# A script that takes in a CSC Contact Info spreadsheet as a .csv and generates the team pages
import argparse
import csv
import json
parser = argparse.ArgumentParser("updateTeam")
parser.add_argument("teamFile", help="The team file as a .csv")
args = parser.parse_args()
file = args.teamFile
# Relative path of team folder
team_dir = '../content/team'
# Read csv file rows
with open(file) as f:
csv_reader = csv.reader(f)
rows = [[val.strip() for val in row] for row in csv_reader]
header = [val.lower() for val in rows[0]]
body = rows[1:]
# Get column number of name, role, and team
name_index = header.index('name')
role_index = header.index('role')
team_index = header.index('team')
# Standardize the team name for lookup later
def format_team_name(team_name):
return '-'.join(team_name.replace('\n', '').lower().split(' '))
# Map team names to their json file name
def team_name_to_file_name(team_name):
file_name_map = {
'bots': 'discord-team',
'design': 'design-team',
'class-profile': 'class-profile-committee',
'discord-mods' : 'discord-mods-team',
'events' : 'events-team',
'external-affairs': 'external-affairs-team',
'marketing': 'marketing-team',
'photography': 'photography-team',
'reps': 'representatives-team',
'syscom': 'systerms-committee',
'termcom': 'terminal-committee',
'web': 'web-committee',
'office-staff': 'office-staff'
}
return file_name_map[team_name]
# For a list of rows of members, generate a list of each members name and role
def generate_team_data(team_members_entries):
return [
{ 'name': entry[name_index],
**({'role': entry[role_index]} if entry[role_index] else {})
}
for entry in filter(lambda entry: entry[name_index] != '', team_members_entries)
]
# Partition the rows by team
def sort_team_entries(entries):
team_entries = {}
curr_team = None
prev_index = 0
for i, entry in enumerate(entries):
if entry[team_index] != "":
curr_team = format_team_name(entry[team_index])
if i + 1 >= len(entries) or entries[i+1][team_index] != "":
team_entries[curr_team] = entries[prev_index:i+1]
prev_index = i+1
return team_entries
all_team_data = {}
sorted_team_entries = sort_team_entries(body)
for team, team_members_entries in sorted_team_entries.items():
all_team_data[team] = generate_team_data(team_members_entries)
# Dump the member lists into the corresponding files
for team_name, team_data in all_team_data.items():
file_name = team_name_to_file_name(team_name)
print(file_name)
with open(f"{team_dir}/{file_name}.json", 'w') as f:
json.dump(team_data, f, indent=2)
f.write('\n')