fix(portfolio): 기술 스택 로고를 정적 4줄 레이아웃으로 변경

LogoLoop 무한 캐러셀이 항목 수가 적은 카테고리에서 반복돼 시각적으로 산만한
문제. 카테고리별로 단순 flex-wrap 줄로 정적 표시. SkillLogoNode와 fallback
로직은 유지. LogoLoop 컴포넌트 자체는 다른 페이지에서 재사용 여지를 위해 보존.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-28 02:49:00 +09:00
parent c68cee502a
commit a9d9540f61
2 changed files with 13 additions and 23 deletions

View File

@@ -384,8 +384,11 @@
background: var(--surface-card); background: var(--surface-card);
border: 1px solid var(--line); border: 1px solid var(--line);
border-radius: var(--radius-lg); border-radius: var(--radius-lg);
padding: 14px 0; padding: 16px 20px;
overflow: hidden; display: flex;
flex-wrap: wrap;
align-items: center;
gap: 24px 28px;
} }
.pf-skill-logo { .pf-skill-logo {

View File

@@ -1,5 +1,4 @@
import { useState } from 'react'; import { useState } from 'react';
import LogoLoop from '../../components/LogoLoop';
const CAREER_CATEGORIES = { company: '회사', education: '교육', etc: '기타' }; const CAREER_CATEGORIES = { company: '회사', education: '교육', etc: '기타' };
const SKILL_CATEGORIES = { language: '언어', framework: '프레임워크', infra: '인프라', tool: '도구' }; const SKILL_CATEGORIES = { language: '언어', framework: '프레임워크', infra: '인프라', tool: '도구' };
@@ -46,14 +45,6 @@ function SkillLogoNode({ name, slug }) {
); );
} }
function buildSkillLogos(items) {
return items.map((s) => ({
node: <SkillLogoNode name={s.name} slug={SKILL_LOGO_SLUGS[s.name]} />,
ariaLabel: s.name,
title: s.name,
}));
}
export default function ProfileTab({ data, editing, api, onRefresh }) { export default function ProfileTab({ data, editing, api, onRefresh }) {
const { profile, careers, skills } = data; const { profile, careers, skills } = data;
const [editingProfile, setEditingProfile] = useState(null); const [editingProfile, setEditingProfile] = useState(null);
@@ -241,18 +232,14 @@ export default function ProfileTab({ data, editing, api, onRefresh }) {
))} ))}
</div> </div>
) : ( ) : (
<div className="pf-skill-loop"> <div className="pf-skill-loop" aria-label={`${SKILL_CATEGORIES[cat]} 기술 스택`}>
<LogoLoop {items.map((s) => (
logos={buildSkillLogos(items)} <SkillLogoNode
speed={40} key={s.id}
logoHeight={36} name={s.name}
gap={48} slug={SKILL_LOGO_SLUGS[s.name]}
pauseOnHover
fadeOut
fadeOutColor="var(--bg-primary, #0b0b0b)"
scaleOnHover
ariaLabel={`${SKILL_CATEGORIES[cat]} 기술 스택`}
/> />
))}
</div> </div>
)} )}
</div> </div>