# YoonsMall 공개 링크 반영 및 지식 자산 업로드 설계

작성일: 2026-05-18

## 1. 구조 진단

현재 사이트는 `index.html`, `assets/styles.css`, `assets/app.js`로 구성된 Cloudflare Pages용 정적 MVP입니다. 상품 데이터는 `app.js`의 `products` 배열 한 곳에서 관리되므로, 공개 링크와 다운로드/릴리스 링크를 추가하기에 적합합니다.

이번 업데이트의 핵심은 세 가지입니다.

- 로컬 경로만 보여주던 상품 카드에 실제 공개 URL을 연결한다.
- AsanNote처럼 다운로드형 결과물은 Cloudflare Pages에 직접 넣지 않고 GitHub Release 또는 Cloudflare R2 다운로드로 분리한다.
- 논문, 전자책, 기사, 블로그 글을 업로드 후보 자산으로 등록할 수 있는 별도 데스크를 만든다.

## 2. 공개 URL 반영 현황

| 상품 | 적용 링크 | 근거 | 상태 |
| --- | --- | --- | --- |
| TrendHub | `https://trendhubs.work/` | 로컬 설정 파일과 공개 페이지 확인 | 공개 사이트 연결 완료 |
| LipPick | `https://lippick.us/` | 로컬 metadata 기본 URL과 공개 페이지 확인 | 공개 사이트 연결 완료 |
| TicketBuddy | `https://ticketbuddy.win/` | `index.html` canonical/OG URL과 공개 검색 확인 | 공개 사이트 연결 완료 |
| H-NAVI | `https://h-navi.vercel.app/` | H-NAVI 배포 문서의 Vercel URL과 HEAD 200 OK 확인 | 공개 사이트 연결 완료 |
| VocaKing DY | `https://vocaking-dy.pages.dev/` | `wrangler.toml`의 Cloudflare Pages 프로젝트명과 HEAD 200 OK 확인 | 공개 사이트 연결 완료 |
| AI-recipe | 공개 URL 없음 | 로컬 Vite 프로젝트와 교육 자산 확인 | 전자책·강의자료 판매 후보 |
| AsanNote v5 | 릴리스/R2 다운로드 준비 | `AsanNote_v5_WIN_FINAL_ACCEPTANCE_OK_20260509_210634.zip` 존재 확인 | 대용량 파일 분리 |

## 3. 논문·전자책 업로드 설계

정적 사이트에서는 파일을 서버로 실제 업로드할 수 없으므로, 이번 단계는 브라우저 안에서 판매 후보 자산을 등록하는 데 집중했습니다.

현재 구현:

- 파일 입력: PDF, DOC/DOCX, EPUB, ZIP, PPT/PPTX, MD, TXT
- 메타데이터: 자산 유형, 제목, 저자·브랜드, 가격, 라이선스, 소개 문구
- 저장: 브라우저 `localStorage`에 메타데이터 저장
- 미리보기: 현재 브라우저 세션에서만 `URL.createObjectURL()`로 임시 미리보기 제공
- 삭제/초기화: 등록 카드별 삭제와 전체 초기화 제공

정식 판매 버전에서 추가할 항목:

- Cloudflare R2, Supabase Storage, S3 중 하나로 파일 영구 저장
- 결제 성공 후에만 다운로드 가능한 서명 URL 발급
- 구매자 이메일 발송과 다운로드 만료 시간 설정
- 콘텐츠별 라이선스 동의 체크박스
- 논문/전자책 상세 페이지와 SEO 메타 자동 생성

## 4. 수익화 운영 제안

1. 프로젝트형 상품은 공개 데모 링크를 먼저 보여주고, 문의 바구니로 구축 범위를 받습니다.
2. 전자책과 논문은 PDF/EPUB 파일을 먼저 업로드 대기열로 모아 상품 설명 문구를 정제합니다.
3. AsanNote는 무단 복제·재배포 금지 문구를 유지하고, ZIP은 Release/R2로 분리하며 기관용 라이선스는 문의로 분리합니다.
4. AI-recipe는 공개 배포보다 전자책·강의안 판매가 먼저 어울리므로 지식 자산 섹션과 연결해 운영합니다.
5. VocaKing DY는 Cloudflare Pages 공개 주소까지 연결됐으므로, 다음 단계에서는 교육 상품용 랜딩 카피와 결제 흐름을 붙이면 됩니다.
