diff --git a/assets/data/projects.yaml b/assets/data/projects.yaml index 29bb5bb..cdbbc03 100644 --- a/assets/data/projects.yaml +++ b/assets/data/projects.yaml @@ -51,190 +51,205 @@ projects: - - title: "2024_A.RM.I" - description: "ARM과 AI 모델을 활용한 분산형 저전력 객체인식 군용 경계 감시 시스템" - team: "김영찬(총 5명)" - image: "https://eciems.mju.ac.kr/sites/eciems/atchmnfl/bbs/1430/thumbnail/thumb_temp_1732861778109100.jpg" - tags: ["2024"] - duration: "2024년 3월 ~ 2024년 12월" - links: - github: "https://github.com/KimTeddy/2024_A.RM.I_Public" - youtube: "https://youtu.be/RNpNJ6A_28k?si=IeHd7aC45Z5TKPu1" - other: "https://youtu.be/RNpNJ6A_28k?si=IeHd7aC45Z5TKPu1" - other_logo: "assets/images/site/main-logo.png" - - - title: "RAER" - description: "현장 탐사 및 구조 보조 로봇 Rescue Assistant Exploration Robot" - team: "우상민(총 4명)" - image: "https://eciems.mju.ac.kr/sites/eciems/atchmnfl/bbs/1430/thumbnail/thumb_temp_1732667027122100.jpg" - tags: ["2024"] - duration: "2024년 3월 ~ 2024년 12월" - links: - youtube: "https://youtu.be/pdYLRzkepHQ?si=75ohAaabfY9YaunE" - - - title: "강화학습 기반 반도체 공정 OHT 최적화 및 FAB할당" - description: "" - team: "이상수, 안재영(총 5명)" - image: "" - tags: ["2024"] - duration: "2024년 3월 ~ 2024년 12월" - links: - youtube: "" - - - title: "꿈속새김" - description: "꿈 해석부터 악몽 탈출까지, 꿈을 새겨주는 서비스" - team: "이은규(총 5명)" - image: "assets/images/sections/projects/2024/dream.jpg" - tags: ["2024"] - duration: "2024년 3월 ~ 2024년 12월" - links: - github: "" - youtube: "" + - year: "2024년도" + projects: + - title: "2024_A.RM.I" + description: "ARM과 AI 모델을 활용한 분산형 저전력 객체인식 군용 경계 감시 시스템" + team: "김영찬(총 5명)" + image: "https://eciems.mju.ac.kr/sites/eciems/atchmnfl/bbs/1430/thumbnail/thumb_temp_1732861778109100.jpg" + tags: ["2024"] + duration: "2024년 3월 ~ 2024년 12월" + links: + github: "https://github.com/KimTeddy/2024_A.RM.I_Public" + youtube: "https://youtu.be/RNpNJ6A_28k?si=IeHd7aC45Z5TKPu1" + other: "https://youtu.be/RNpNJ6A_28k?si=IeHd7aC45Z5TKPu1" + other_logo: "assets/images/site/main-logo.png" + + - title: "RAER" + description: "현장 탐사 및 구조 보조 로봇 Rescue Assistant Exploration Robot" + team: "우상민(총 4명)" + image: "https://eciems.mju.ac.kr/sites/eciems/atchmnfl/bbs/1430/thumbnail/thumb_temp_1732667027122100.jpg" + tags: ["2024"] + duration: "2024년 3월 ~ 2024년 12월" + links: + youtube: "https://youtu.be/pdYLRzkepHQ?si=75ohAaabfY9YaunE" + + - title: "강화학습 기반 반도체 공정 OHT 최적화 및 FAB할당" + description: "" + team: "이상수, 안재영(총 5명)" + image: "" + tags: ["2024"] + duration: "2024년 3월 ~ 2024년 12월" + links: + youtube: "" + + - title: "꿈속새김" + description: "꿈 해석부터 악몽 탈출까지, 꿈을 새겨주는 서비스" + team: "이은규(총 5명)" + image: "assets/images/sections/projects/2024/dream.jpg" + tags: ["2024"] + duration: "2024년 3월 ~ 2024년 12월" + links: + github: "" + youtube: "" ############################################################################################ - - title: "MJU ACI" - description: "대규모 충전 인프라 확장이 가능한 전기자동차 자동 충전 시스템." - team: "탁지훈(총 5명)" - image: "https://eciems.mju.ac.kr/sites/eciems/atchmnfl/bbs/1389/thumbnail/thumb_temp_1701320911635100.jpg" - tags: ["2023"] - duration: "2023년" - links: - youtube: "https://youtu.be/LbtAhwIs7Gw?si=Ekr9utt-6iYukdWk" - - - title: "COMPANION ROBOT" - description: "독거노인을 위한 반려로봇으로 안전과 건강을 지원." - team: "김성현, 석은혜(총 7명)" - image: "https://eciems.mju.ac.kr/sites/eciems/atchmnfl/bbs/1389/thumbnail/thumb_temp_1701220046572100.jpg" - tags: ["2023"] - duration: "2023년 3월 ~ 2023년 12월" - links: - youtube: "https://youtu.be/FfN0cjAcmhg?si=-8G0qztu7-34Uc_3" - - - title: "계단 극복 핸드 카트" - description: "계단 극복이 가능한 핸드 카트 설계." - team: "김규목(총 7명)" - tags: ["2023"] - duration: "2023년 3월 ~ 2023년 12월" - links: - youtube: "https://www.youtube.com/watch?v=JsHVhtD6RIo" - - - title: "LH(Land & Housing for Reptiles & Amphibians)" - description: "도마뱀 사육장 환경 자동 관리 및 커스텀 환경" - team: "탁지훈, 방승재, 서호준" - tags: ["2023"] - duration: "2023년 3월 ~ 2023년 8월" - links: - github: "https://github.com/SeungJae928/2023ESWContest_free_1012" - - - title: "족발2" - description: "후지 마비 동물을 위한 웨어러블 로봇" - team: "이상수, 김영찬, 안재영, 권인아, 오은지, 이준영" - tags: ["2023"] - duration: "2023년 7월 ~ 2023년 12월" - links: - youtube: "https://youtu.be/tqQg0wU-9ns?si=lssECIQScBdo7ebp" - - - title: "반도체 공정장비용 Remote Plasma Source를 위한 RF 전원회로 설계" - description: "반도체 공정장비용 Remote Plasma Source를 위한 RF 전원회로 설계" - team: "신희성(총 4명)" - tags: ["2023", "2024"] - duration: "2023년 9월 ~ 2024년 6월" - - - title: "Smart Clock" - description: "편리하고 효율적인 일상 생활을 위한 스마트 클락 제품 개발" - team: "석은혜, 김준재, 이승석" - image: "https://eciems.mju.ac.kr/sites/eciems/atchmnfl/bbs/1389/thumbnail/thumb_temp_1701387559786100.jpg" - tags: ["2023"] - duration: "2023년 9월 ~ 2023년 12월" - links: - github: "" - youtube: "https://youtu.be/s4tRLuAO4bw?si=xLsJ3MBQQGgOdRoq" + - year: "2023년도" + projects: + - title: "MJU ACI" + description: "대규모 충전 인프라 확장이 가능한 전기자동차 자동 충전 시스템." + team: "탁지훈(총 5명)" + image: "https://eciems.mju.ac.kr/sites/eciems/atchmnfl/bbs/1389/thumbnail/thumb_temp_1701320911635100.jpg" + tags: ["2023"] + duration: "2023년" + links: + youtube: "https://youtu.be/LbtAhwIs7Gw?si=Ekr9utt-6iYukdWk" + + - title: "COMPANION ROBOT" + description: "독거노인을 위한 반려로봇으로 안전과 건강을 지원." + team: "김성현, 석은혜(총 7명)" + image: "https://eciems.mju.ac.kr/sites/eciems/atchmnfl/bbs/1389/thumbnail/thumb_temp_1701220046572100.jpg" + tags: ["2023"] + duration: "2023년 3월 ~ 2023년 12월" + links: + youtube: "https://youtu.be/FfN0cjAcmhg?si=-8G0qztu7-34Uc_3" + + - title: "계단 극복 핸드 카트" + description: "계단 극복이 가능한 핸드 카트 설계." + team: "김규목(총 7명)" + tags: ["2023"] + duration: "2023년 3월 ~ 2023년 12월" + links: + youtube: "https://www.youtube.com/watch?v=JsHVhtD6RIo" + + - title: "LH(Land & Housing for Reptiles & Amphibians)" + description: "도마뱀 사육장 환경 자동 관리 및 커스텀 환경" + team: "탁지훈, 방승재, 서호준" + tags: ["2023"] + duration: "2023년 3월 ~ 2023년 8월" + links: + github: "https://github.com/SeungJae928/2023ESWContest_free_1012" + + - title: "족발2" + description: "후지 마비 동물을 위한 웨어러블 로봇" + team: "이상수, 김영찬, 안재영, 권인아, 오은지, 이준영" + tags: ["2023"] + duration: "2023년 7월 ~ 2023년 12월" + links: + youtube: "https://youtu.be/tqQg0wU-9ns?si=lssECIQScBdo7ebp" + + - title: "반도체 공정장비용 Remote Plasma Source를 위한 RF 전원회로 설계" + description: "반도체 공정장비용 Remote Plasma Source를 위한 RF 전원회로 설계" + team: "신희성(총 4명)" + tags: ["2023", "2024"] + duration: "2023년 9월 ~ 2024년 6월" + + - title: "Smart Clock" + description: "편리하고 효율적인 일상 생활을 위한 스마트 클락 제품 개발" + team: "석은혜, 김준재, 이승석" + image: "https://eciems.mju.ac.kr/sites/eciems/atchmnfl/bbs/1389/thumbnail/thumb_temp_1701387559786100.jpg" + tags: ["2023"] + duration: "2023년 9월 ~ 2023년 12월" + links: + github: "" + youtube: "https://youtu.be/s4tRLuAO4bw?si=xLsJ3MBQQGgOdRoq" ############################################################################################ - - title: "드론을 이용한 잔불진화 시스템" - description: "화재지시기를 통한 잔불 식별 및 자율 진화." - team: "유종상, 유성환, 김지호, 이한얼, 김예지" - image: "" - tags: ["2022"] - duration: "2022년 3월 ~ 2022년 12월" - links: - github: "https://github.com/js4ngu/22_HanEum_Forest-Fire-Extinguishing-Assistance-System" - - - title: "난청환자를 위한 방향알림 장치" - description: "난청환자를 위한 방향알림 장치." - team: "김태수(총 6명)" - image: "https://eciems.mju.ac.kr/sites/eciems/atchmnfl/bbs/1318/thumbnail/thumb_temp_1669683356637100.jpg" - tags: ["2022"] - duration: "2022년" - - - title: "동아리 웹사이트" - description: "동아리 홍보를 위한 정적 페이지, 커뮤니티, 클라우드 개발 | (이후 RATS회장단에서 관리)" - team: "김성현, 황규도" - tags: ["2022"] - duration: "2022년 ~" - links: - github: "https://github.com/RATS-make-robot/RATS-make-robot.github.io" - - - title: "Valve 인덱스 컨트롤러를 이용한 UR3 매니퓰레이터 제어 " - description: "밸브사의 index VR 을 이용한 UR3 로봇암 원격 조종" - team: "김성현" - tags: ["2022"] - duration: "2022년 7월 ~ 2022년 9월" - links: - other: "https://community.mju-rats.com/t/valve-ur3/278" - - - title: "족발" - description: "강아지 의족(ver 1)" - team: "이상수, 김영찬, 신희성, 정승주" - tags: ["2022"] - duration: "2022년 3월 ~ 2022년 12월" + + - year: "2022년도" + projects: + - title: "드론을 이용한 잔불진화 시스템" + description: "화재지시기를 통한 잔불 식별 및 자율 진화." + team: "유종상, 유성환, 김지호, 이한얼, 김예지" + image: "" + tags: ["2022"] + duration: "2022년 3월 ~ 2022년 12월" + links: + github: "https://github.com/js4ngu/22_HanEum_Forest-Fire-Extinguishing-Assistance-System" + + - title: "난청환자를 위한 방향알림 장치" + description: "난청환자를 위한 방향알림 장치." + team: "김태수(총 6명)" + image: "https://eciems.mju.ac.kr/sites/eciems/atchmnfl/bbs/1318/thumbnail/thumb_temp_1669683356637100.jpg" + tags: ["2022"] + duration: "2022년" + + - title: "동아리 웹사이트" + description: "동아리 홍보를 위한 정적 페이지, 커뮤니티, 클라우드 개발 | (이후 RATS회장단에서 관리)" + team: "김성현, 황규도" + tags: ["2022"] + duration: "2022년 ~" + links: + github: "https://github.com/RATS-make-robot/RATS-make-robot.github.io" + + - title: "Valve 인덱스 컨트롤러를 이용한 UR3 매니퓰레이터 제어 " + description: "밸브사의 index VR 을 이용한 UR3 로봇암 원격 조종" + team: "김성현" + tags: ["2022"] + duration: "2022년 7월 ~ 2022년 9월" + links: + other: "https://community.mju-rats.com/t/valve-ur3/278" + + - title: "족발" + description: "강아지 의족(ver 1)" + team: "이상수, 김영찬, 신희성, 정승주" + tags: ["2022"] + duration: "2022년 3월 ~ 2022년 12월" ############################################################################################ - - title: "씨름 로봇" - description: "상대 로봇 탐지 및 밀어내기 기능 구현." - team: "김지호, 이한얼, 전성배" - tags: ["2021"] - duration: "2021년 9월 ~ 2021년 10월" - links: - github: "https://github.com/Kestrel-omega/2021_Wrestling" - - - title: "명지대 셔틀버스 어플" - description: "명지대 셔틀버스를 시간을 알려주는 어플리케이션. 안드로이드/아이폰 스토어에서 '명지대 셔틀버스'로 검색 할 수 있습니다." - team: "황규도" - tags: ["2021"] - duration: "2021년 9월 ~ 2022년 2월" - links: - other: "https://play.google.com/store/apps/details?id=com.mba.busapp" + + - year: "2022년도" + projects: + - title: "씨름 로봇" + description: "상대 로봇 탐지 및 밀어내기 기능 구현." + team: "김지호, 이한얼, 전성배" + tags: ["2021"] + duration: "2021년 9월 ~ 2021년 10월" + links: + github: "https://github.com/Kestrel-omega/2021_Wrestling" + + - title: "명지대 셔틀버스 어플" + description: "명지대 셔틀버스를 시간을 알려주는 어플리케이션. 안드로이드/아이폰 스토어에서 '명지대 셔틀버스'로 검색 할 수 있습니다." + team: "황규도" + tags: ["2021"] + duration: "2021년 9월 ~ 2022년 2월" + links: + other: "https://play.google.com/store/apps/details?id=com.mba.busapp" ############################################################################################ - - title: "자이로스코프 드론" - description: "자이로스코프 형태의 드론 가드 설계." - team: "석은혜" - image: "https://user-images.githubusercontent.com/48342925/155873725-4337d101-3516-4256-a67a-2224b7e8d388.jpg" - tags: ["2020", "2021"] - duration: "2020년 ~ 2021년" - links: - github: "https://github.com/mokhwasomssi/drone_with_gyroscopic_guard" - youtube: "https://youtu.be/5MefZFfkZi4?si=7gLCpKSLM4FhJ0_J" + - year: "2021년도" + projects: + - title: "자이로스코프 드론" + description: "자이로스코프 형태의 드론 가드 설계." + team: "석은혜" + image: "https://user-images.githubusercontent.com/48342925/155873725-4337d101-3516-4256-a67a-2224b7e8d388.jpg" + tags: ["2020", "2021"] + duration: "2020년 ~ 2021년" + links: + github: "https://github.com/mokhwasomssi/drone_with_gyroscopic_guard" + youtube: "https://youtu.be/5MefZFfkZi4?si=7gLCpKSLM4FhJ0_J" ############################################################################################ - - title: "2자유도 공 균형 제어 시스템" - description: "터치스크린 센서를 이용한 PID 균형 제어 로봇." - team: "김성현" - image: "https://user-images.githubusercontent.com/24962064/123507466-8b996a80-d6a4-11eb-8924-91e980d115ab.jpg" - tags: ["2019"] - duration: "2019년 3월 ~ 2019년 7월" - links: - github: "https://github.com/Topasm/2DOF_Ball_Plate_System" - - - title: "6족 보행 로봇" - description: "6족 보행 로봇" - team: "김태수, 이인영, 유성환, 유종상" - tags: ["2018", "2019", "2020", "2021"] - duration: "2018년 1월 ~ 2021년 11월" - links: - youtube: "https://www.youtube.com/watch?v=2bNe_N_TTak" - - - title: "목화솜씨" - description: "2019 제 22회 전국 라인트레이서 경연대회 Expert-DC 부문" - team: "유성환, 석은혜(총 3명)" - image: "https://eciems.mju.ac.kr/sites/eciems/atchmnfl/bbs/1099/104868943_1_1620870770729.png" - tags: ["2019"] - duration: "2019년" + + - year: "2019년도" + projects: + - title: "2자유도 공 균형 제어 시스템" + description: "터치스크린 센서를 이용한 PID 균형 제어 로봇." + team: "김성현" + image: "https://user-images.githubusercontent.com/24962064/123507466-8b996a80-d6a4-11eb-8924-91e980d115ab.jpg" + tags: ["2019"] + duration: "2019년 3월 ~ 2019년 7월" + links: + github: "https://github.com/Topasm/2DOF_Ball_Plate_System" + + - title: "6족 보행 로봇" + description: "6족 보행 로봇" + team: "김태수, 이인영, 유성환, 유종상" + tags: ["2018", "2019", "2020", "2021"] + duration: "2018년 1월 ~ 2021년 11월" + links: + youtube: "https://www.youtube.com/watch?v=2bNe_N_TTak" + + - title: "목화솜씨" + description: "2019 제 22회 전국 라인트레이서 경연대회 Expert-DC 부문" + team: "유성환, 석은혜(총 3명)" + image: "https://eciems.mju.ac.kr/sites/eciems/atchmnfl/bbs/1099/104868943_1_1620870770729.png" + tags: ["2019"] + duration: "2019년" diff --git a/assets/js/load_projects.js b/assets/js/load_projects.js index b6ad705..0cb8004 100644 --- a/assets/js/load_projects.js +++ b/assets/js/load_projects.js @@ -1,113 +1,142 @@ document.addEventListener('DOMContentLoaded', () => { - fetch('assets/data/projects.yaml') - .then(response => response.text()) - .then(yamlText => { - const projectsData = jsyaml.load(yamlText); // YAML 파싱 - const projectContainer = document.querySelector('.project-container'); - - if (projectsData.projects) { - projectsData.projects.forEach(project => { - const projectCard = document.createElement('div'); - projectCard.className = 'project-card'; - - // Create HTML elements for project card - const title = document.createElement('h3'); - title.textContent = project.title; - - // 이미지 추가 (제목 바로 아래) - if (project.image) { - const projectImage = document.createElement('img'); - projectImage.src = project.image; - projectImage.alt = `${project.title} 이미지`; - projectImage.className = 'project-image'; // CSS 스타일링을 위한 클래스 - projectCard.appendChild(title); - projectCard.appendChild(projectImage); - } else { - projectCard.appendChild(title); - } - - const description = document.createElement('p'); - description.textContent = project.description; - - const team = document.createElement('p'); - team.innerHTML = `[팀원] ${project.team}`; - - const duration = document.createElement('p'); - duration.innerHTML = `[기간] ${project.duration}`; - - const tags = document.createElement('p'); - tags.innerHTML = `[태그] ${project.tags.join(', ')}`; - - const linksContainer = document.createElement('div'); - linksContainer.className = 'links-container'; - - if (project.links) { - // Other Link - if (project.links.other) { - const otherLink = document.createElement('a'); - otherLink.href = project.links.other; - otherLink.target = '_blank'; - - // `other_logo`가 존재하면 이미지 추가, 없으면 버튼 표시 - if (project.links.other_logo) { - const logo = document.createElement('img'); - logo.src = project.links.other_logo; - logo.alt = "Other Link Logo"; - logo.className = 'link-icon'; - otherLink.appendChild(logo); + const fetchProjects = (attempt = 1) => { + fetch('assets/data/projects.yaml') + .then(response => { + if (!response.ok) { + throw new Error(`HTTP error! Status: ${response.status}`); + } + return response.text(); + }) + .then(yamlText => { + const projectsData = jsyaml.load(yamlText); // YAML 파싱 + const projectScrollContainer = document.querySelector('.project-scroll-container'); + const projectContainer = document.createElement('div'); + projectContainer.className = 'project-container'; + + if (projectsData.projects) { + projectsData.projects.forEach(projectGroup => { + const projectGroupContainer = document.createElement('div'); + projectGroupContainer.className = 'project-group'; + + projectGroup.projects.forEach(project => { + const projectCard = document.createElement('div'); + projectCard.className = 'project-card'; + + // Create HTML elements for project card + const title = document.createElement('h3'); + title.textContent = project.title; + + // 이미지 추가 (제목 바로 아래) + if (project.image) { + const projectImage = document.createElement('img'); + projectImage.src = project.image; + projectImage.alt = `${project.title} 이미지`; + projectImage.className = 'project-image'; // CSS 스타일링을 위한 클래스 + projectCard.appendChild(title); + projectCard.appendChild(projectImage); } else { - otherLink.textContent = "기타 링크"; - otherLink.style.display = "inline-block"; - otherLink.style.padding = "10px 15px"; - otherLink.style.backgroundColor = "#007bff"; - otherLink.style.color = "#fff"; - otherLink.style.borderRadius = "5px"; - otherLink.style.textAlign = "center"; - otherLink.style.fontWeight = "bold"; - otherLink.style.textDecoration = "none"; // 밑줄 제거 + projectCard.appendChild(title); } - - otherLink.addEventListener('mouseover', () => { - otherLink.style.backgroundColor = "#0056b3"; // 버튼 hover 효과 - }); - otherLink.addEventListener('mouseout', () => { - otherLink.style.backgroundColor = "#007bff"; // 기본 색상 복원 - }); - - linksContainer.appendChild(otherLink); - } - - // YouTube Link - if (project.links.youtube) { - const youtubeLink = document.createElement('a'); - youtubeLink.href = project.links.youtube; - youtubeLink.className = 'link-icon'; - youtubeLink.target = '_blank'; - youtubeLink.innerHTML = ``; - linksContainer.appendChild(youtubeLink); - } - - // GitHub Link - if (project.links.github) { - const githubLink = document.createElement('a'); - githubLink.href = project.links.github; - githubLink.className = 'link-icon'; - githubLink.target = '_blank'; - githubLink.innerHTML = ``; - linksContainer.appendChild(githubLink); - } - } - - // Append elements to project card - projectCard.appendChild(description); - projectCard.appendChild(team); - projectCard.appendChild(duration); - projectCard.appendChild(tags); - projectCard.appendChild(linksContainer); - - projectContainer.appendChild(projectCard); - }); - } - }) - .catch(error => console.error('Error loading YAML:', error)); + + const description = document.createElement('p'); + description.textContent = project.description; + + const team = document.createElement('p'); + team.innerHTML = `[팀원] ${project.team}`; + + const duration = document.createElement('p'); + duration.innerHTML = `[기간] ${project.duration}`; + + const tags = document.createElement('p'); + tags.innerHTML = `[태그] ${project.tags.join(', ')}`; + + const linksContainer = document.createElement('div'); + linksContainer.className = 'links-container'; + + if (project.links) { + // Other Link + if (project.links.other) { + const otherLink = document.createElement('a'); + otherLink.href = project.links.other; + otherLink.target = '_blank'; + + // `other_logo`가 존재하면 이미지 추가, 없으면 버튼 표시 + if (project.links.other_logo) { + const logo = document.createElement('img'); + logo.src = project.links.other_logo; + logo.alt = "Other Link Logo"; + logo.className = 'link-icon'; + otherLink.appendChild(logo); + } else { + otherLink.textContent = "기타 링크"; + otherLink.style.display = "inline-block"; + otherLink.style.padding = "10px 15px"; + otherLink.style.backgroundColor = "#007bff"; + otherLink.style.color = "#fff"; + otherLink.style.borderRadius = "5px"; + otherLink.style.textAlign = "center"; + otherLink.style.fontWeight = "bold"; + otherLink.style.textDecoration = "none"; // 밑줄 제거 + } + + otherLink.addEventListener('mouseover', () => { + otherLink.style.backgroundColor = "#0056b3"; // 버튼 hover 효과 + }); + otherLink.addEventListener('mouseout', () => { + otherLink.style.backgroundColor = "#007bff"; // 기본 색상 복원 + }); + + linksContainer.appendChild(otherLink); + } + + // YouTube Link + if (project.links.youtube) { + const youtubeLink = document.createElement('a'); + youtubeLink.href = project.links.youtube; + youtubeLink.className = 'link-icon'; + youtubeLink.target = '_blank'; + youtubeLink.innerHTML = ``; + linksContainer.appendChild(youtubeLink); + } + + // GitHub Link + if (project.links.github) { + const githubLink = document.createElement('a'); + githubLink.href = project.links.github; + githubLink.className = 'link-icon'; + githubLink.target = '_blank'; + githubLink.innerHTML = ``; + linksContainer.appendChild(githubLink); + } + } + + // Append elements to project card + projectCard.appendChild(description); + projectCard.appendChild(team); + projectCard.appendChild(duration); + projectCard.appendChild(tags); + projectCard.appendChild(linksContainer); + + projectGroupContainer.appendChild(projectCard); + }); + + projectContainer.appendChild(projectGroupContainer); + }); + + projectScrollContainer.appendChild(projectContainer); + } + }) + .catch(error => { + console.error(`Error loading YAML (Attempt ${attempt}):`, error); + if (attempt < 3) { + console.log('Retrying fetch...'); + setTimeout(() => fetchProjects(attempt + 1), 2000); // 재시도 + } else { + const projectScrollContainer = document.querySelector('.project-scroll-container'); + projectScrollContainer.innerHTML = '
프로젝트 데이터를 불러오지 못했습니다. 나중에 다시 시도해주세요.
'; + } + }); + }; + + fetchProjects(); });