Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -49,4 +49,4 @@
"vite": "^6.3.6"
},
"packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
}
}
Binary file removed public/coop_resume.pdf
Binary file not shown.
16 changes: 7 additions & 9 deletions public/data/about-me.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"phrases": [
"Cloud Ops Database Engineer",
"Teaching Assistant",
"Database Engineer",
"DevOps Engineer",
"Software Engineer",
Expand All @@ -10,17 +10,15 @@
"International Student from China",
"Computer Science Student",
"Statistics Student",
"Cloud Infrastructure Specialist",
"Cloud Engineer",
"Kubernetes Enthusiast",
"Database Administration Specialist",
"Terraform Practitioner",
"AWS Solutions User",
"Automation Enthusiast",
"Problem Solver",
"Lifelong Learner",
"Former PLAI Research Engineer",
"Former UBC TA",
"Open Source Contributor",
"Open Source Maintainer",
"Amateur Photographer",
"Violin Player",
"Aviation Fan",
Expand All @@ -34,10 +32,10 @@
"Vocaloid Producer"
],
"paragraphs": [
"I'm a Computer Science and Statistics student at UBC, currently on co-op as a Cloud Ops Database Engineer at Samsung R&D Canada. I'm passionate about technology, problem-solving, and continuous learning.",
"At Samsung, I work on cloud infrastructure and database operations, building tools for account management and implementing Kubernetes and Terraform solutions. I also enjoy contributing to research projects at UBC's PLAI lab, where I develop Minecraft plugins and AI agent frameworks.",
"I have experience with various technologies including Kubernetes, Docker, AWS, Python, TypeScript, and Java. I've worked with databases like MySQL, PostgreSQL, and MongoDB, and I enjoy automating workflows and building monitoring solutions.",
"Beyond coding, I'm an amateur photographer, violin player, and aviation enthusiast. I love playing Minecraft (and have developed mods & plugins for it!), reading manga, and spending time with my cat. I also enjoy strategy games like War Thunder and Total War.",
"I'm a Computer Science and Statistics student at UBC, where I currently working as a Teaching Assistant for CPSC330 Applied Machine Learning. I'm passionate about software development and cloud engineering.",
"I've previously worked as a Cloud Operations & Database Engineering at Samsung R&D Canada and as a Software Engineer at UBC's Pacific Laboratory for Artificial Intelligence (PLAI). I have experience in cloud infrastructure, DevOps, database administration, and fullstack software development.",
"I co-authored ClawBench and architected its core containerized runtime for safe, reproducible browser-agent evaluation. I also maintain the open-source project through CI/CD, releases, runtime integrations, community reviews, and user support.",
"I work with AWS, Kubernetes, Terraform, Ansible, Docker, Grafana, OpenTelemetry, TypeScript, Go, Python, Java, PostgreSQL, and MongoDB, and I enjoy automating workflows and building reliable systems.",
"I'm always eager to explore new technologies and collaborate on interesting projects. Feel free to reach out if you'd like to connect!"
]
}
85 changes: 35 additions & 50 deletions public/data/work-experiences.json
Original file line number Diff line number Diff line change
@@ -1,40 +1,44 @@
{
"workExperiences": [
{
"jobTitle": "Cloud Ops Database Engineer",
"company": "Samsung R&D Canada",
"companyShortName": "Samsung R&D Canada",
"startDate": "Sep 2025",
"jobTitle": "Teaching Assistant - CPSC330 Applied Machine Learning",
"company": "The University of British Columbia, Department of Computer Science",
"companyShortName": "UBC Computer Science",
"startDate": "Sep 2026",
"endDate": "Present",
"descriptions": [
{
"shortDesc": "Built a centralized User Account Management tool with enterprise-grade controls for 2000+ database accounts.",
"shortDesc": "Teaching assistant for CPSC330 Applied Machine Learning.",
"longDesc": [
"Developed a centralized User Account Management (UAM) tool to unify prod and non-prod account management for 2000+ accounts across all project databases with an intuitive UI, implementing automated password rotation, account expiration, safe credential delivery via corporate email, and ticket-attached audit logging for compliance."
"Serving as a teaching assistant for CPSC330 Applied Machine Learning."
]
},
{
"shortDesc": "Orchestrated Kubernetes delivery for UAM and secured multi-account database connectivity with Terraform IaC.",
"longDesc": [
"Orchestrated the UAM application deployment on Kubernetes with Argo CD and AWS EKS, architecting network routings, VPC peerings, IAM policies, and Security Groups using Terraform to securely connect to 100+ MySQL, Postgres, Redshift, and MongoDB databases across 20+ VPCs in 5 AWS accounts and 3 regions."
]
},
}
],
"location": "Vancouver, British Columbia, Canada"
},
{
"jobTitle": "Cloud Operations & Database Engineer",
"company": "Samsung R&D Canada",
"companyShortName": "Samsung R&D Canada",
"startDate": "Sep 2025",
"endDate": "Aug 2026",
"descriptions": [
{
"shortDesc": "Automated observability migration to Grafana by standardizing Alloy agent rollout via Ansible.",
"shortDesc": "Built and deployed DB-UAM for secure, auditable management of 3,000+ accounts across 150+ databases.",
"longDesc": [
"Supported the migration from Datadog to self-hosted Grafana by automating the configuration and deployment of Alloy agents across 70+ MongoDB EC2 instances with Ansible, ensuring consistent metrics, traces, and log shipping."
"Designed and built DB-UAM, a centralized portal for secure and auditable database-user lifecycle management across MongoDB, MySQL, PostgreSQL, and Amazon Redshift. Deployed it to AWS EKS through Argo CD using Helm charts and provisioned dedicated subnets, a Karpenter NodePool, cross-account networking, VPC peering, IAM policies, and security groups with Terraform, supporting 3,000+ accounts across 150+ databases in multiple VPCs, AWS accounts, and regions."
]
},
{
"shortDesc": "Built MongoDB index usage collection and visualization to guide DBA tuning decisions.",
"shortDesc": "Migrated database observability to Grafana LGTM and expanded MongoDB and RDS monitoring.",
"longDesc": [
"Performed index usage statistics collection by developing a cron script and a dashboard to automatically collect, aggregate, and visualize MongoDB index usage across all replica sets, enabling senior DBAs to analyze and optimize index performance."
"Migrated database observability from Datadog to a self-hosted Grafana LGTM stack integrated with AlertNow and Slack, using Ansible to deploy and configure Alloy across 80+ MongoDB EC2 instances for standardized metrics and logs. Customized a fork of an open-source MongoDB Prometheus exporter and configured an RDS exporter to support internal monitoring requirements and additional functionality, built MongoDB and RDS dashboards and alerts, and developed custom scripts for MongoDB index-usage analytics."
]
},
{
"shortDesc": "Designing Grafana dashboards for RDS, Redshift, and MongoDB to improve real-time visibility and alerting.",
"shortDesc": "Deployed MongoDB Ops Manager to AWS EKS for secure and resilient database administration.",
"longDesc": [
"Designing and building custom Grafana dashboards to monitor RDS, Redshift, and MongoDB status, improving real-time visibility into database and OS health and enabling timely alerting."
"Deployed MongoDB Ops Manager to AWS EKS using Helm charts and Terraform; configured TLS-encrypted communication, backup and recovery, high availability, and SSO integration with Authentik for secure and resilient MongoDB administration."
]
}
],
Expand All @@ -48,56 +52,37 @@
"endDate": "Aug 2025",
"descriptions": [
{
"shortDesc": "Upgraded legacy Minecraft plugins/mods to 1.21 with robust connection lifecycle handling for data collection.",
"shortDesc": "Modernized legacy Minecraft plugins and mods for reliable behavioral-data collection.",
"longDesc": [
"Upgraded and enhanced legacy Java plugins and mods from Minecraft 1.19 to 1.21, improving connection and termination logic based on client states to ensure stable and reliable behavioral data collection."
"Modernized legacy Java Minecraft plugins and mods from Minecraft 1.19 to 1.21 and refactored connection and session-lifecycle logic, improving the reliability of behavioral-data collection."
]
},
{
"shortDesc": "Built an Agent Companion Framework enabling safe, private AI character interactions on the game server.",
"shortDesc": "Architected an Agent Companion Framework for safe, private agent-player interactions.",
"longDesc": [
"Architected the Agent Companion Framework to integrate AI characters into the game server, featuring a custom session queue and specialized command interface for private, uninterrupted agent communication, with deterministic guardrails to prevent unsafe actions such as violence or property destruction."
"Architected an Agent Companion Framework with session queuing and a command interface for private agent-player interactions; added deterministic safety guardrails to prevent unsafe in-game actions."
]
},
{
"shortDesc": "Enhanced PLAITime backend with transcription batching, real-time validation, and incentive mechanisms.",
"shortDesc": "Implemented the PLAITime backend with context-aware transcription, real-time validation, and quality-based incentives.",
"longDesc": [
"Contributed to the PLAITime mechanism backend by integrating a transcription model to batch-process player voice transcripts with audio context, implementing real-time validation using Lambda functions and UDP sockets, and designing an incentive mechanism that dynamically awards playing time for high-value interactions while limiting low-quality sessions."
"Implemented the new PLAITime backend with context-aware voice transcription using Whisper, real-time LLM validation through AWS Lambda and UDP sockets, and an incentive mechanism that adjusted playtime based on interaction quality."
]
}
],
"location": "Vancouver, British Columbia, Canada"
},
{
"jobTitle": "Teaching Assistant",
"company": "The University of British Columbia",
"companyShortName": "UBC",
"jobTitle": "Teaching Assistant - CPSC304 Introduction to Relational Databases",
"company": "The University of British Columbia, Department of Computer Science",
"companyShortName": "UBC Computer Science",
"startDate": "Jan 2025",
"endDate": "Aug 2025",
"endDate": "Apr 2025",
"descriptions": [
{
"shortDesc": "Guided students through database design concepts and implementation in weekly lab sessions.",
"longDesc": [
"Held weekly one-hour lab sessions to guide students through hands-on exercises on relational database design and implementation using ER models, relational algebra, and SQL."
]
},
{
"shortDesc": "Provided regular office hours and online support for student questions.",
"longDesc": [
"Provided weekly office hours to address students' questions and offer individualized support.",
"Answered student queries promptly via Piazza and emails, fostering a supportive learning environment."
]
},
{
"shortDesc": "Assisted with full-stack database project development and implementation.",
"longDesc": [
"Assisted students in designing and implementing full-stack database projects using JavaScript/TypeScript and SQL, ensuring proper design and integration of the database."
]
},
{
"shortDesc": "Collaborated with instructors on course alignment and grading.",
"shortDesc": "Led weekly database labs for 50+ students and mentored five full-stack project teams.",
"longDesc": [
"Coordinated with course instructors to align project deliverables with course objectives and maintain consistent grading standards."
"Led weekly labs for 50+ students on database design, ER modeling, relational algebra, and SQL; mentored five teams on full-stack database projects."
]
}
],
Expand Down
Binary file added public/resume_latest.pdf
Binary file not shown.
56 changes: 55 additions & 1 deletion src/assets/projects-details.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { IconedLink, LinkText, ProjectInfo } from "@/components";
import { SiGithub } from "react-icons/si";
import { SiArxiv, SiGithub } from "react-icons/si";

/**
* This file contains the project details that will be displayed on the project cards.
Expand All @@ -8,6 +8,60 @@ import { SiGithub } from "react-icons/si";
* Modifying the file requires re-building the project.
*/
export const projectInfos: ProjectInfo[] = [
{
title: "ClawBench Paper",
intro: (
<>
<strong>EMNLP 2026 Findings</strong> and{" "}
<strong>COLM 2026 Workshop on Agent Behavior</strong> paper on an
open-source browser-agent evaluation benchmark with a{" "}
<code>containerized runtime</code>, final request interception,
interchangeable browser runtimes and agent harnesses, and five-layer
recording
</>
),
descriptions: [
{
shortDesc: (
<>
<strong>Architected and implemented</strong> ClawBench&apos;s core
runtime for safe, reproducible browser-agent evaluation across 281
tasks on 163 live websites.
</>
),
longDesc: (
<>
<ul>
<li>
Built interchangeable browser-runtime and agent-harness
integrations with final-request interception and{" "}
<strong>five-layer recording</strong>.
</li>
<li>
Established <strong>CI/CD</strong> and automated PyPI release
pipelines, reviewed community pull requests, and resolved
user-reported issues.
</li>
</ul>
</>
),
},
],
links: [
<>
<IconedLink href="https://arxiv.org/abs/2604.08523">
<SiArxiv />
<LinkText>Read the paper</LinkText>
</IconedLink>
</>,
<>
<IconedLink href="https://github.com/TIGER-AI-Lab/ClawBench">
<SiGithub />
<LinkText>Check GitHub</LinkText>
</IconedLink>
</>,
],
},
{
title: "GP-News",
intro: (
Expand Down
2 changes: 2 additions & 0 deletions src/assets/skills-details.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ export const skillsData: SkillCategory[] = [
{ name: "Three.js", icon: <TbBrandThreejs /> },
{ name: "Express.js", icon: <SiExpress /> },
{ name: "NestJS", icon: <SiNestjs /> },
{ name: "Spring Boot", icon: <FaJava /> },
{ name: "TanStack", icon: <FaReact /> },
],
},
Expand Down Expand Up @@ -173,6 +174,7 @@ export const skillsData: SkillCategory[] = [
{ name: "Ansible", icon: <SiAnsible /> },
{ name: "Terraform", icon: <SiTerraform /> },
{ name: "Grafana", icon: <SiGrafana /> },
{ name: "OpenTelemetry", icon: <MdOutlineEngineering /> },
{ name: "CI/CD", icon: <MdOutlineEngineering /> },
{ name: "GitHub Actions", icon: <FaGithub /> },
{ name: "Golang", icon: <SiGo /> },
Expand Down
2 changes: 1 addition & 1 deletion src/components/pages/AboutMe.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ function AboutMeRight() {
</p>
))}
<Link
href="/coop_resume.pdf"
href="/resume_latest.pdf"
download="PerryZ_resume.pdf"
className="flex w-full justify-center self-start"
>
Expand Down
19 changes: 18 additions & 1 deletion src/components/ui/ContactInfoCard.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
import { Card, CardBody, Divider, Button, Link } from "@heroui/react";
import { ContactInfoItem } from "./ContactInfoItem";
import { MdEmail, MdLocationOn, MdPerson } from "react-icons/md";
import { SiGithub, SiLinkedin, SiInstagram, SiPexels } from "react-icons/si";
import {
SiBilibili,
SiGithub,
SiInstagram,
SiLinkedin,
SiPexels,
} from "react-icons/si";

export function ContactInfoCard() {
return (
Expand Down Expand Up @@ -89,6 +95,17 @@ export function ContactInfoCard() {
<SiPexels className="h-5 w-5 sm:h-6 sm:w-6" />
<span>Pexels</span>
</Button>

<Button
as="a"
href="https://space.bilibili.com/384057718"
className="gradient-button-hover-responsive flex items-center gap-2 border border-[#5ad6ff]/50 bg-white px-5 py-3 text-sm text-gray-700 shadow-sm dark:border-[#5ad6ff]/70 dark:bg-gray-800 dark:text-gray-200 sm:text-lg"
target="_blank"
rel="noopener noreferrer"
>
<SiBilibili className="h-5 w-5 sm:h-6 sm:w-6" />
<span>Bilibili</span>
</Button>
</div>
</div>
</CardBody>
Expand Down
6 changes: 6 additions & 0 deletions src/styles/index.css
Original file line number Diff line number Diff line change
Expand Up @@ -349,6 +349,12 @@
height: 100%;
}

/* React Chrono's inner wrapper is not independently scrollable in this layout.
Allow wheel and touch gestures to continue to fullPage.js's scroll container. */
.work-experiences-timeline .timeline-main-wrapper {
overscroll-behavior-y: auto;
}

.TimelineVerticalWrapper-sc-1427v1d-0 {
height: 100%;
justify-content: center;
Expand Down
6 changes: 3 additions & 3 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2862,9 +2862,9 @@ camelize@^1.0.0:
integrity sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==

caniuse-lite@^1.0.30001688, caniuse-lite@^1.0.30001702:
version "1.0.30001715"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001715.tgz#bd325a37ad366e3fe90827d74062807a34fbaeb2"
integrity sha512-7ptkFGMm2OAOgvZpwgA4yjQ5SQbrNVGdRjzH0pBdy1Fasvcr+KAeECmbCAECzTuDuoX0FCY8KzUxjf9+9kfZEw==
version "1.0.30001810"
resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001810.tgz"
integrity sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==

chalk@^4.0.0:
version "4.1.2"
Expand Down
Loading