Skip to content

Commit 1225382

Browse files
author
graceyuen
committed
feat: refactor content structure to a seperate file
1 parent c1fbbc1 commit 1225382

File tree

3 files changed

+149
-139
lines changed

3 files changed

+149
-139
lines changed

app/content.ts

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
// Content for portfolio sections
2+
3+
export const skillsets = {
4+
Programming: ["Python", "C++", "Java", "R", "Bash"],
5+
"DevOps & Tools": ["Linux CLI", "Git", "GitHub"],
6+
"Web Development": ["HTML", "CSS", "JavaScript", "TypeScript"],
7+
"Cloud & Automation": [
8+
"Google Cloud Platform",
9+
"Microsoft Office 365",
10+
"Power Automate",
11+
],
12+
"Design & Media": ["Blender", "CapCut", "Canva", "Figma"],
13+
};
14+
15+
export const experiences = [
16+
{
17+
type: "internship" as const,
18+
title: "IT Wagering Solutions Summer Intern",
19+
company: "Hong Kong Jockey Club",
20+
period: "Jul - Aug 2025 (Upcoming)",
21+
description:
22+
"Expected to assist with wagering system maintenance and optimization to support transaction processing improvements under senior developer guidance.",
23+
},
24+
{
25+
type: "internship" as const,
26+
title: "Business Development Intern (Part-time)",
27+
company: "Versitech Limited / Technology Transfer Office (TTO), HKU",
28+
period: "Sep 2024 - Jun 2025",
29+
description:
30+
"Analyzed invention manuscripts and assessed commercial viability to identify global business opportunities, and built a comprehensive documentation website for the Versitech e-Form processor GUI application using the Docsify framework.",
31+
},
32+
{
33+
type: "internship" as const,
34+
title: "Student Research Assistant Intern",
35+
company: "Department of Data and Systems Engineering (DASE), HKU",
36+
period: "Dec 2024 - Jan 2025",
37+
description:
38+
"Collected 7.5+ hours of motion capture data from 15 participants to train AI models for camera-free gesture recognition and demonstrated the system to 100+ industry partners.",
39+
},
40+
{
41+
type: "internship" as const,
42+
title: "Student Teaching Assistant for ENGG1330 Computer Programming I",
43+
company: "School of Computing & Data Science, HKU",
44+
period: "Sep - Nov 2024",
45+
description:
46+
"Selected as one of 38 tutors from 535 students to host weekly Python tutorial sessions for first-year engineering students. Provided comprehensive guidance on fundamental programming concepts including syntax, control statements, functions, and data types through teaching materials and active participation in course forums.",
47+
},
48+
{
49+
type: "internship" as const,
50+
title: "IT Software Technician Intern",
51+
company: "Yew Chung Education Foundation",
52+
period: "Jun - Aug 2024",
53+
description:
54+
"Coordinated the deployment of the Asset Management and Tracking System (AMTS) across 10 campuses for 18,000+ assets.",
55+
},
56+
];
57+
58+
export const projects = [
59+
{
60+
id: 1,
61+
title: "The Hidden Eden",
62+
description:
63+
"An immersive 3D artwork designed for exploration in virtual reality",
64+
technologies: ["Blender", "Meta Quest 3", "Gravity Sketch"],
65+
prototypeUrl: "",
66+
githubUrl: "https://github.com/gracetyy/CCST9049_ProjectII_Group2D3",
67+
details:
68+
"Created as a CCST9049 group project, where I was responsible for creating the whole 3D world model. Players can view and interact with the 3D world in Gravity Sketch on Meta Quest 3, such as painting on the easel, grabbing the food, and diving into the underwater world.",
69+
},
70+
{
71+
id: 2,
72+
title: "Turn-based C++ Terminal Game",
73+
description:
74+
"A turn-based terminal adventure game where you guide a lost explorer to safety while escaping from hunters' attack",
75+
technologies: ["C++", "Bash", "GitHub", "GitHub Action"],
76+
videoUrl: "https://the-bithub.com/ENGG1340ProjectDemo",
77+
details:
78+
"Created for the group project of ENGG1340 Computer Programming II, featuring real-time keyboard controls, autosave, region-based computer enemy movement using Dijkstra’s algorithm, and dynamic map obstacles.",
79+
},
80+
{
81+
id: 3,
82+
title: "Xin Sheng 馨聲",
83+
description:
84+
"AI companion app that addresses elderly loneliness through emotional recognition, personalized interactions, and community-building features",
85+
technologies: ["GenAI", "Figma"],
86+
prototypeUrl: "https://the-bithub.com/XinShengFigma",
87+
pitchDeckUrl: "https://the-bithub.com/XinShengPitchDeck",
88+
details:
89+
"A real-time collaborative task management application with features like drag-and-drop kanban boards, team collaboration, file sharing, and progress tracking.",
90+
},
91+
{
92+
id: 4,
93+
title: "Text-based terminal game inspired by 2048",
94+
description:
95+
"Selected as one of the Top 10 Featured Projects among 107 groups",
96+
technologies: ["Python", "Curses Library"],
97+
videoUrl: "https://the-bithub.com/ENGG1330ProjectDemo",
98+
details:
99+
"Completed as a group project for ENGG1330 Computer Programming I, with the restriction that no third-party external libraries were allowed.",
100+
},
101+
{
102+
id: 5,
103+
title: "Baby Chat",
104+
description:
105+
"AI-powered Parenting App made for the GenAI Hackathon for Social Good 2023",
106+
technologies: ["OpenAI API", "Embeddings", "RAG", "Sketch", "GitHub"],
107+
videoUrl: "https://the-bithub.com/BabyChatDemoVid",
108+
details:
109+
"Engaged in collaborative work with a diverse team of participants, including master's and PhD students. Received invaluable mentorship provided by professors and judges to develop a GenAI-powered chatbot app for newborn parents.",
110+
},
111+
];
112+
113+
export const contactInfo = [
114+
{
115+
icon: "mail",
116+
label: "School Email",
117+
118+
href: "mailto:[email protected]",
119+
},
120+
{
121+
icon: "mail",
122+
label: "Personal Email",
123+
124+
href: "mailto:[email protected]",
125+
},
126+
{
127+
icon: "linkedin",
128+
label: "LinkedIn",
129+
value: "@gracetyy",
130+
href: "https://linkedin.com/in/gracetyy",
131+
},
132+
{
133+
icon: "github",
134+
label: "GitHub",
135+
value: "@gracetyy",
136+
href: "https://github.com/gracetyy",
137+
},
138+
];

