Skip to content

Commit 179ab1d

Browse files
committed
update experience and awards
1 parent ee4703a commit 179ab1d

11 files changed

Lines changed: 177 additions & 66 deletions

File tree

content/awards.json

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,28 @@
11
[
2+
{
3+
"title": "Hong Kong PhD Fellowship Scheme (HKPFS)",
4+
"org": "Research Grants Council, Hong Kong",
5+
"date": "2024",
6+
"kind": "scholarship"
7+
},
8+
{
9+
"title": "HKUST RedBird PhD Scholarship",
10+
"org": "The Hong Kong University of Science and Technology",
11+
"date": "2024",
12+
"kind": "scholarship"
13+
},
14+
{
15+
"title": "Postgraduate Studentship (PGS)",
16+
"org": "The Hong Kong University of Science and Technology",
17+
"date": "2022",
18+
"kind": "scholarship"
19+
},
20+
{
21+
"title": "Most Adorable Idea Award, HackUST 2021",
22+
"org": "HackUST",
23+
"date": "2021",
24+
"kind": "innovation"
25+
},
226
{
327
"title": "Dean's Honor List in 2019-2020 Academic Year",
428
"org": "The Hong Kong University of Science and Technology",
@@ -11,6 +35,12 @@
1135
"date": "2019",
1236
"kind": "grant"
1337
},
38+
{
39+
"title": "Kaggle Expert",
40+
"org": "Kaggle",
41+
"date": "2019",
42+
"kind": "competition"
43+
},
1444
{
1545
"title": "National First Prize in RoboMaster 2019 Final Tournament",
1646
"org": "RoboMaster",
@@ -22,11 +52,5 @@
2252
"org": "Kerry Logistics",
2353
"date": "2019",
2454
"kind": "hackathon"
25-
},
26-
{
27-
"title": "Most Adorable Idea Award, HackUST 2021",
28-
"org": "HackUST",
29-
"date": "2021",
30-
"kind": "innovation"
3155
}
3256
]

content/experience.json

