@@ -541,13 +541,80 @@ series: 나의 맞춤 블로그 만들기
541541
542542` publish` 의 값은 문자열이어야 하며 할당된 값이 블로그 내의 주소 구조로 활용되며 카테고리를 만드는 역할을 한다. 즉 `블로그주소/posts/publish 값/파일이름` 의 주소를 갖게 된다.
543543
544+ # ## 프로젝트 포트폴리오 구조
545+
546+ 포트폴리오 페이지의 프로젝트들은 각 프로젝트 폴더에 개별 `project.json` 파일로 관리됩니다.
547+
548+ # ### 프로젝트 파일 구조
549+
550+ ```
551+ public/projects/
552+ ├── 프로젝트명/
553+ │ ├── project.json # 프로젝트 정보
554+ │ └── (이미지/영상 파일들)
555+ ```
556+
557+ #### project.json 스키마
558+
559+ ```typescript
560+ interface Project {
561+ projectType: "project" | "study"; // 프로젝트 타입
562+ id: string; // 고유 ID
563+ title: string; // 프로젝트 제목
564+ description: string; // 간단한 설명
565+ thumbnail: string; // 썸네일 경로 (상대경로 가능: "./이미지.png")
566+ thumbnailOptions?: {
567+ // 썸네일 옵션 (비디오인 경우)
568+ playbackRate?: number; // 재생 속도
569+ };
570+ tags: string[]; // 태그 목록
571+ technologies: string[]; // 사용 기술 목록
572+ githubUrl?: string; // GitHub 저장소 URL
573+ serviceUrl?: string; // 서비스 URL
574+ featured: boolean; // 주요 프로젝트 여부
575+ createdAt: string; // 생성일 (YYYY-MM-DD)
576+ overview: string; // 프로젝트 개요
577+ features: string[]; // 주요 기능 목록
578+ lessons: string; // 배운 점
579+ challenges: string[]; // 도전 과제 목록
580+ demoType: "images" | "video"; // 데모 타입
581+ demoImages?: {
582+ // 데모 이미지/영상 목록
583+ url: string; // 파일 경로 (상대경로 가능: "./파일.mp4")
584+ description: string; // 설명
585+ showControls?: boolean; // 비디오 컨트롤 표시 여부
586+ playbackRate?: number; // 재생 속도
587+ }[];
588+ demoVideo?: string; // 데모 비디오 URL (demoType이 "video"인 경우)
589+ inDevelopment?: boolean; // 개발 중 여부
590+ futurePlans?: string[]; // 향후 계획
591+ publishPath: string; // 블로그 포스트 경로
592+ }
593+ ```
594+
595+ #### 프로젝트 추가 방법
596+
597+ 1 . ` /public/projects/새프로젝트명/ ` 폴더 생성
598+ 2 . 해당 폴더에 ` project.json ` 파일 생성
599+ 3 . 프로젝트 에셋(이미지, 영상) 추가
600+ 4 . ` npm run build-projects ` 실행 (또는 ` bun run build ` 시 자동 실행)
601+
602+ #### 경로 작성 방법
603+
604+ - ** 상대 경로 사용** : ` "./파일명.png" ` - 빌드 시 자동으로 절대 경로로 변환됨
605+ - ** 절대 경로 사용** : ` "/projects/프로젝트명/파일명.png" `
606+
607+ #### 정렬 순서
608+
609+ 프로젝트는 ` createdAt ` 날짜 기준으로 최신순으로 정렬됩니다.
610+
544611## 추가해야할 기능혹은 페이지
545612
546613- [ ] contents layer 로 대체
547614- [ ] 소개 패이지
548615- [x] 포트폴리오 페이지
549616- [ ] 댓글 기능
550- - [ ] 옵시디언 스타일의 콜아웃 적용
617+ - [x ] 옵시디언 스타일의 콜아웃 적용
551618- [ ] 비디오 임베드
552619- [ ] D3.js를 홀용한 그래프 뷰
553620- [ ] 연결된 관련 노트 리스트 추가
0 commit comments