개인 포트폴리오 대시보드 - 프로젝트 쇼케이스 & GitHub 연동
portfolio-dashboard
문제 설명
개인 포트폴리오 대시보드
자신의 프로젝트를 카드 형태로 등록하고, GitHub API와 연동하여 리포지토리 정보를 자동으로 가져오는 포트폴리오 대시보드입니다. 필터링, 정렬, 다크모드, 반응형 디자인을 갖춘 모던 SPA를 구축합니다.
필수 기능
- 프로젝트 CRUD: 프로젝트 이름, 설명, 기술 스택 태그, 라이브 데모 URL, GitHub 링크 등을 관리
- GitHub API 연동: GitHub 리포지토리 URL 입력 시 스타 수, 포크 수, 언어 비율을 자동으로 가져오기
- 기술 스택 태그 시스템: 자동완성 지원 태그 입력 (React, TypeScript, Node.js 등)
- 필터 & 정렬: 기술 스택별 필터, 최신순/스타순/이름순 정렬
- 다크모드: 시스템 설정 연동 + 수동 토글
- 반응형 레이아웃: 그리드/리스트 뷰 전환
- 통계 대시보드: 총 프로젝트 수, 가장 많이 사용한 기술 스택, GitHub 스타 합계 등
보너스 기능
- 프로젝트 카드에 스크린샷 업로드 및 이미지 최적화
- 드래그 앤 드롭으로 프로젝트 순서 변경
- PDF 이력서 자동 생성 기능
- Open Graph 메타 태그로 링크 공유 시 미리보기 지원
- 방문자 통계 (조회수 트래킹)
제약 조건
- • React 19 + Vite 최신 버전 사용
- • TypeScript 필수 적용
- • Tailwind CSS 4.x로 스타일링
- • React Router v7 사용
- • Zustand 또는 Context API로 상태 관리
- • GitHub REST API v3 연동 (인증 토큰 선택)
- • LocalStorage를 활용한 데이터 영속화 (백엔드 없이)
- • ESLint + Prettier 설정 필수
프롬프트 레시피
아래 프롬프트를 순서대로 AI에게 보내면 됩니다. 복사 버튼을 눌러 바로 사용하세요.
React + TypeScript + Vite로 '포트폴리오 대시보드' 프로젝트를 생성해주세요. 요구사항: 1. Vite + React + TypeScript 프로젝트 초기화 2. Tailwind CSS 4.x 설치 및 설정 3. React Router v7 설치 및 기본 라우트 구성: - / : 대시보드 (프로젝트 목록) - /projects/new : 프로젝트 추가 - /projects/:id : 프로젝트 상세 - /projects/:id/edit : 프로젝트 수정 - /stats : 통계 페이지 4. 기본 레이아웃 컴포넌트 생성: - Header: 로고, 네비게이션 링크, 다크모드 토글 버튼 - Sidebar: 기술 스택 필터 목록 - Footer: 간단한 저작권 표시 5. 다크모드 구현: localStorage + system preference 감지 6. ESLint + Prettier 설정 7. 프로젝트 타입 정의 (types/index.ts): - Project: id, title, description, techStack(string[]), githubUrl, demoUrl, imageUrl, stars, forks, languages, createdAt, updatedAt - GitHubRepo: name, description, stargazers_count, forks_count, language, html_url 모든 파일을 생성하고 초기 설정을 완료해주세요.
기대 결과: Vite + React + TypeScript 프로젝트가 생성되고, Tailwind CSS와 React Router가 설정됩니다. 다크모드 토글이 작동하고, 기본 레이아웃이 구성됩니다.
프로젝트 CRUD 기능과 LocalStorage 기반 데이터 영속화를 구현해주세요.
요구사항:
1. Zustand 스토어 생성 (stores/projectStore.ts):
- projects 배열 상태 관리
- addProject, updateProject, deleteProject 액션
- localStorage에 자동 저장/불러오기 (zustand/middleware persist)
2. 프로젝트 목록 페이지 (pages/Dashboard.tsx):
- 카드 그리드 레이아웃 (반응형: 모바일 1열, 태블릿 2열, 데스크톱 3열)
- 각 카드: 프로젝트 이미지, 제목, 설명(2줄 말줄임), 기술 스택 태그(뱃지), GitHub 스타/포크 수
- 그리드/리스트 뷰 전환 버튼
- 빈 상태 메시지 ('아직 등록된 프로젝트가 없습니다. 첫 프로젝트를 추가해보세요!')
3. 프로젝트 추가/수정 폼 (pages/ProjectForm.tsx):
- 프로젝트 이름 (required, maxLength: 100)
- 설명 (textarea, optional)
- GitHub 리포지토리 URL (URL 유효성 검사)
- 라이브 데모 URL (optional)
- 이미지 URL (optional)
- 기술 스택 태그 입력: 콤마로 구분, 엔터 키로 추가, 태그 클릭 시 삭제
- 폼 유효성 검사 에러 메시지 표시
4. 프로젝트 상세 페이지 (pages/ProjectDetail.tsx):
- 프로젝트 전체 정보 표시
- 수정/삭제 버튼
- 삭제 시 확인 모달
5. 공통 컴포넌트:
- TagInput: 태그 입력 컴포넌트 (자동완성 포함)
- ConfirmModal: 삭제 확인 모달
- Toast: 성공/에러 알림
CRUD가 완벽하게 작동하고 localStorage에 데이터가 영속되도록 구현해주세요.
기대 결과: 프로젝트 추가, 조회, 수정, 삭제가 완벽하게 작동합니다. 데이터는 localStorage에 저장되어 새로고침해도 유지됩니다. 태그 입력과 폼 유효성 검사가 작동합니다.
GitHub API 연동 기능을 구현해주세요. 요구사항: 1. GitHub API 서비스 (services/githubApi.ts): - fetchRepoInfo(owner, repo): 리포지토리 기본 정보 가져오기 - fetchRepoLanguages(owner, repo): 언어 비율 가져오기 - GitHub URL에서 owner/repo 파싱 함수 - API 에러 핸들링 (404, rate limit 등) - fetch API 사용 (axios 사용 금지) 2. 프로젝트 추가/수정 폼에 GitHub 연동: - GitHub URL 입력 후 '정보 가져오기' 버튼 클릭 - 로딩 스피너 표시 (Tailwind animate-spin 사용) - 성공 시: 스타 수, 포크 수, 언어 정보 자동 채우기 - 실패 시: 에러 메시지 표시 (리포지토리를 찾을 수 없습니다 등) 3. 프로젝트 카드에 GitHub 정보 표시: - 스타 아이콘 + 숫자 - 포크 아이콘 + 숫자 - 주요 언어 뱃지 4. 프로젝트 상세 페이지에 언어 비율 바: - GitHub 스타일 가로 막대 (각 언어별 색상) - 각 언어의 퍼센트 표시 5. API Rate Limit 대응: - 인증 없이 시간당 60회 제한 안내 - 선택적으로 Personal Access Token 입력 기능 (설정 페이지) GitHub API와 자연스럽게 연동되도록 구현해주세요.
기대 결과: GitHub URL 입력 시 리포지토리 정보가 자동으로 가져와집니다. 스타, 포크, 언어 정보가 프로젝트 카드와 상세 페이지에 표시됩니다. API 에러가 적절히 처리됩니다.
필터링, 정렬, 검색 기능과 통계 대시보드를 구현해주세요. 요구사항: 1. 사이드바 필터 (components/Sidebar.tsx): - 모든 프로젝트에서 사용된 기술 스택 태그 자동 수집 - 태그 클릭 시 해당 기술 스택이 포함된 프로젝트만 필터링 - 다중 필터 지원 (AND 조건) - 활성 필터 뱃지 표시 및 전체 해제 버튼 2. 정렬 기능 (Dashboard 상단): - 최신순, 이름순(가나다), GitHub 스타순 - 오름차순/내림차순 토글 3. 검색 기능: - 프로젝트 이름, 설명, 기술 스택에서 키워드 검색 - 디바운스 적용 (300ms) - 검색 결과 하이라이트 4. 통계 페이지 (pages/Stats.tsx): - 총 프로젝트 수 카드 - GitHub 스타 합계 카드 - 가장 많이 사용한 기술 스택 Top 5 (가로 막대 차트, CSS로 구현) - 기술 스택별 프로젝트 수 도넛 차트 (Chart.js 또는 Recharts 사용) - 월별 프로젝트 등록 추이 라인 차트 5. URL 쿼리 파라미터 연동: - 필터, 정렬, 검색어를 URL에 반영 - 뒤로가기/앞으로가기 시 상태 유지 - 링크 공유 시 동일한 필터 상태 재현 사용자가 프로젝트를 효율적으로 탐색할 수 있도록 구현해주세요.
기대 결과: 기술 스택 필터, 정렬, 검색이 모두 작동합니다. 통계 페이지에 차트와 요약 정보가 표시됩니다. URL 쿼리 파라미터로 필터 상태가 공유 가능합니다.
반응형 디자인 완성, 애니메이션, 접근성 개선 및 최종 마무리를 해주세요. 요구사항: 1. 반응형 디자인 최적화: - 모바일: 사이드바를 하단 시트 또는 드로어로 변환 - 태블릿: 접이식 사이드바 - 데스크톱: 고정 사이드바 - 카드 그리드 반응형 조정 2. 애니메이션 추가: - 카드 등장 시 fade-in + slide-up 애니메이션 - 카드 hover 시 그림자 확대 효과 - 페이지 전환 시 부드러운 전환 효과 - 태그 추가/삭제 시 애니메이션 - 뷰 전환(그리드/리스트) 시 부드러운 전환 3. 접근성 (a11y): - 키보드 네비게이션 지원 - aria-label 추가 - 포커스 스타일링 - 스크린 리더 지원 4. 데이터 시딩: - 샘플 프로젝트 5개 생성하는 시드 데이터 파일 (utils/seedData.ts) - 앱 최초 실행 시 자동 시딩 (localStorage 비어있을 때) 5. README.md 작성: - 프로젝트 설명 및 스크린샷 안내 - 설치 방법 (npm install, npm run dev) - 주요 기능 목록 - 기술 스택 - 프로젝트 구조 트리 6. 성능 최적화: - React.memo, useMemo, useCallback 적절히 사용 - 이미지 lazy loading - 코드 스플리팅 (React.lazy + Suspense) 프로덕션 배포 가능한 수준으로 완성해주세요.
기대 결과: 모든 페이지가 모바일에서 완벽하게 작동하고, 애니메이션이 자연스럽습니다. 접근성이 개선되고, 샘플 데이터로 바로 테스트 가능합니다. README 문서가 작성되어 다른 개발자가 쉽게 설치하고 실행할 수 있습니다.