Lines changed: 52 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,35 @@
44
{
55
"course": "PhD in Computer Science and Engineering",
66
"institution": "The Hong Kong University of Science and Technology",
7-
"year": "2024-Present"
7+
"year": "2024-Present",
8+
"start": "2024-09-01",
9+
"details": [
10+
"CGA: 4.06/4.3 (Top 1%)"
11+
],
12+
"honors": [
13+
"Hong Kong PhD Fellowship (HKPFS)",
14+
"HKUST RedBird PhD Scholarship"
15+
]
816
},
917
{
1018
"course": "MPhil in Computer Science and Engineering",
1119
"institution": "The Hong Kong University of Science and Technology",
12-
"year": "2022-2024"
20+
"year": "2022-2024",
21+
"start": "2022-09-01",
22+
"end": "2024-08-31",
23+
"honors": [
24+
"Postgraduate Studentship (PGS)"
25+
]
1326
},
1427
{
1528
"course": "BSc in Data Science and Technology",
1629
"institution": "The Hong Kong University of Science and Technology",
17-
"year": "2018-2022"
30+
"year": "2018-2022",
31+
"start": "2018-09-01",
32+
"end": "2022-06-30",
33+
"honors": [
34+
"Dean's List"
35+
]
1836
}
1937
]
2038
},
@@ -23,67 +41,68 @@
2341
{ "venue": "ICLR 2025", "role": "Reviewer" },
2442
{ "venue": "ACL ARR 2024", "role": "Reviewer" },
2543
{ "venue": "ACL 2023", "role": "Reviewer" },
26-
{ "venue": "EMNLP 2023", "role": "Reviewer" }
44+
{ "venue": "EMNLP 2023", "role": "Reviewer" },
45+
{ "venue": "ICML 2026", "role": "Reviewer" },
46+
{ "venue": "ICLR 2026", "role": "Reviewer" },
47+
{ "venue": "NeurIPS 2026", "role": "Reviewer" },
48+
{ "venue": "ARR 2026", "role": "Reviewer" }
2749
],
2850
"timeline": [
2951
{
3052
"title": "Research Intern",
3153
"company": "Qwen Team",
3254
"companyUrl": "https://github.com/QwenLM",
3355
"location": "Beijing, China",
34-
"start": "2025-06-01",
35-
"category": "research",
36-
"roleType": "research",
56+
"start": "2025-04-24",
57+
"category": "industry",
58+
"roleType": "intern",
3759
"isCurrent": true,
3860
"summary": "Focus: code agents with multi-turn reinforcement learning.",
3961
"highlights": [
40-
"Conducting research on code agents under multi-turn reinforcement learning settings.",
41-
"Collaborating with the Qwen team on agent training and evaluation.",
42-
"Exploring practical agent systems for coding workflows."
62+
"Conducting research on code agents especially in multi-turn reinforcement learning.",
63+
"Training SOTA agentic coding models, contributed in Qwen3-Coder series."
4364
]
4465
},
4566
{
46-
"title": "PhD Student",
47-
"company": "HKUST NLP Lab",
48-
"companyUrl": "https://nlp.ust.hk/",
49-
"location": "Hong Kong, China",
50-
"start": "2024-09-01",
51-
"category": "research",
52-
"roleType": "research",
53-
"isCurrent": true,
54-
"summary": "Focus: data-centric pre-training, trustworthy LLMs, and efficient post-training.",
55-
"highlights": [
56-
"Working with Prof. Junxian He in the HKUST NLP Lab.",
57-
"Researching data selection, prompt learning, and knowledge distillation for LLMs.",
58-
"Publishing on pre-training and post-training methods for language models."
59-
]
67+
"title": "Teaching Assistant",
68+
"company": "The Hong Kong University of Science and Technology",
69+
"location": "Hong Kong, China",
70+
"start": "2026-02-01",
71+
"category": "academic",
72+
"roleType": "teaching",
73+
"isCurrent": true,
74+
"summary": "COMP 5212: Machine Learning (PG)",
75+
"highlights": [
76+
"Supported postgraduate machine learning teaching in Spring 2026 teached by Prof. Junxian He.",
77+
"Assisted with assignment creation, grading, and student questions."
78+
]
6079
},
6180
{
6281
"title": "Teaching Assistant",
6382
"company": "The Hong Kong University of Science and Technology",
6483
"location": "Hong Kong, China",
65-
"start": "2025-01-01",
84+
"start": "2025-02-01",
6685
"end": "2025-05-31",
6786
"category": "academic",
6887
"roleType": "teaching",
6988
"summary": "COMP 4211: Machine Learning (UG)",
7089
"highlights": [
71-
"Supported undergraduate machine learning teaching in Spring 2025.",
72-
"Assisted with tutorials, grading, and student questions."
90+
"Supported undergraduate machine learning teaching in Spring 2025 teached by Prof. Junxian He.",
91+
"Assisted with tutorials, assignment creation, grading, and student questions."
7392
]
7493
},
7594
{
7695
"title": "Teaching Assistant",
7796
"company": "The Hong Kong University of Science and Technology",
7897
"location": "Hong Kong, China",
79-
"start": "2024-01-01",
98+
"start": "2024-02-01",
8099
"end": "2024-05-31",
81100
"category": "academic",
82101
"roleType": "teaching",
83102
"summary": "COMP 5212: Machine Learning (PG)",
84103
"highlights": [
85-
"Supported postgraduate machine learning teaching in Spring 2024.",
86-
"Worked with students on assignments and course logistics."
104+
"Supported postgraduate machine learning teaching in Spring 2024 teached by Prof. Junxian He.",
105+
"Assisted with assignment creation, grading, and student questions."
87106
]
88107
},
89108
{
@@ -96,18 +115,18 @@
96115
"roleType": "teaching",
97116
"summary": "COMP 2711H: Honors Discrete Mathematical Tools for Computer Science",
98117
"highlights": [
99-
"Supported honors discrete mathematics teaching in Fall 2023.",
118+
"Supported honors discrete mathematics teaching in Fall 2023 teached by Prof. Sunil Arya.",
100119
"Helped students strengthen mathematical foundations for CS."
101120
]
102121
},
103122
{
104-
"title": "Natural Language Processing Engineer",
123+
"title": "Natural Language Processing Intern",
105124
"company": "Search and Strategy Department, Baidu China Co., Ltd.",
106125
"location": "Beijing, China",
107126
"start": "2021-06-01",
108127
"end": "2021-09-30",
109128
"category": "industry",
110-
"roleType": "mle",
129+
"roleType": "intern",
111130
"summary": "Worked on e-commerce shopping search ranking and query-document matching.",
112131
"highlights": [
113132
"Designed and developed search algorithms under e-commerce shopping scenarios.",

content/logos.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
{
2+
"Qwen Team": "/qwen-color.svg",
23
"Qwen Team, Alibaba": "/qwen-color.svg",
34
"HKUST NLP Lab": "https://www.google.com/s2/favicons?domain=hkust.edu.hk&sz=64",
4-
"The Hong Kong University of Science and Technology": "https://www.google.com/s2/favicons?domain=hkust.edu.hk&sz=64"
5+
"The Hong Kong University of Science and Technology": "https://www.google.com/s2/favicons?domain=hkust.edu.hk&sz=64",
6+
"Search and Strategy Department, Baidu China Co., Ltd.": "https://www.google.com/s2/favicons?domain=baidu.com&sz=64"
57
}

index.html

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,10 @@
22
<html lang="en">
33
<head>
44
<meta charset="UTF-8" />
5-
<link rel="icon" type="image/svg+xml" href="/logo-icon.svg" />
6-
<link rel="icon" type="image/png" href="/icon.png" />
5+
<link rel="icon" type="image/png" href="https://www.google.com/s2/favicons?domain=hkust.edu.hk&sz=64" />
76
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
8-
<meta name="description" content="Personal portfolio built with Terminal Portfolio Template" />
9-
<title>%VITE_SITE_TITLE%</title>
7+
<meta name="description" content="KASHUN's Personal Website" />
8+
<title>KASHUN's Personal Website</title>
109
<!-- Google Analytics — set VITE_GA_ID in .env to enable -->
1110
<script>
1211
(function() {

src/components/About.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import { useLocalizedData } from '@/hooks/useLocalizedData'
66

77
// Import sub-components
88
import HeroSection from './about/HeroSection'
9-
import Footer from './about/Footer'
109
import NewsTimeline from './about/NewsTimeline'
1110
import AccomplishmentsTerminal from './AccomplishmentsTerminal'
1211
import PublicationsTerminal from './PublicationsTerminal'
@@ -133,7 +132,6 @@ function About() {
133132

134133
<AccomplishmentsTerminal />
135134
</Box>
136-
<Footer />
137135
</VStack>
138136
</Box>
139137
)

src/components/AccomplishmentsTerminal.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,14 +115,15 @@ const AwardRow = ({ award }: { award: Award }) => {
115115
const AccomplishmentsTerminal: React.FC = () => {
116116
const { t } = useTranslation()
117117
const { awards } = useLocalizedData()
118+
const sortedAwards = [...awards].sort((a, b) => b.date.localeCompare(a.date))
118119
return (
119120
<Container maxW={["full", "full", "7xl"]} px={[2, 4, 8]}>
120121
<Heading size={["sm", "md"]} mb={3}>{t('about.awardsAndHonors')}</Heading>
121122
<Text fontSize="xs" color={useColorModeValue('gray.500', 'gray.400')} mb={4}>
122-
{awards.length} {t('about.awardsSpanning')} {new Set(awards.map(a => a.kind)).size} {t('about.categories')}
123+
{sortedAwards.length} {t('about.awardsSpanning')} {new Set(sortedAwards.map(a => a.kind)).size} {t('about.categories')}
123124
</Text>
124125
<VStack spacing={0} align="stretch">
125-
{awards.map((a, i) => (
126+
{sortedAwards.map((a, i) => (
126127
<AwardRow key={i} award={a} />
127128
))}
128129
</VStack>

src/components/Experience.tsx

Lines changed: 75 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useState, useMemo } from 'react'
1+
import React, { useEffect, useState, useMemo } from 'react'
22
import {
33
Box, Collapse, Flex, HStack, Icon, Input, Text, VStack,
44
Image, Link, useColorMode, useBreakpointValue,
@@ -28,6 +28,7 @@ const roleTypeConfig: Record<RoleType, { labelKey: string; color: (dk: boolean)
2828
sde: { labelKey: 'experience.roleSDE', color: dk => dk ? '#d08770' : '#b35a2e' },
2929
teaching: { labelKey: 'experience.roleTeaching', color: dk => dk ? '#a3be8c' : '#34744e' },
3030
leadership: { labelKey: 'experience.roleLeadership', color: dk => dk ? '#ebcb8b' : '#c47d46' },
31+
intern: { labelKey: 'experience.roleIntern', color: dk => dk ? '#88c0d0' : '#2a769c' },
3132
}
3233

3334
/* ── Logos helper ────────────────────────────────────────────── */
@@ -50,6 +51,21 @@ const fmtDateFn = (v: string | undefined, presentLabel: string) => {
5051
return d.toLocaleDateString('en-US', { month: 'short', year: 'numeric' })
5152
}
5253

54+
const fmtEducationDate = (v?: string) => {
55+
if (!v) return ''
56+
const d = new Date(v)
57+
if (Number.isNaN(d.getTime())) return v
58+
return d.toLocaleDateString('en-US', { month: 'short', year: 'numeric' }).replace(' ', '. ')
59+
}
60+
61+
const fmtEducationRange = (start?: string, end?: string) => {
62+
if (!start && !end) return ''
63+
const startLabel = fmtEducationDate(start)
64+
const endLabel = !end ? 'Present' : end.toLowerCase() === 'present' ? 'Present' : fmtEducationDate(end)
65+
if (!startLabel) return endLabel
66+
return `${startLabel} - ${endLabel}`
67+
}
68+
5369
/* ── Component ─────────────────────────────────────────────────── */
5470
interface ExperienceProps {
5571
embedded?: boolean
@@ -67,6 +83,14 @@ const Experience: React.FC<ExperienceProps> = ({ embedded = false }) => {
6783
const [expandedItems, setExpandedItems] = useState<Record<string, boolean>>({})
6884
const [command, setCommand] = useState('')
6985
const [cmdOutput, setCmdOutput] = useState<string[]>([])
86+
const [currentTime, setCurrentTime] = useState(new Date())
87+
88+
useEffect(() => {
89+
const interval = window.setInterval(() => {
90+
setCurrentTime(new Date())
91+
}, 1000)
92+
return () => window.clearInterval(interval)
93+
}, [])
7094

7195
/* Palette (centralized) */
7296
const tc = terminalPalette.colors(isDark)
@@ -229,7 +253,7 @@ const Experience: React.FC<ExperienceProps> = ({ embedded = false }) => {
229253
</Text>
230254
</HStack>
231255
<Text color={termHighlight}>
232-
{new Date().toLocaleTimeString('en-US', { hour12: false, hour: '2-digit', minute: '2-digit', second: '2-digit' })}
256+
{currentTime.toLocaleTimeString('en-US', { hour12: false, hour: '2-digit', minute: '2-digit', second: '2-digit' })}
233257
</Text>
234258
</Flex>
235259

@@ -265,18 +289,56 @@ const Experience: React.FC<ExperienceProps> = ({ embedded = false }) => {
265289
<VStack align="stretch" spacing={1.5} pl={1}>
266290
{education.map(edu => {
267291
const logo = institutionLogos[edu.institution]
292+
const period = fmtEducationRange(edu.start, edu.end) || edu.year
268293
return (
269-
<HStack key={edu.course} fontSize="xs" spacing={2}>
270-
{logo ? (
271-
<Image src={logo} alt="" w="16px" h="16px" borderRadius="sm" objectFit="contain" flexShrink={0} />
272-
) : (
273-
<Box w="16px" h="16px" borderRadius="sm" bg={`${termCommand}20`} flexShrink={0} />
274-
)}
275-
<Text color={termText} fontWeight="medium">{edu.course}</Text>
276-
<Text color={termSecondary}>·</Text>
277-
<Text color={termCommand}>{edu.institution}</Text>
278-
<Text color={termSecondary} ml="auto" flexShrink={0}>{edu.year}</Text>
279-
</HStack>
294+
<Box key={edu.course} py={2.5} borderBottom={`1px dotted ${termBorder}`} _last={{ borderBottom: 'none' }}>
295+
<Flex gap={3} align="flex-start">
296+
{logo ? (
297+
<Image src={logo} alt="" w="24px" h="24px" borderRadius="sm" objectFit="contain" flexShrink={0} mt={0.5} />
298+
) : (
299+
<Box w="24px" h="24px" borderRadius="sm" bg={`${termCommand}20`} flexShrink={0} mt={0.5} />
300+
)}
301+
<Box flex="1" minW={0}>
302+
<Flex align="flex-start" gap={3}>
303+
<Box flex="1" minW={0}>
304+
<Text color={termCommand} fontWeight="medium" fontSize="xs" lineHeight="1.4">
305+
{edu.institution}
306+
</Text>
307+
<Text color={termText} fontWeight="medium" fontSize="xs" lineHeight="1.5">
308+
{edu.course}
309+
</Text>
310+
</Box>
311+
<Text color={termSecondary} fontSize="xs" flexShrink={0} textAlign="right" mt={0.5}>
312+
{period}
313+
</Text>
314+
</Flex>
315+
{edu.details?.map((detail) => (
316+
<Text key={detail} color={termSecondary} fontSize="xs" lineHeight="1.5">
317+
{detail}
318+
</Text>
319+
))}
320+
{edu.honors && edu.honors.length > 0 && (
321+
<Flex wrap="wrap" gap={2} mt={2}>
322+
{edu.honors.map((honor) => (
323+
<Box
324+
key={honor}
325+
px={2.5}
326+
py={1}
327+
borderRadius="md"
328+
bg={isDark ? 'rgba(94,129,172,0.18)' : 'rgba(191,219,254,0.9)'}
329+
color={isDark ? '#9fd4ff' : '#4b5563'}
330+
fontSize="xs"
331+
fontWeight="medium"
332+
lineHeight="1"
333+
>
334+
{honor}
335+
</Box>
336+
))}
337+
</Flex>
338+
)}
339+
</Box>
340+
</Flex>
341+
</Box>
280342
)
281343
})}
282344
</VStack>

0 commit comments

Comments
 (0)