From 104a63a22300177ceccc7ee160f44b3d15058e02 Mon Sep 17 00:00:00 2001 From: luantran Date: Thu, 18 Dec 2025 01:59:53 -0500 Subject: [PATCH 1/4] added versioning --- .github/workflows/deploy.yml | 22 ++-------------------- 1 file changed, 2 insertions(+), 20 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 292642d..eef47da 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -11,7 +11,7 @@ on: # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages permissions: - contents: write + contents: read pages: write id-token: write @@ -43,23 +43,6 @@ jobs: NODE_ENV: production VITE_BASE_PATH: ${{ github.ref_name == 'master' && '/' || format('/{0}/', github.ref_name) }} - # Add these debug steps: - - name: Debug - Show branch and base path - run: | - echo "Branch: ${{ github.ref_name }}" - echo "Base path: ${{ github.ref_name == 'master' && '/' || format('/{0}/', github.ref_name) }}" - - - name: Debug - List dist contents - run: | - echo "Contents of dist directory:" - ls -la dist/ - echo "File count:" - find dist -type f | wc -l - - - name: Debug - Show destination - run: | - echo "Destination directory: ${{ steps.destination.outputs.dir }}" - - name: Set destination directory id: destination run: | @@ -75,5 +58,4 @@ jobs: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ./dist destination_dir: ${{ steps.destination.outputs.dir }} - keep_files: true - force_orphan: false \ No newline at end of file + keep_files: true \ No newline at end of file From f05ab903456bf0880f991255c92078755995b45c Mon Sep 17 00:00:00 2001 From: luantran Date: Thu, 18 Dec 2025 02:02:49 -0500 Subject: [PATCH 2/4] added versioning fix --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index eef47da..c1d86e0 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -11,7 +11,7 @@ on: # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages permissions: - contents: read + contents: write pages: write id-token: write From 6cacd4ee5d8f084a368a86da029fda0c877e2644 Mon Sep 17 00:00:00 2001 From: luantran Date: Thu, 18 Dec 2025 02:13:04 -0500 Subject: [PATCH 3/4] added versioning fix --- .github/workflows/deploy.yml | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index c1d86e0..292642d 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -43,6 +43,23 @@ jobs: NODE_ENV: production VITE_BASE_PATH: ${{ github.ref_name == 'master' && '/' || format('/{0}/', github.ref_name) }} + # Add these debug steps: + - name: Debug - Show branch and base path + run: | + echo "Branch: ${{ github.ref_name }}" + echo "Base path: ${{ github.ref_name == 'master' && '/' || format('/{0}/', github.ref_name) }}" + + - name: Debug - List dist contents + run: | + echo "Contents of dist directory:" + ls -la dist/ + echo "File count:" + find dist -type f | wc -l + + - name: Debug - Show destination + run: | + echo "Destination directory: ${{ steps.destination.outputs.dir }}" + - name: Set destination directory id: destination run: | @@ -58,4 +75,5 @@ jobs: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ./dist destination_dir: ${{ steps.destination.outputs.dir }} - keep_files: true \ No newline at end of file + keep_files: true + force_orphan: false \ No newline at end of file From 9994fe0d51ff83b61983c5c3fc66fbd6a0743669 Mon Sep 17 00:00:00 2001 From: luantran Date: Mon, 22 Dec 2025 02:33:01 -0500 Subject: [PATCH 4/4] changed skills.jsopn to skills.js and changed about blurb --- src/components/AboutMe.jsx | 7 +- src/components/Projects.jsx | 3 +- src/components/Skills.jsx | 25 +---- src/components/data/skills.js | 205 ++++++++++++++++++++++++++++++++++ 4 files changed, 212 insertions(+), 28 deletions(-) create mode 100644 src/components/data/skills.js diff --git a/src/components/AboutMe.jsx b/src/components/AboutMe.jsx index b6e5e63..30e70ef 100644 --- a/src/components/AboutMe.jsx +++ b/src/components/AboutMe.jsx @@ -15,9 +15,10 @@ function AboutMe() {

Luan Tran

- I'm a Master's of Applied Computer Science student with a passion for machine learning and web development. - I've worked on projects ranging from English proficiency classification to reactive web applications. Currently, I'm exploring ways to integrate using LLMs as agents in the context - of linguistic education (French and English) and looking for opportunities in Web Development/Machine Learning. + I'm a Master's student in Applied Computer Science with industry experience in automation and web development at Broadsign, Ericsson, and Matrox. My projects include deploying automated CI/CD workflows, multimodal medical imaging applications, and automated language proficiency assessment systems. +

+