app/page.tsx

Lines changed: 1 addition & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import { ProjectCard } from "@/components/project-card";
2323
import { ContactCard } from "@/components/contact-card";
2424
import { GridBackground } from "@/components/grid-background";
2525
import { useIsMobile } from "@/components/ui/use-mobile";
26+
import { skillsets, experiences, projects } from "./content";
2627

2728
export default function Portfolio() {
2829
const [showBackToTop, setShowBackToTop] = useState(false);
@@ -43,116 +44,6 @@ export default function Portfolio() {
4344
window.scrollTo({ top: 0, behavior: "smooth" });
4445
};
4546

46-
const skillsets = {
47-
Programming: ["Python", "C++", "Java", "R", "Bash"],
48-
"DevOps & Tools": ["Linux CLI", "Git", "GitHub"],
49-
"Web Development": ["HTML", "CSS", "JavaScript", "TypeScript"],
50-
"Cloud & Automation": [
51-
"Google Cloud Platform",
52-
"Microsoft Office 365",
53-
"Power Automate",
54-
],
55-
"Design & Media": ["Blender", "CapCut", "Canva", "Figma"],
56-
};
57-
58-
const experiences = [
59-
{
60-
type: "internship" as const,
61-
title: "IT Wagering Solutions Summer Intern",
62-
company: "Hong Kong Jockey Club",
63-
period: "Jul - Aug 2025 (Upcoming)",
64-
description:
65-
"Expected to assist with wagering system maintenance and optimization to support transaction processing improvements under senior developer guidance.",
66-
},
67-
{
68-
type: "internship" as const,
69-
title: "Business Development Intern (Part-time)",
70-
company: "Versitech Limited / Technology Transfer Office (TTO), HKU",
71-
period: "Sep 2024 - Jun 2025",
72-
description:
73-
"Analyzed invention manuscripts and assessed commercial viability to identify global business opportunities, and built a comprehensive documentation website for the Versitech e-Form processor GUI application using the Docsify framework.",
74-
},
75-
{
76-
type: "internship" as const,
77-
title: "Student Research Assistant Intern",
78-
company: "Department of Data and Systems Engineering (DASE), HKU",
79-
period: "Dec 2024 - Jan 2025",
80-
description:
81-
"Collected 7.5+ hours of motion capture data from 15 participants to train AI models for camera-free gesture recognition and demonstrated the system to 100+ industry partners.",
82-
},
83-
{
84-
type: "internship" as const,
85-
title: "Student Teaching Assistant for ENGG1330 Computer Programming I",
86-
company: "School of Computing & Data Science, HKU",
87-
period: "Sep - Nov 2024",
88-
description:
89-
"Selected as one of 38 tutors from 535 students to host weekly Python tutorial sessions for first-year engineering students. Provided comprehensive guidance on fundamental programming concepts including syntax, control statements, functions, and data types through teaching materials and active participation in course forums.",
90-
},
91-
{
92-
type: "internship" as const,
93-
title: "IT Software Technician Intern",
94-
company: "Yew Chung Education Foundation",
95-
period: "Jun - Aug 2024",
96-
description:
97-
"Coordinated the deployment of the Asset Management and Tracking System (AMTS) across 10 campuses for 18,000+ assets.",
98-
},
99-
];
100-
101-
const projects = [
102-
{
103-
id: 1,
104-
title: "The Hidden Eden",
105-
description:
106-
"An immersive 3D artwork designed for exploration in virtual reality",
107-
technologies: ["Blender", "Meta Quest 3", "Gravity Sketch"],
108-
prototypeUrl: "",
109-
githubUrl: "https://github.com/gracetyy/CCST9049_ProjectII_Group2D3",
110-
details:
111-
"Created as a CCST9049 group project, where I was responsible for creating the whole 3D world model. Players can view and interact with the 3D world in Gravity Sketch on Meta Quest 3, such as painting on the easel, grabbing the food, and diving into the underwater world.",
112-
},
113-
{
114-
id: 2,
115-
title: "Turn-based C++ Terminal Game",
116-
description:
117-
"A turn-based terminal adventure game where you guide a lost explorer to safety while escaping from hunters' attack",
118-
technologies: ["C++", "Bash", "GitHub", "GitHub Action"],
119-
videoUrl: "https://the-bithub.com/ENGG1340ProjectDemo",
120-
details:
121-
"Created for the group project of ENGG1340 Computer Programming II, featuring real-time keyboard controls, autosave, region-based computer enemy movement using Dijkstra’s algorithm, and dynamic map obstacles.",
122-
},
123-
{
124-
id: 3,
125-
title: "Xin Sheng 馨聲",
126-
description:
127-
"AI companion app that addresses elderly loneliness through emotional recognition, personalized interactions, and community-building features",
128-
technologies: ["GenAI", "Figma"],
129-
prototypeUrl: "https://the-bithub.com/XinShengFigma",
130-
pitchDeckUrl: "https://the-bithub.com/XinShengPitchDeck",
131-
details:
132-
"A real-time collaborative task management application with features like drag-and-drop kanban boards, team collaboration, file sharing, and progress tracking.",
133-
},
134-
{
135-
id: 4,
136-
title: "Text-based terminal game inspired by 2048",
137-
description:
138-
"Selected as one of the Top 10 Featured Projects among 107 groups",
139-
technologies: ["Python", "Curses Library"],
140-
videoUrl: "https://the-bithub.com/ENGG1330ProjectDemo",
141-
details:
142-
"Completed as a group project for ENGG1330 Computer Programming I, with the restriction that no third-party external libraries were allowed.",
143-
},
144-
{
145-
id: 5,
146-
title: "Baby Chat",
147-
description:
148-
"AI-powered Parenting App made for the GenAI Hackathon for Social Good 2023",
149-
technologies: ["OpenAI API", "Embeddings", "RAG", "Sketch", "GitHub"],
150-
videoUrl: "https://the-bithub.com/BabyChatDemoVid",
151-
details:
152-
"Engaged in collaborative work with a diverse team of participants, including master's and PhD students. Received invaluable mentorship provided by professors and judges to develop a GenAI-powered chatbot app for newborn parents.",
153-
},
154-
];
155-
15647
return (
15748
<ThemeProvider>
15849
<div className="min-h-screen bg-background text-foreground">

components/contact-card.tsx

Lines changed: 10 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -3,36 +3,17 @@
33
import { motion } from "framer-motion";
44
import { Card, CardContent } from "@/components/ui/card";
55
import { Button } from "@/components/ui/button";
6-
import { Mail, Github, Linkedin, MessageCircle } from "lucide-react";
6+
import { contactInfo } from "@/app/content";
7+
import { Mail, Github, Linkedin } from "lucide-react";
8+
import type { ReactElement } from "react";
79

8-
export function ContactCard() {
9-
const contactInfo = [
10-
{
11-
icon: <Mail className="w-5 h-5" />,
12-
label: "School Email",
13-
14-
href: "mailto:[email protected]",
15-
},
16-
{
17-
icon: <Mail className="w-5 h-5" />,
18-
label: "Personal Email",
19-
20-
href: "mailto:[email protected]",
21-
},
22-
{
23-
icon: <Linkedin className="w-5 h-5" />,
24-
label: "LinkedIn",
25-
value: "@gracetyy",
26-
href: "https://linkedin.com/in/gracetyy",
27-
},
28-
{
29-
icon: <Github className="w-5 h-5" />,
30-
label: "GitHub",
31-
value: "@gracetyy",
32-
href: "https://github.com/gracetyy",
33-
},
34-
];
10+
const iconMap: Record<string, ReactElement> = {
11+
mail: <Mail className="w-5 h-5" />,
12+
github: <Github className="w-5 h-5" />,
13+
linkedin: <Linkedin className="w-5 h-5" />,
14+
};
3515

16+
export function ContactCard() {
3617
return (
3718
<motion.div
3819
initial={{ opacity: 0, y: 20 }}
@@ -89,7 +70,7 @@ export function ContactCard() {
8970
>
9071
<div className="flex items-center gap-4">
9172
<div className="p-2 rounded-lg bg-primary/10 group-hover:bg-primary/20 transition-colors duration-300">
92-
{contact.icon}
73+
{iconMap[contact.icon as keyof typeof iconMap]}
9374
</div>
9475
<div className="text-left">
9576
<div className="font-medium">{contact.label}</div>

0 commit comments

Comments
 (0)