AI와 포트폴리오 사이트 만든 이야기
#소개
시도하고자 했던 것과 그 이유
미술 작가인 아들이 해외 국제 공모전에 작품을 제출하려고 하는데, 심사위원들에게 보낼 포트폴리오 웹사이트가 필요했고 만들이후 작품을 추가할 때마다 또 비용이 발생하는 데 Claude Code를 써서 직접 만들어보기로 했습니다.
목표
해외 심사위원을 위한 한국어/영어 전환 기능
고급 갤러리처럼 작품이 주인공인 다크 럭셔리 디자인으로 제작
제가 직접 작품을 추가할 수 있는 간단한 운영 방법
실제 도메인(minjunjeong.com)까지 연결된 사이트 만듦
진행 방법
어떤 도구를 사용했고, 어떻게 활용하셨나요?
사용 도구
도구
역할
비용
Claude Code (VS Code 확장)
전체 개발 + 콘텐츠 작성
구독 포함
Next.js 14
웹사이트 프레임워크
무료
Vercel
호스팅 + 자동 배포
무료
GitHub
코드 저장소
무료
Namecheap
도메인
~$12/년
1단계 — PRD 문서를 Claude에게 주고 시작
PRD에는 이런 내용이 담았음
- 도메인: minjunjeong.com
- 기술: Next.js 14, Tailwind CSS, Notion API
- 색상: bg #0a0a0a, text #f5f0e8, accent #b8963e
- 폰트: Cormorant Garamond (영문), Noto Serif KR (한국어)
- 페이지: /, /works, /works/[slug], /about, /press, /contact
- 기능: 한/영 토글, NEW 뱃지 자동화, Notion CMS 연동
Claude는 PRD를 읽고 자동으로 파악해서 완성해줬습니다.
2단계 — 언어 버그 수정 및 구조 개선
처음 코드에는 페이지를 이동할 때마다 한국어/영어 선택이 초기화되는 버그가 있었고 캡처로 보여주니 Claude가 직접 원인을 찾아 수정했습니다.
// 수정 전: 각 페이지마다 LangProvider가 있어서 이동 시 초기화됨
export default function HomeClient({ works }) {
return (
<LangProvider> ← 문제의 원인
<HomeContent works={works} />
</LangProvider>
);
}
// 수정 후: root layout에서 한 번만 감싸고 localStorage에 저장
export function LangProvider({ children }) {
const [lang, setLangState] = useState("kr");
useEffect(() => {
const saved = localStorage.getItem("lang");
if (saved) setLangState(saved); // 새로고침해도 유지
}, []);
const setLang = (l) => {
setLangState(l);
localStorage.setItem("lang", l); // 저장
};
}
3단계 — Vercel 배포 + 도메인 연결
Claude가 GitHub 저장소 생성부터 Vercel 배포, Namecheap DNS 설정까지 단계별로 안내해줬습니다. 제가 한 건 스크린샷을 보내주며 확인
Namecheap Advanced DNS에 추가한 레코드:
Type
Host
Value
A Record
@
76.76.21.21
CNAME Record
www
cname.vercel-dns.com