diff --git a/package.json b/package.json index 1a9eac6..eb91bb9 100644 --- a/package.json +++ b/package.json @@ -49,4 +49,4 @@ "vite": "^6.3.6" }, "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" -} \ No newline at end of file +} diff --git a/public/coop_resume.pdf b/public/coop_resume.pdf deleted file mode 100644 index 4c16e3e..0000000 Binary files a/public/coop_resume.pdf and /dev/null differ diff --git a/public/data/about-me.json b/public/data/about-me.json index f35193e..f823710 100644 --- a/public/data/about-me.json +++ b/public/data/about-me.json @@ -1,6 +1,6 @@ { "phrases": [ - "Cloud Ops Database Engineer", + "Teaching Assistant", "Database Engineer", "DevOps Engineer", "Software Engineer", @@ -10,7 +10,7 @@ "International Student from China", "Computer Science Student", "Statistics Student", - "Cloud Infrastructure Specialist", + "Cloud Engineer", "Kubernetes Enthusiast", "Database Administration Specialist", "Terraform Practitioner", @@ -18,9 +18,7 @@ "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", @@ -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!" ] } diff --git a/public/data/work-experiences.json b/public/data/work-experiences.json index 0d3c825..1f74e71 100644 --- a/public/data/work-experiences.json +++ b/public/data/work-experiences.json @@ -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." ] } ], @@ -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." ] } ], diff --git a/public/resume_latest.pdf b/public/resume_latest.pdf new file mode 100644 index 0000000..cfa6383 Binary files /dev/null and b/public/resume_latest.pdf differ diff --git a/src/assets/projects-details.tsx b/src/assets/projects-details.tsx index c1f3790..2904434 100644 --- a/src/assets/projects-details.tsx +++ b/src/assets/projects-details.tsx @@ -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. @@ -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: ( + <> + EMNLP 2026 Findings and{" "} + COLM 2026 Workshop on Agent Behavior paper on an + open-source browser-agent evaluation benchmark with a{" "} + containerized runtime, final request interception, + interchangeable browser runtimes and agent harnesses, and five-layer + recording + + ), + descriptions: [ + { + shortDesc: ( + <> + Architected and implemented ClawBench's core + runtime for safe, reproducible browser-agent evaluation across 281 + tasks on 163 live websites. + + ), + longDesc: ( + <> + + + ), + }, + ], + links: [ + <> + + + Read the paper + + , + <> + + + Check GitHub + + , + ], + }, { title: "GP-News", intro: ( diff --git a/src/assets/skills-details.tsx b/src/assets/skills-details.tsx index 31edf98..9f76239 100644 --- a/src/assets/skills-details.tsx +++ b/src/assets/skills-details.tsx @@ -93,6 +93,7 @@ export const skillsData: SkillCategory[] = [ { name: "Three.js", icon: }, { name: "Express.js", icon: }, { name: "NestJS", icon: }, + { name: "Spring Boot", icon: }, { name: "TanStack", icon: }, ], }, @@ -173,6 +174,7 @@ export const skillsData: SkillCategory[] = [ { name: "Ansible", icon: }, { name: "Terraform", icon: }, { name: "Grafana", icon: }, + { name: "OpenTelemetry", icon: }, { name: "CI/CD", icon: }, { name: "GitHub Actions", icon: }, { name: "Golang", icon: }, diff --git a/src/components/pages/AboutMe.tsx b/src/components/pages/AboutMe.tsx index b24f7c1..934a92b 100644 --- a/src/components/pages/AboutMe.tsx +++ b/src/components/pages/AboutMe.tsx @@ -82,7 +82,7 @@ function AboutMeRight() {

))} diff --git a/src/components/ui/ContactInfoCard.tsx b/src/components/ui/ContactInfoCard.tsx index c200ac2..7b75262 100644 --- a/src/components/ui/ContactInfoCard.tsx +++ b/src/components/ui/ContactInfoCard.tsx @@ -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 ( @@ -89,6 +95,17 @@ export function ContactInfoCard() { Pexels + + diff --git a/src/styles/index.css b/src/styles/index.css index 2116a04..539b261 100644 --- a/src/styles/index.css +++ b/src/styles/index.css @@ -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; diff --git a/yarn.lock b/yarn.lock index de2b701..52b9a79 100644 --- a/yarn.lock +++ b/yarn.lock @@ -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"