+ I'm currently researching LLM-based agents for linguistic education and seeking opportunities in software development and machine learning.

    diff --git a/src/components/Projects.jsx b/src/components/Projects.jsx index 2e20200..8372f70 100644 --- a/src/components/Projects.jsx +++ b/src/components/Projects.jsx @@ -43,8 +43,7 @@ const ProjectCard = ({ project }) => {
    {/* Category Badge */} -
    - +
    {project.category}
    diff --git a/src/components/Skills.jsx b/src/components/Skills.jsx index 1a2b8ff..5156231 100644 --- a/src/components/Skills.jsx +++ b/src/components/Skills.jsx @@ -1,29 +1,8 @@ import SectionArrow from "./SectionArrow.jsx"; -import skillsData from "../data/skills.json"; +import {skillsData} from "./data/skills.js"; import { iconMap } from "../utils/iconMap.js"; function Skills() { - const renderSkillBox = (categoryName, skills) => { - return ( -
    -

    - {categoryName} -

    -
      - {skills.map((skill) => { - const IconComponent = iconMap[skill.icon]; - return ( -
    • - -

      {skill.name}

      -
    • - ); - })} -
    -
    - ); - }; - const renderDomainCard = (domain) => { const MainIcon = iconMap[domain.icon]; return ( @@ -57,7 +36,7 @@ function Skills() { ); }; - const { domains, ...regularSkills } = skillsData; + const { domains } = skillsData; return (
    diff --git a/src/components/data/skills.js b/src/components/data/skills.js new file mode 100644 index 0000000..c219102 --- /dev/null +++ b/src/components/data/skills.js @@ -0,0 +1,205 @@ +export const skillsData = { + languages: [ + { + name: "Python", + icon: "FaPython" + }, + { + name: "Java", + icon: "FaJava" + }, + { + name: "Bash", + icon: "FaTerminal" + }, + { + name: "JavaScript", + icon: "FaJs" + } + ], + environments: [ + { + name: "Windows", + icon: "FaWindows" + }, + { + name: "Linux", + icon: "FaLinux" + }, + { + name: "Ubuntu", + icon: "FaUbuntu" + } + ], + virtualization: [ + { + name: "VirtualBox", + icon: "SiVirtualbox" + }, + { + name: "Docker", + icon: "FaDocker" + }, + { + name: "Hyper-V", + icon: "FaTerminal" + } + ], + frameworks: [ + { + name: "Flask", + icon: "SiFlask" + }, + { + name: "Node.js", + icon: "FaNode" + }, + { + name: "WordPress", + icon: "FaWordpress" + }, + { + name: "React", + icon: "FaReact" + }, + { + name: "Google Cloud", + icon: "FaGoogle" + }, + { + name: "Play", + icon: "FaPlay" + } + ], + "CI/CD": [ + { + name: "Git", + icon: "FaGitAlt" + }, + { + name: "Github", + icon: "FaGithub" + }, + { + name: "Jenkins", + icon: "FaJenkins" + }, + { + name: "Bitbucket", + icon: "FaBitbucket" + }, + { + name: "JIRA", + icon: "FaJira" + }, + { + name: "Concourse", + icon: "SiConcourse" + } + ], + "Machine Learning": [ + { + name: "PyTorch", + icon: "SiPytorch" + }, + { + name: "Scikit-learn", + icon: "SiScikitlearn" + }, + { + name: "Pandas", + icon: "SiPandas" + }, + { + name: "NumPy", + icon: "SiNumpy" + }, + { + name: "Jupyter", + icon: "SiJupyter" + } + ], + domains: [ + { + name: "Web Development", + description: "Full-stack applications with modern frameworks and RESTful APIs", + icon: "FaCode", + relatedSkills: [ + { + icon: "FaReact", + displayName: "React" + }, + { + icon: "FaNode", + displayName: "Node.js" + }, + { + icon: "SiFlask", + displayName: "Flask" + }, + { + icon: "FaJs", + displayName: "JavaScript" + }, + { + icon: "FaPython", + displayName: "Python" + } + ] + }, + { + name: "Machine Learning", + description: "ML models, data analysis, and NLP solutions", + icon: "FaBrain", + relatedSkills: [ + { + icon: "SiPytorch", + displayName: "PyTorch" + }, + { + icon: "SiScikitlearn", + displayName: "Scikit-learn" + }, + { + icon: "SiPandas", + displayName: "Pandas" + }, + { + icon: "SiNumpy", + displayName: "NumPy" + }, + { + icon: "SiJupyter", + displayName: "Jupyter" + } + ] + }, + { + name: "DevOps & Cloud", + description: "CI/CD pipelines, containerization, and cloud infrastructure", + icon: "FaCloud", + relatedSkills: [ + { + icon: "FaDocker", + displayName: "Docker" + }, + { + icon: "FaGitAlt", + displayName: "Git" + }, + { + icon: "FaJenkins", + displayName: "Jenkins" + }, + { + icon: "FaGoogle", + displayName: "Google Cloud" + }, + { + icon: "SiConcourse", + displayName: "Concourse" + } + ] + } + ] +}; \ No newline at end of file