shopport 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,13 @@
1
+ <!doctype html>
2
+ <html lang="ko">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>shopport</title>
7
+ <script type="module" crossorigin src="/assets/index-CTf-NIWh.js"></script>
8
+ <link rel="stylesheet" crossorigin href="/assets/index-CNEU9OYf.css">
9
+ </head>
10
+ <body>
11
+ <div id="root"></div>
12
+ </body>
13
+ </html>
@@ -0,0 +1,35 @@
1
+ # shopport Skills
2
+
3
+ > Claude Code가 읽고 실행하는 커머스 운영 워크플로우 스킬
4
+
5
+ ## 사용법
6
+
7
+ ### Claude Code에서
8
+ ```
9
+ /skill install shopport
10
+ ```
11
+
12
+ 또는 수동 설치:
13
+ ```bash
14
+ git clone https://github.com/onlymytho/shopport ~/.claude/skills/shopport
15
+ ```
16
+
17
+ ### 스킬 목록
18
+
19
+ | 스킬 | 설명 |
20
+ |---|---|
21
+ | `source-to-register` | 소싱 검색 → 마진 계산 → 판매 채널 등록 |
22
+ | `order-fulfill` | 주문 확인 → 소싱 발주 → 송장 등록 |
23
+ | `inventory-sync` | 멀티채널 재고 동기화 |
24
+ | `waterfall-source` | 3개 소싱채널 워터폴 검색 |
25
+ | `price-monitor` | 소싱가 변동 감지 → 판매가 조정 |
26
+
27
+ ## 전제 조건
28
+
29
+ - `sppt` CLI 설치
30
+ - 최소 1개 판매 채널 + 1개 소싱 채널 설정 (`sppt init`)
31
+
32
+ ## 스킬 구조
33
+
34
+ 각 스킬은 `SKILL.md` 마크다운 파일 하나로 구성됩니다.
35
+ Claude Code가 파일을 읽고, CLI 명령어를 조합해 워크플로우를 실행합니다.
@@ -0,0 +1,78 @@
1
+ # inventory-sync
2
+
3
+ 공급사 재고를 기준으로 4개 판매 채널의 재고를 분배하고 동기화하는 워크플로우.
4
+
5
+ ## When to use
6
+
7
+ - 사용자가 "재고 동기화해줘", "채널별 재고 맞춰줘", "재고 분배해줘" 같은 요청을 할 때
8
+ - 공급사 재고 변동 시 멀티채널 재고 업데이트가 필요할 때
9
+
10
+ ## Prerequisites
11
+
12
+ - 최소 2개 이상 판매 채널 설정
13
+ - `sppt status`로 채널 연결 상태 확인
14
+
15
+ ## Steps
16
+
17
+ ### 1. 재고 분배 계획 수립
18
+
19
+ ```bash
20
+ sppt inventory plan <totalStock> [sku]
21
+ ```
22
+
23
+ 예시:
24
+ ```bash
25
+ sppt inventory plan 500 SKU-001
26
+ ```
27
+
28
+ 출력 예시:
29
+ ```
30
+ 재고 분배 계획 (SKU: SKU-001, 총 재고: 500)
31
+ ────────────────────────────────
32
+ 버퍼 재고: 50 (10%)
33
+ 배분 가능: 450
34
+ ────────────────────────────────
35
+ cafe24: 135 (30%)
36
+ coupang: 180 (40%)
37
+ smartstore: 90 (20%)
38
+ shopify: 45 (10%)
39
+ ```
40
+
41
+ 사용자에게 분배 비율이 적절한지 확인합니다.
42
+
43
+ ### 2. 채널별 재고 업데이트
44
+
45
+ 각 채널에 순차적으로 재고를 동기화합니다:
46
+
47
+ ```bash
48
+ sppt inventory sync cafe24 <productId> 135
49
+ sppt inventory sync coupang <productId> 180
50
+ sppt inventory sync smartstore <productId> 90
51
+ sppt inventory sync shopify <productId> 45
52
+ ```
53
+
54
+ 채널별 재고 업데이트 방식 차이:
55
+ - **Shopify**: delta 방식 (동시성 안전, 현재값 대비 증감)
56
+ - **Cafe24, Coupang**: 절대값 방식 (직접 수량 설정)
57
+ - **SmartStore**: 상품 전체 PUT 방식 (가장 비효율적)
58
+
59
+ ### 3. 동기화 확인
60
+
61
+ ```bash
62
+ sppt product get <channel> <productId>
63
+ ```
64
+
65
+ 각 채널에서 재고가 올바르게 반영되었는지 확인합니다.
66
+
67
+ ## Error handling
68
+
69
+ - **재고 업데이트 실패**: Rate limit일 수 있음, 잠시 후 재시도
70
+ - **SmartStore 실패**: 상품 전체 PUT이므로 다른 필드가 변경될 수 있음 — 업데이트 전후 상품 정보 비교
71
+ - **Shopify delta 계산 오류**: 현재 재고를 먼저 조회한 후 차이값으로 업데이트
72
+
73
+ ## Notes
74
+
75
+ - 버퍼 재고(기본 10%)는 과잉 판매 방지용입니다
76
+ - 분배 비율은 채널별 판매 실적에 따라 조정하세요
77
+ - 재고가 0이 되면 모든 채널에서 품절 처리를 권장합니다
78
+ - Shopify의 delta 방식이 가장 안전하므로, 동시 접근이 많은 상품은 Shopify를 기준으로 하세요
@@ -0,0 +1,90 @@
1
+ # order-fulfill
2
+
3
+ 신규 주문 확인 → 소싱 발주 → 송장 등록까지의 주문 처리 워크플로우.
4
+
5
+ ## When to use
6
+
7
+ - 사용자가 "새 주문 처리해줘", "주문 확인하고 송장 넣어줘" 같은 요청을 할 때
8
+ - 주문 확인부터 배송 처리까지 전체 플로우가 필요할 때
9
+
10
+ ## Prerequisites
11
+
12
+ - 최소 1개 판매 채널 설정 완료
13
+ - `sppt status`로 채널 연결 상태 확인
14
+
15
+ ## Steps
16
+
17
+ ### 1. 신규 주문 조회
18
+
19
+ ```bash
20
+ sppt order list <channel>
21
+ ```
22
+
23
+ 기본적으로 최근 7일간 주문을 조회합니다.
24
+
25
+ 채널별 제약:
26
+ - Coupang: 최대 31일 윈도우
27
+ - SmartStore: 최대 24시간 윈도우 (자주 확인 필요)
28
+
29
+ 여러 채널의 주문을 모두 확인하려면 각 채널별로 실행합니다.
30
+
31
+ ### 2. 주문 상세 확인
32
+
33
+ ```bash
34
+ sppt order get <channel> <orderId>
35
+ ```
36
+
37
+ 구매자 정보, 배송지, 주문 상품, 옵션을 확인합니다.
38
+
39
+ ### 3. 발주 확인 (주문 접수)
40
+
41
+ ```bash
42
+ sppt order confirm <channel> <orderId>
43
+ ```
44
+
45
+ 판매 채널에 발주 확인(주문 수락)을 전송합니다.
46
+ Coupang은 발주 확인 전에만 취소가 가능합니다.
47
+
48
+ ### 4. 소싱 발주
49
+
50
+ 현재 CLI에서 소싱 채널 자동 발주는 미지원입니다.
51
+ 사용자에게 소싱 채널에서 수동 발주를 안내합니다:
52
+
53
+ - 주문 상품의 소싱 채널 + 상품 ID 확인
54
+ - 배송지: 주문의 수령인 정보 전달
55
+ - 발주 후 택배사 코드 + 운송장 번호를 확보
56
+
57
+ ### 5. 송장 등록
58
+
59
+ ```bash
60
+ sppt invoice register <channel> <orderId> <carrierCode> <trackingNumber>
61
+ ```
62
+
63
+ 택배사 코드:
64
+ - `cj` — CJ대한통운
65
+ - `hanjin` — 한진택배
66
+ - `lotte` — 롯데택배
67
+ - `post` — 우체국택배
68
+ - `logen` — 로젠택배
69
+
70
+ 채널별로 택배사 코드가 자동 매핑됩니다.
71
+
72
+ ### 6. 처리 확인
73
+
74
+ ```bash
75
+ sppt order get <channel> <orderId>
76
+ ```
77
+
78
+ 상태가 `shipped`로 변경되었는지 확인합니다.
79
+
80
+ ## Error handling
81
+
82
+ - **주문 조회 실패**: `sppt status`로 채널 연결 확인, 토큰 만료 시 `sppt auth <channel>`
83
+ - **발주 확인 실패**: 이미 확인된 주문이거나 취소된 주문일 수 있음
84
+ - **송장 등록 실패**: 택배사 코드 오타 확인, 운송장 번호 형식 확인
85
+
86
+ ## Notes
87
+
88
+ - SmartStore는 주문 변경 폴링이 24시간 윈도우이므로 하루에 한 번 이상 확인 권장
89
+ - Coupang은 발주 확인 후 취소가 불가능하므로 신중하게 처리
90
+ - 여러 주문을 한 번에 처리할 때는 각 주문을 순차적으로 처리합니다
@@ -0,0 +1,96 @@
1
+ # price-monitor
2
+
3
+ 소싱 채널의 도매가 변동을 감지하고 판매가 조정을 제안하는 워크플로우.
4
+
5
+ ## When to use
6
+
7
+ - 사용자가 "가격 변동 체크해줘", "마진 확인해줘", "소싱가 올랐는지 봐줘" 같은 요청을 할 때
8
+ - 정기적으로 소싱가와 판매가의 마진을 점검할 때
9
+
10
+ ## Prerequisites
11
+
12
+ - 최소 1개 판매 채널 + 1개 소싱 채널 설정
13
+ - 등록된 상품의 소싱 채널 상품 ID를 알고 있어야 함
14
+
15
+ ## Steps
16
+
17
+ ### 1. 소싱 상품 현재 가격 조회
18
+
19
+ ```bash
20
+ sppt source detail <sourceChannel> <sourceProductId>
21
+ ```
22
+
23
+ 도매가(wholesalePrice)를 확인합니다.
24
+
25
+ ### 2. 판매 상품 현재 가격 조회
26
+
27
+ ```bash
28
+ sppt product get <sellingChannel> <sellingProductId>
29
+ ```
30
+
31
+ 현재 판매가를 확인합니다.
32
+
33
+ ### 3. 마진 계산
34
+
35
+ ```
36
+ 현재 마진 = (판매가 - 도매가 - 배송비) / 판매가 × 100
37
+ ```
38
+
39
+ 마진 기준:
40
+ | 마진율 | 상태 | 조치 |
41
+ |---|---|---|
42
+ | 30% 이상 | 양호 | 유지 |
43
+ | 15~30% | 주의 | 모니터링 강화 |
44
+ | 15% 미만 | 위험 | 판매가 인상 권고 |
45
+ | 0% 미만 | 적자 | 즉시 판매가 조정 또는 판매 중지 |
46
+
47
+ ### 4. 가격 조정 (필요시)
48
+
49
+ 마진이 기준 이하일 경우 사용자에게 판매가 조정을 제안합니다.
50
+
51
+ 제안 판매가 계산:
52
+ ```
53
+ 제안가 = 현재 도매가 × 1.3 + 배송비
54
+ ```
55
+
56
+ 사용자 확인 후, 새 가격을 담은 JSON 파일을 작성하고 업데이트합니다:
57
+
58
+ ```bash
59
+ # /tmp/price-update.json
60
+ # { "variants": [{ "id": "...", "sku": "...", "optionLabel": "기본", "price": <원가>, "salePrice": <제안가>, "stockQuantity": <현재재고> }] }
61
+
62
+ sppt product update <sellingChannel> <productId> --file /tmp/price-update.json
63
+ ```
64
+
65
+ 또는 가격 룰을 직접 적용하려면 `--markup` 플래그를 활용합니다:
66
+
67
+ ```bash
68
+ sppt product register <sellingChannel> --file /tmp/product.json --markup 1.3 --margin-floor 15
69
+ ```
70
+
71
+ ### 5. 복수 상품 모니터링
72
+
73
+ 여러 상품을 점검할 때는 Step 1~4를 반복합니다.
74
+ 결과를 표로 정리합니다:
75
+
76
+ ```
77
+ 가격 모니터링 결과
78
+ ─────────────────────────────────────────────
79
+ 상품명 소싱가 판매가 마진 상태
80
+ 아이폰 케이스 8,500원 13,900원 27% 주의
81
+ USB 허브 12,000원 19,900원 35% 양호
82
+ 블루투스 이어폰 15,200원 18,900원 12% 위험 ⚠
83
+ ─────────────────────────────────────────────
84
+ ```
85
+
86
+ ## Error handling
87
+
88
+ - **소싱 상품 조회 실패**: 상품이 품절되었거나 삭제되었을 수 있음 — 대체 소싱처 검색 권장
89
+ - **판매 상품 조회 실패**: 채널 연결 상태 확인
90
+
91
+ ## Notes
92
+
93
+ - 환율 변동 (CJ Dropshipping 이용 시)도 마진에 영향을 줍니다
94
+ - 배송비는 채널/지역에 따라 다르므로 사용자에게 확인합니다
95
+ - PostgreSQL이 연결되어 있으면 가격 이력이 자동 기록됩니다
96
+ - 주기적 모니터링은 주 1회 이상 권장합니다
@@ -0,0 +1,114 @@
1
+ # product-parse
2
+
3
+ 주문 데이터의 상품명을 사용자 정의 규칙에 따라 SKU/카테고리/제품라인 단위로 해체.
4
+
5
+ ## When to use
6
+
7
+ - "상품명 분석해줘", "SKU별로 정리해줘", "제품라인별 매출 보고 싶어"
8
+ - 주문 데이터 임포트 후 상품 카탈로그를 구축하고 싶을 때
9
+ - "미매핑 상품 있는지 확인해줘"
10
+
11
+ ## Prerequisites
12
+
13
+ - 주문 데이터가 임포트되어 있어야 함 (`sppt import <file>` 또는 API 동기화)
14
+ - 상품 분류 규칙 파일이 있으면 더 정확함 (없으면 LLM이 자체 판단)
15
+
16
+ ## Steps
17
+
18
+ ### 1. 상태 확인
19
+
20
+ 먼저 현재 상태를 파악합니다.
21
+
22
+ ```bash
23
+ sppt product unmapped
24
+ ```
25
+
26
+ 미매핑 상품명이 몇 건인지 확인합니다. 이미 전부 매핑되어 있으면 완료.
27
+
28
+ ### 2. 분류 규칙 확인
29
+
30
+ ```bash
31
+ sppt product rules
32
+ ```
33
+
34
+ `~/.shopport/product-rules.md` 파일이 있는지 확인합니다.
35
+
36
+ - **파일이 있으면**: 내용을 읽고 규칙을 이해합니다.
37
+ - **파일이 없으면**: 사용자에게 물어봅니다:
38
+ - "상품 분류 규칙이 있나요? (카테고리, 제품라인 등)"
39
+ - 사용자가 알려주면 `~/.shopport/product-rules.md`에 저장합니다.
40
+ - 없으면 상품명에서 자체 판단합니다.
41
+
42
+ ### 3. 상품명 해체
43
+
44
+ `sppt product unmapped`의 결과 목록을 가져온 후, 분류 규칙을 참고하여 각 상품명을 해체합니다.
45
+
46
+ #### 해체 결과 구조
47
+
48
+ 각 상품명에서 다음을 추출합니다:
49
+
50
+ | 필드 | 설명 | 예시 |
51
+ |------|------|------|
52
+ | sku | 정규 SKU 코드 | AB-MC20 |
53
+ | brand | 브랜드명 | 알텐바흐 |
54
+ | productLine | 제품 라인 | 316Ti |
55
+ | category | 카테고리 | 냄비 |
56
+ | productName | 정규 상품명 | 멀티쿠커 편수 |
57
+ | option | 옵션/사이즈 | 20cm |
58
+
59
+ #### 해체 원칙
60
+
61
+ 1. **규칙 우선**: `product-rules.md`에 명시된 분류 규칙을 최우선으로 적용
62
+ 2. **MECE**: 모든 상품이 빠짐없이 하나의 카테고리에 정확히 배정되어야 함
63
+ 3. **모호한 경우 질문**: 규칙으로 판단 불가능한 경우, 자의적 분류 대신 사용자에게 질문
64
+ 4. **세트 상품 분해**: 세트/번들 상품은 구성 단품 SKU로 분해 (규칙에 명시된 경우)
65
+
66
+ #### SKU 코드 생성 규칙
67
+
68
+ 사용자가 별도 SKU 체계를 가지고 있으면 그것을 따릅니다.
69
+ 없으면 다음 패턴으로 자동 생성:
70
+
71
+ ```
72
+ {브랜드 약어}-{제품라인 약어}-{옵션코드}
73
+ 예: AB-DF-FP28 (알텐바흐-디피니티-프라이팬28cm)
74
+ ```
75
+
76
+ ### 4. 결과 저장
77
+
78
+ 해체 결과를 카탈로그에 저장합니다. 저장은 CLI의 product-catalog-store를 통해 합니다.
79
+
80
+ 해체 결과를 `~/.shopport/imports/product-catalog.jsonl`에 저장하려면,
81
+ 각 엔트리를 JSON으로 만들어 파일에 append 합니다:
82
+
83
+ ```bash
84
+ # 예시: 한 줄씩 append
85
+ echo '{"sku":"AB-MC20","brand":"알텐바흐","productLine":"316Ti","category":"냄비","productName":"멀티쿠커 편수","option":"20cm","rawNames":["[알텐바흐] 316Ti 올인원 멀티쿠커 편수 20cm"],"confidence":"llm","createdAt":"2026-04-17T..."}' >> ~/.shopport/imports/product-catalog.jsonl
86
+ ```
87
+
88
+ 또는 Node.js 스크립트를 작성해서 일괄 저장할 수 있습니다.
89
+
90
+ ### 5. 검증
91
+
92
+ ```bash
93
+ sppt product catalog
94
+ ```
95
+
96
+ 저장된 카탈로그를 조회하여 결과를 확인합니다.
97
+
98
+ 다시 `sppt product unmapped`를 실행하여 미매핑 상품이 0건인지 확인합니다.
99
+
100
+ ### 6. 분석 활용
101
+
102
+ 카탈로그가 구축되면 대시보드에서 다음 분석이 가능합니다:
103
+
104
+ - SKU별 판매량/매출 집계
105
+ - 제품라인별 비교 (어떤 라인이 잘 팔리나)
106
+ - 카테고리별 매출 비중
107
+ - 옵션/사이즈별 선호도
108
+
109
+ ## Tips
110
+
111
+ - 규칙 파일은 자연어로 자유롭게 작성하세요. 이 스킬이 읽고 해석합니다.
112
+ - 한번 매핑된 상품명은 캐시되어 다음에는 자동 적용됩니다.
113
+ - 새로운 상품이 추가되면 `sppt product unmapped`로 확인 후 추가 해체합니다.
114
+ - 잘못된 매핑은 `product-catalog.jsonl`을 직접 수정하거나, 다시 해체할 수 있습니다.
@@ -0,0 +1,160 @@
1
+ # promo-research
2
+
3
+ 소싱 키워드 또는 등록 상품을 바탕으로 경쟁 광고 분석 → 바이럴 강도 확인 → AI 광고 카피 생성까지 자동으로 진행하는 홍보 리서치 워크플로우.
4
+
5
+ ## When to use
6
+
7
+ - "이 상품 광고 어떻게 하면 좋아?" 라고 물을 때
8
+ - 소싱 후 상품 등록 직전/직후 홍보 전략이 필요할 때
9
+ - 경쟁사 광고를 분석하고 싶을 때
10
+ - 인플루언서 마케팅을 시작하려 할 때
11
+ - "카피 써줘", "광고 문구 만들어줘" 요청
12
+
13
+ ## Prerequisites
14
+
15
+ - `sppt` CLI 설치
16
+ - Apify API Token 설정 (ad-spy, viral-check, influencer에 필요):
17
+ ```bash
18
+ sppt config set apify apiToken <YOUR_APIFY_TOKEN>
19
+ ```
20
+ 발급: https://console.apify.com/settings/integrations
21
+
22
+ ## Steps
23
+
24
+ ### 1. 트렌드 기반 키워드 검증 (선택)
25
+
26
+ 소싱 전이라면 먼저 키워드 수요를 확인합니다.
27
+
28
+ ```bash
29
+ sppt trend keyword <키워드>
30
+ ```
31
+
32
+ 검색량이 월 1,000 이상, 최근 트렌드 상승 중인 키워드를 선택합니다.
33
+
34
+ ---
35
+
36
+ ### 2. 경쟁 광고 분석 (Facebook Ad Library)
37
+
38
+ ```bash
39
+ sppt promo ad-spy "<키워드>" --country KR --max 30
40
+ ```
41
+
42
+ 결과에서 주목할 포인트:
43
+ - **Winning Ads**: 집행 기간이 긴 광고 = 수익성 있는 광고 (오래 돌릴수록 ROI 높다는 신호)
44
+ - **반복 문구**: 여러 광고주가 공통으로 쓰는 단어/각도
45
+ - **광고주 목록**: 주요 경쟁사 파악
46
+
47
+ 사용자에게 Winning Ad의 카피 내용을 보여주고, 어떤 각도(pain point / benefit / social proof)를 주로 사용하는지 분석해줍니다.
48
+
49
+ ---
50
+
51
+ ### 3. TikTok 바이럴 강도 확인
52
+
53
+ ```bash
54
+ sppt promo viral-check "<키워드>" --max 30
55
+ ```
56
+
57
+ 결과 해석:
58
+ - **high** (평균 50만뷰↑): 이미 바이럴 중 — 빠르게 진입해야 함
59
+ - **medium** (5만~50만뷰): 성장 중 — 지금이 적기
60
+ - **low** (5만뷰 미만): TikTok에서 아직 미미 — SNS 광고보다 검색 광고 집중
61
+
62
+ ---
63
+
64
+ ### 4. AI 광고 카피 생성
65
+
66
+ 위 분석 결과를 바탕으로 플랫폼별 카피를 생성합니다.
67
+
68
+ #### 4a. CLI 기본 카피 (템플릿 기반)
69
+
70
+ ```bash
71
+ # 소싱 상품 기반
72
+ sppt promo copy "<키워드>" \
73
+ --platform smartstore \
74
+ --price <판매가> \
75
+ --original-price <정가> \
76
+ --features "특징1,특징2,특징3"
77
+
78
+ # 소싱 채널 상품 직접 연동
79
+ sppt promo copy "<키워드>" \
80
+ --source domeggook \
81
+ --product-id <ID> \
82
+ --platform cafe24
83
+ ```
84
+
85
+ #### 4b. AI 카피 최적화 (Claude 직접 생성)
86
+
87
+ CLI 결과 + ad-spy Winning Ad 카피를 참고해서 다음 프롬프트로 더 나은 카피를 생성합니다:
88
+
89
+ ```
90
+ 아래 정보를 바탕으로 [플랫폼]용 광고 카피를 작성해줘:
91
+
92
+ 상품: [상품명]
93
+ 판매가: [가격]원
94
+ 주요 특징: [특징들]
95
+
96
+ 경쟁 광고에서 효과적인 각도:
97
+ [ad-spy Winning Ad 카피 내용]
98
+
99
+ 요청:
100
+ 1. 검색 최적화 제목 (40자 이내)
101
+ 2. 상품 상세 설명 (SEO 키워드 포함)
102
+ 3. SNS 짧은 카피 3가지
103
+ 4. 해시태그 15개
104
+ ```
105
+
106
+ ---
107
+
108
+ ### 5. 인플루언서 발굴 (선택)
109
+
110
+ 마이크로 인플루언서(1K~50K) 협업을 원할 때:
111
+
112
+ ```bash
113
+ sppt promo influencer "<키워드>" \
114
+ --min-followers 3000 \
115
+ --max-followers 30000 \
116
+ --csv influencers.csv
117
+ ```
118
+
119
+ CSV 저장 후 사용자에게 상위 10명 목록을 보여주고, DM 템플릿을 제안합니다:
120
+
121
+ ```
122
+ 안녕하세요 @[username]님!
123
+ [상품명] 관련 콘텐츠를 만드시는 분을 찾고 있어요.
124
+ 협업 의향이 있으시면 연락 부탁드립니다 🙏
125
+ ```
126
+
127
+ ---
128
+
129
+ ### 6. 결과 요약
130
+
131
+ 사용자에게 다음을 제공합니다:
132
+
133
+ 1. **광고 각도 추천**: ad-spy 분석에서 도출한 효과적인 접근법
134
+ 2. **플랫폼 우선순위**: 바이럴 강도에 따른 채널 전략 (TikTok high → 인스타/TikTok 먼저, low → 네이버/쿠팡 검색광고)
135
+ 3. **최종 카피**: 바로 사용 가능한 플랫폼별 광고 문구
136
+ 4. **인플루언서 리스트**: CSV 파일 경로 + 상위 10명
137
+
138
+ ## 전략 가이드
139
+
140
+ ### 커머스 광고 접근법
141
+
142
+ | 상황 | 추천 전략 |
143
+ |---|---|
144
+ | 신규 상품, 검증 필요 | ad-spy로 경쟁사 winning ad 찾기 → 그대로 따라하기 |
145
+ | 바이럴 강도 high | TikTok/Instagram 인플루언서 먼저 → SNS 광고 |
146
+ | 바이럴 강도 low | 네이버 쇼핑/쿠팡 검색 최적화 먼저 |
147
+ | 마진이 낮은 상품 | 카카오 단톡방/커뮤니티 바이럴 전략 |
148
+ | 브랜드 상품 | Instagram 마이크로 인플루언서 + 리뷰 마케팅 |
149
+
150
+ ### Winning Ad 판별 기준
151
+ - 집행 기간 60일 이상: 수익 나는 광고
152
+ - 집행 기간 30~60일: 테스트 중
153
+ - 집행 기간 30일 미만: 아직 검증 전
154
+
155
+ ## 주의사항
156
+
157
+ - Apify 크레딧 소모: actor 1회 실행당 약 $0.5~2 (Facebook Ad Library는 무거움)
158
+ - Facebook Ad Library는 최근 7일 이내 게재 시작 광고가 누락될 수 있음
159
+ - Instagram Scraper는 공개 계정/해시태그만 수집 가능
160
+ - TikTok Scraper 결과는 한국 IP 기준이 아닐 수 있으므로 참고용으로만 사용
@@ -0,0 +1,85 @@
1
+ # source-to-register
2
+
3
+ 소싱 채널에서 상품을 검색하고 판매 채널에 등록하는 워크플로우.
4
+
5
+ ## When to use
6
+
7
+ - 사용자가 "이 상품 소싱해서 등록해줘", "도매매에서 찾아서 카페24에 올려줘" 같은 요청을 할 때
8
+ - 소싱 → 등록 전체 플로우가 필요할 때
9
+
10
+ ## Prerequisites
11
+
12
+ - 최소 1개 소싱 채널 설정: `sppt config get domemae`
13
+ - 최소 1개 판매 채널 설정: `sppt config get cafe24`
14
+
15
+ ## Steps
16
+
17
+ ### 1. 소싱 채널에서 상품 검색
18
+
19
+ ```bash
20
+ sppt source search <sourceChannel> "<keyword>"
21
+ ```
22
+
23
+ 결과에서 상품 목록이 표시됩니다. 사용자에게 어떤 상품을 선택할지 확인합니다.
24
+
25
+ 여러 소싱 채널을 비교하려면 `waterfall-source` 스킬을 먼저 실행하세요.
26
+
27
+ ### 2. 상품 상세 조회
28
+
29
+ ```bash
30
+ sppt source detail <sourceChannel> <productId>
31
+ ```
32
+
33
+ 도매가(wholesalePrice), 최소주문수량(minOrderQty), 옵션, 이미지 URL을 확인합니다.
34
+
35
+ ### 3. 마진 계산 + 상품 데이터 변환
36
+
37
+ 판매가 계산 공식:
38
+ ```
39
+ sellingPrice = wholesalePrice × 마진배수 + 배송비
40
+ ```
41
+
42
+ 기본값:
43
+ - 마진배수: 1.3 (30% 마진)
44
+ - 배송비: 3,000원 (국내) / 소싱채널에 따라 상이
45
+
46
+ 소싱 데이터를 판매 채널 등록용 JSON으로 변환합니다:
47
+
48
+ ```json
49
+ {
50
+ "name": "[상품명 — 사용자 확인 후 수정 가능]",
51
+ "description": "[소싱 상세에서 가져온 설명]",
52
+ "price": "[계산된 판매가]",
53
+ "variants": [...],
54
+ "images": ["[소싱 이미지 URL]"],
55
+ "category": "[사용자에게 카테고리 확인]"
56
+ }
57
+ ```
58
+
59
+ JSON 파일을 `/tmp/shopport-register-<timestamp>.json`에 저장합니다.
60
+
61
+ ### 4. 판매 채널에 등록
62
+
63
+ ```bash
64
+ sppt product register <sellingChannel> --file /tmp/shopport-register-<timestamp>.json
65
+ ```
66
+
67
+ 등록 결과에서 채널 상품 ID를 확인합니다.
68
+
69
+ ### 5. 등록 확인
70
+
71
+ ```bash
72
+ sppt product get <sellingChannel> <productId>
73
+ ```
74
+
75
+ ## Error handling
76
+
77
+ - **소싱 검색 결과 없음**: 다른 소싱 채널로 재시도하거나 키워드를 변경
78
+ - **Rate limit 초과**: 잠시 대기 후 재시도 (rate limiter가 자동 처리)
79
+ - **등록 실패**: 에러 메시지 확인 후 JSON 데이터 수정하여 재시도
80
+
81
+ ## Notes
82
+
83
+ - Coupang은 상품 등록 시 카테고리 코드가 필수입니다
84
+ - SmartStore는 상품 등록 후 검수 과정이 있어 즉시 노출되지 않을 수 있습니다
85
+ - 이미지 URL은 소싱 채널의 원본 URL을 사용합니다 (채널에 따라 외부 이미지 차단 가능)