# Creator Prototype vs Existing Product — UI/UX Coverage Audit

Date 2026-08-19 · branch `creator-update`

Korean text below appears only inside quoted UI strings used as evidence.

**Subjects of comparison**

| | Path | Nature |
|---|---|---|
| Prototype | `creator/main.dc.html` (deployed: `prototype.startview.co.kr/creator/main.dc.html`) | Single-file phone prototype. Screens are 43 views gated by `<sc-if value="{{ isX }}">`, driven by a state machine (`s.auth` / `s.tab` / `s.route`) |
| Existing product (reference) | `startview-platform/.claude/worktrees/angular-nextjs-feature-gaps-a8d4fe` | `apps/client` (Angular, 74 routes — **source of truth for feature coverage**) + `apps/client-web` (Next.js port of the RN mobile app) |

> **How to read this.** `apps/client` is the coverage baseline. `apps/client-web` is, per its own `PORTING.md`, at "20 remaining screens (placeholders in place)", so it is used only as a secondary reference; screens found *only* there (`/map`, `/(tabs)/events`, `/attendance`) are flagged as such.

---

## 1. Existing route tree (apps/client · Angular)

```
Creator (client)
├── Authentication
│   ├── /sign-in                                  Login
│   ├── /sign-up                                  Terms entry
│   ├── /sign-up/phone-verification               KCP identity verification
│   ├── /sign-up/form                             Signup form
│   ├── /find-email                               Find email
│   ├── /find-password                            Password reset
│   ├── /terms                                    Terms full text
│   └── /callback/kakao                           Social login callback
├── Creator onboarding
│   ├── /creator/onboarding/welcome
│   ├── /creator/onboarding/connect               Channel connect
│   ├── /creator/onboarding/analyzing             Analyzing
│   ├── /creator/onboarding/profile               Profile draft
│   └── /creator/onboarding/live                  Completion
├── Home  /home
│   ├── _banner · _brand-zone · _campaign · _community
│   ├── _email-verify-banner                      Unverified-email banner
│   └── _onboarding-nudge                         Incomplete-onboarding nudge
├── Campaigns
│   ├── /campaign                                 List (search · filter · sort)
│   ├── /campaign/:id                             Detail
│   └── /campaign/:id/apply                       Application form
├── Brands
│   ├── /brand                                    Brand zone
│   ├── /brand/:id                                Brand detail (tab-scroll)
│   └── /brand/:id/proposal                       Creator-initiated proposal
├── Demand survey
│   └── /demand-survey/:id                        Participation (desired rate · extension fee)
├── Group buy
│   ├── /group-buy                                List
│   └── /group-buy/:id                            Detail + apply
├── Affiliate
│   ├── /affiliate                                Landing / product list
│   ├── /affiliate/my                             My links · commission
│   └── /affiliate/:id                            Product detail
├── Community
│   ├── /community                                Home
│   └── /community/post/:id                       Post detail
├── Point shop  /point-shop
├── Customer service
│   ├── /customer-service                         FAQ · usage guide
│   ├── /customer-service/notice/:id              Notice detail
│   ├── /customer-service/inquiry                 Inquiry list
│   ├── /customer-service/inquiry/create          Create inquiry
│   ├── /customer-service/inquiry/:id             Inquiry detail
│   └── /customer-service/inquiry/update/:id      Edit inquiry
├── Creator profile
│   ├── /creator-profile                          Public profile
│   └── /my-page/profile/edit                     Influencer profile edit
└── My page  /my-page
    ├── (index)                                   Dashboard
    ├── /profile                                  My profile · completeness
    ├── /account                                  Account · operating channels
    ├── /video-collection                         My review activity (video collection)
    ├── /affiliate                                My affiliate
    ├── /settlement-account                       Payout account registration
    ├── /settlement                               Payout history
    ├── /group-buy                                My group-buy participation
    ├── /penalty                                  Penalty history · score
    ├── /point                                    Point history
    ├── /notification                             Notification list
    ├── /interest-brand                           Followed brands
    ├── /proposal                                 Proposals
    ├── /review                                   My campaigns (tabs: needs production / all / not-selected·cancelled)
    ├── /review/:id                               Review detail — submission · inspection · reservation · shipping
    ├── /demand-proposal                          Received / sent proposals
    ├── /demand-proposal/:id
    ├── /demand-proposal/sent/:id
    ├── /collaboration                            My collaborations
    ├── /collaboration/:id                        Collaboration detail — upload · revision request
    ├── /withdraw                                 Account deletion
    └── /update-profile
```

**Modals (no route, `app/modals/*`, 27 total)**
`affiliate-link-issued` · `attendance-event` · `attendance-reward-history` · `brand-alimtalk-consent` · `campaign-inquiry` · `campaign-preview` · `campaign-register-request` · `channel-category` · `consultation-form` · `home-banner` · `influencer-profile-preview` · `mall-partner-form` · `marketing-agreement` · `marketing-purpose-agreement` · `payment-receipt` · `point-shop-purchase` · `product-category-selector` · `product-preview` · `reservation` · `reviewer-analyze` · `shopby-category-selector` · `side-menu` · `term` / `terms` · `video-detail` · `video-list` · `video-preview`

**Screens found only in client-web**
`/map` (visit-type campaigns plotted by store coordinates) · `/(tabs)/events` (events + articles tab) · `/attendance` (dedicated attendance page) · `/oauth/instagram` · `/callback/kcp`

---

## 2. Prototype screen inventory (43 views)

```
Creator (prototype)
├── auth: splash → login → signup (2 steps · KCP identity · email verification) → terms
│         → welcome → connect → analyzing → draft (profile draft) → live
├── tab: home | discover | campaigns (my collaborations) | events (guide) | me
├── route:
│   ├── detail            Offer/campaign detail (Info | Guidance tabs)
│   ├── apply             Campaign application (address · channel · message · 4 agreements)
│   ├── review            Review detail (timeline · visit type · inspection · shipping · reservation)
│   ├── collabDetail      Collaboration detail
│   ├── past              Past campaigns / collaboration history
│   ├── proposal          Brand proposal sheet
│   ├── brandZone / brand Brand zone · brand detail
│   ├── communityList / supporters / article
│   ├── attendance        Attendance event (gift box)
│   ├── points / shop     Point history · point shop
│   ├── settlement        Payout account registration
│   ├── payoutRequest     Payout request
│   ├── penalty           Penalty history
│   ├── saved             Saved / followed
│   ├── noti / notiSettings
│   ├── connect           Channel connect
│   ├── profileEdit       Profile edit
│   ├── language / privacy / terms
│   └── chat              AI support (home · messages · help · collection · thread)
└── me tab sub-views: meTab = creator (creator profile) | space (my space)
    + account-deletion confirm · language/region sheet · proposal sheet
```

---

## 3. Route-level coverage matrix

| Existing route / screen | Purpose | Prototype equivalent | Coverage | Missing UI/UX | Priority | Evidence |
|---|---|---|---|---|---|---|
| `/sign-in` | Login | `auth==='login'` | ✅ | — | — | `main.dc.html:164` |
| `/sign-up` + `/phone-verification` + `/form` | 3-step signup | `auth==='signup'` 2 steps + KCP | ✅ | — | — | `main.dc.html:6265,6314` |
| `/terms` | Terms full text | `auth==='terms'`, `route==='terms'`, `privacy` | ✅ | — | — | `main.dc.html:3832` |
| `/find-email` | Find email | none | 🔴 | entire screen | P1 | `pages/find-email` |
| `/find-password` | Password reset | login screen has a "비밀번호를 잊으셨나요?" link with **no destination** | 🔴 | reset request · mail-sent notice · new password · completion | P1 | `main.dc.html:174` |
| `/callback/kakao`, `/callback/kcp`, `/oauth/instagram` | Callbacks | — | ⚪ | implementation-only | — | — |
| `/creator/onboarding/*` (5) | Onboarding | welcome→connect→analyzing→draft→live | ✅ | — | — | `main.dc.html:5589-5593` |
| `/home` | Home | `isHome` | ✅ | includes channel-not-connected nudge, bell, unread dot | — | `main.dc.html:662` |
| `/campaign` | Campaign list | `isDiscover` (campaign/brand modes) | 🟡 | **sort options** · filter drawer (only chip-clear exists) · category page | P2 | `main.dc.html:910,978` |
| `/campaign/:id` | Campaign detail | `isDetail` (Info/Guidance tabs) | 🟡 | expand/collapse detail images · store contact & homepage · service intro link · closed-campaign state · "이런 캠페인 어때요?" recommendations | P1 | `campaign-detail.page.html`, `main.dc.html:1712` |
| `/campaign/:id/apply` | Application form | `isApply` | 🟡 | raw-footage submission toggle · itemized privacy-consent expansion · "회원정보와 동일" autofill · submit-failure error · **completion screen** | P0 | `campaign-apply-form.page.*`, `main.dc.html:2059` |
| `/brand` | Brand zone | `isBrandZone` | ✅ | — | — | `main.dc.html:2171` |
| `/brand/:id` | Brand detail | `isBrandDetail` | 🟡 | section tab-scroll · follow/unfollow toggle · active campaigns & demand surveys list · empty state | P2 | `pages/brand/brand-detail`, `main.dc.html:1934` |
| `/brand/:id/proposal` | Creator proposal | `isProposal` + proposal sheet | ✅ | — | — | `main.dc.html:2359,4124` |
| `/demand-survey/:id` | Demand-survey participation | **n/a — retired** | ⚪ | — | — | Retired product-wide by `docs/specs/2026-08-11-cross-role-consistency-design.md` §5.3 ("Creator never had it"); folded into 제안/협업. Present only in the legacy Angular app. |
| `/my-page/demand-proposal` (+`:id`, `sent/:id`) | Received / sent proposals | partly `isProposal`·`isDetail` | 🟡 | **received/sent tab structure** · status badges (`채택됨`, `광고주 검토 중`, `광고주 미채택`, `확정됨`, rejected, cancelled) · accept/reject deadline UI · "거절 후 다시 제안" · confirm → collaboration transition | P0 | `pages/my-page/demand-proposal` |
| `/group-buy` | Group-buy list | **none** | 🔴 | list · empty state | P1 | `pages/group-buy` |
| `/group-buy/:id` | Group-buy detail & apply | **none** | 🔴 | detail · review guide · apply · success/failure | P1 | `pages/group-buy/group-buy-detail` |
| `/my-page/group-buy` | My group-buy participation | **none** | 🔴 | pending-approval / cancelled states · **raw-footage submission & inspection wait** · dedicated sales-link issuance + copy · upload failure / 500MB errors | P1 | `pages/my-page/my-group-buy` |
| `/affiliate`, `/affiliate/:id` | Affiliate products | **none** | 🔴 | tab-bar entry point · product list & detail · commission display | P1 | `pages/affiliate`, `layout/tab/tab.component.ts` |
| `/my-page/affiliate` | My sales links | **none** | 🔴 | link list · copy · expected commission · payout notice · **mandatory ad-disclosure text** · link-issued modal | P1 | `pages/affiliate/affiliate-my`, `modals/affiliate-link-issued` |
| `/community`, `/community/post/:id` | Community | `isCommunityList` · `isSupporters` · `isArticle` | ✅ | — | — | `main.dc.html:1128,1227,1299` |
| `/point-shop` | Point shop | `isShop` | 🟡 | sort (price ascending) · category filter · **purchase confirmation modal** | P2 | `pages/point-shop`, `modals/point-shop-purchase` |
| `/my-page/point` | Point history | `isPoints` | ✅ | — | — | `main.dc.html:3509` |
| `/customer-service` | FAQ · guide | `chat > help` | ✅ | — | — | `main.dc.html:3976,4653` |
| `/customer-service/notice/:id` | Notice detail | `chat > collection('공지사항')` | ✅ | — | — | `main.dc.html:5379` |
| `/customer-service/inquiry` (+create/:id/update) | Inquiry CRUD | `chat > thread` (conversational) | 🟡 | **inquiry type selection** · inquiry list & detail · awaiting-answer / answered states · **edit inquiry** | P2 | `pages/my-page/inquiry`, `main.dc.html:4056` |
| `/creator-profile` | Public profile | `isMe` (meTab=creator) | ✅ | — | — | `main.dc.html:1360,6985` |
| `/my-page/profile/edit` | Profile edit | `isProfileEdit` | ✅ | — | — | `main.dc.html:2231` |
| `/my-page` | My dashboard | `isMe` (meTab=space) | 🟡 | my-campaign status summary · **profile completeness gauge** | P2 | `pages/my-page/profile` |
| `/my-page/account` | Account · operating channels | `isConnect` | 🟡 | per-channel disconnect · **Naver Clip URL paste + "클립 주소 받는 법" guide** · theme selection · collecting-in-progress notice · channel reset confirm · profile-photo import confirm | P1 | `pages/my-page/account`, `main.dc.html:2499` |
| `/my-page/video-collection` | My review activity | **none** | 🔴 | per-campaign video collection · video detail / preview | P2 | `pages/my-page/video-collection`, `modals/video-*` |
| `/my-page/settlement-account` | Payout account | `isSettlement` | ✅ | bank · holder · account no. · resident reg. no. all present | — | `main.dc.html:3646` |
| `/my-page/settlement` | **Payout history** | none (`isPayoutRequest` is request-only) | 🟡 | payout history list · states (`지급 처리 중` / `지급 예정` / `이월`) · total received to date · commission accrued for next payout | P0 | `my-page/settlement/settlement.page.ts` |
| `/my-page/penalty` | Penalty | `isPenalty` | 🟡 | penalty **score gauge** · policy link · permanent-suspension state | P2 | `pages/my-page/penalty`, `main.dc.html:3730` |
| `/my-page/notification` | Notifications | `isNoti` + `isNotiSettings` | ✅ | — | — | `main.dc.html:2554,3772` |
| `/my-page/interest-brand` | Followed brands | `isSaved` | 🟡 | **AlimTalk opt-in toggle** + consent modal · "캠페인 오픈!"/"수요조사 오픈!" badges · unfollow | P2 | `pages/my-page/interest-brand`, `modals/brand-alimtalk-consent` |
| `/my-page/review` | My campaigns | `isCampaigns` | ✅ | — | — | Ruled 2026-08-20: the prototype's my-turn panel + chips is the chosen answer; the three-tab restructure is won't-do, not a gap. |
| `/my-page/review/:id` | Review detail | `isReview` | 🟡 | courier-site link-out · raw-footage URL registration · 500MB / video-only upload errors · **cancel-participation confirm** · reservation-cancel confirm · reservation cautions · pending-approval / inspection-complete badges | P1 | `my-review-detail.page.ts`, `main.dc.html:3007` |
| `/my-page/collaboration` (+`:id`) | My collaborations | `isCollabDetail` | 🟡 | status badges (`수락대기`·`업로드대기`·`검수중`·`수정 요청됨`) · **advertiser message (revision reason)** · awaiting product shipment · expired collaborations — revised-video re-upload is already covered via the `review` route (review-detail screen), not a gap | P0 | `pages/my-page/collaboration`, `main.dc.html:4423` |
| `/my-page/withdraw` | Account deletion | deletion confirm sheet | 🟡 | **list of data to be destroyed** · restriction conditions · consent checkbox · non-consent error | P2 | `pages/my-page/withdraw`, `main.dc.html:3304` |
| `client-web /map` | Visit-type campaign map | **none** | 🔴 | map view · pins · store card · location permission | P2 | `apps/client-web/app/map` |
| `client-web /(tabs)/events` | Events & articles | `isEvents` (labelled "가이드") | ❓ | prototype's events tab is labelled "guide" — needs confirmation whether it's the same surface | P2 | `main.dc.html:7626` |
| `/attendance` · `attendance-event` modal | Attendance | `isAttendance` | ✅ | — | — | `main.dc.html:2923` |

---

## 4. Modal / drawer / micro-flow coverage

| Existing modal or sheet | Prototype | Coverage | Note |
|---|---|---|---|
| `side-menu` | none (replaced by 5-item tab bar) | ⚪ | IA restructure — not a gap |
| `attendance-event` / `attendance-reward-history` | `isAttendance` gift box | 🟡 | **reward history** missing (P3) |
| `terms` / `term` | `auth==='terms'`, `route==='terms'` | ✅ | |
| `marketing-agreement`, `marketing-purpose-agreement` | 2 signup agreements | 🟡 | separate marketing-purpose consent missing (P3) |
| `brand-alimtalk-consent` | none | 🔴 | followed-brand AlimTalk consent (P2) |
| `channel-category`, `shopby-category-selector`, `product-category-selector` | only language/region sheet exists | 🔴 | **channel theme / category selection sheet** (P1) |
| `reservation` | reservation UI in review detail | ✅ | includes rejected-reservation state |
| `campaign-inquiry` | `chat` | 🟡 | campaign-context inquiry entry needs confirmation (❓) |
| `point-shop-purchase` | none | 🔴 | point purchase confirmation (P2) |
| `payment-receipt` | none | ❓ | unclear whether creator-facing or advertiser-facing |
| `video-list` / `video-detail` / `video-preview` | none | 🔴 | viewing my videos (P2, bundled with video-collection) |
| `influencer-profile-preview` | preview inside profile edit unconfirmed | ❓ | |
| `reviewer-analyze` | `auth==='analyzing'` | ✅ | |
| `affiliate-link-issued` | none | 🔴 | (P1, affiliate bundle) |
| `campaign-register-request`, `consultation-form`, `mall-partner-form` | none | 🔴 | **advertiser-conversion / partnership inquiry** — reachable from My page "광고 문의" (P2) |
| `campaign-preview`, `product-preview`, `home-banner` | home banner exists | 🟡 | banner modal & product preview missing (P3) |

---

## 5. UX state coverage

| State family | Existing | Prototype | Verdict |
|---|---|---|---|
| Application/selection: waiting · selected · not selected · cancelled | ✅ | ✅ | ✅ |
| Inspection: awaiting approval · in review · complete · **revision requested** | ✅ | ✅ (`수정 요청`, `반려` present) | ✅ |
| Reservation: needed · confirmed · **rejected** · cancelled | ✅ | ✅ | ✅ |
| Shipping: awaiting dispatch · tracking no. · courier link-out | ✅ | 🟡 (no courier link-out) | 🟡 |
| Proposals: awaiting selection · selected · confirmed · not selected · rejected · expired | ✅ | 🟡 (only some states) | 🟡 |
| Settlement: scheduled · processing · **carried over** | ✅ | 🟡 (carry-over copy only, no history screen) | 🟡 |
| Upload: in progress · over 500MB · wrong format · failed | ✅ | 🔴 | 🔴 P1 |
| Loading / skeleton | ✅ (`skeleton.component`, `campaign-card-skeleton`) | 🔴 (zero occurrences of loading/skeleton) | 🔴 P2 |
| Empty states | ✅ (`empty-state.component`) | 🟡 (partial, e.g. "신청한 캠페인이 없어요") | 🟡 P2 |
| Network error · retry | ✅ | 🔴 (zero retry affordances) | 🔴 P2 |
| No search results | ✅ | ❓ | ❓ |
| Logged-out gate ("로그인이 필요한 서비스입니다") | ✅ | ❓ | ❓ P2 |
| Unverified-email banner | ✅ | ✅ | ✅ |
| Channel not connected | ✅ | ✅ | ✅ |
| Penalty permanent suspension / account restricted | ✅ | 🔴 | 🔴 P2 |
| Withdrawal grace period (`withdraw-grace-overlay`) | ✅ | 🔴 | 🔴 P2 |

---

## 6. Form comparison

| Form | Existing fields / behavior | Prototype | Gap |
|---|---|---|---|
| Signup | email · password (8+ with validation) · confirm · KCP identity · terms | same | — |
| Campaign application | channel selection · shipping address (`회원정보와 동일`) · applicant message · **raw-footage submission** · 4 agreements · privacy consent | address · channel · message · 4 agreements | raw-footage toggle, itemized consent expansion, failure error, **completion screen** |
| Demand-survey participation | (legacy Angular only) | n/a — retired | Not a gap: retired product-wide, folded into 제안/협업 |
| Group-buy participation | product · review guide · apply | none | entire form |
| Payout account | bank · holder · account no. · 13-digit resident reg. no. | same + validation copy | — |
| Payout request | — (existing product pays out automatically) | amount input · presets · 3.3% withholding · net amount | prototype is ahead ⚠️ needs product decision |
| Operating channel registration | Instagram / YouTube / TikTok / NaverTV / **Naver Clip URL** + theme selection | connect CTA only | URL input · theme selection · guide · reset |
| Create inquiry | type · title · body · email | AI chat input | type selection · list · edit |
| Profile edit | bio · channels · categories | same | — |
| Account deletion | consent checkbox on notice | confirm sheet | destroyed-data list · restriction conditions · consent |

---

## 7. End-to-end journey gaps

### A. Campaign participation
1. Discover ✅ → 2. Detail 🟡 (no recommendations / store contact) → 3. Apply 🟡 (raw footage, consent expansion) → 4. **Application complete 🔴** → 5. Selection result ✅ → 6. Read guide ✅ → 7. Submit 🟡 (no upload errors) → 8. Inspection ✅ → 9. Revision requested 🟡 (no advertiser message / re-upload screen) → 10. Completion ✅ → 11. Settlement 🟡 (**no payout history**)

### B. Creator-initiated brand proposal
Brand zone ✅ → Brand detail 🟡 → Write proposal ✅ → **Sent-proposal list 🔴** → Advertiser response 🟡 → **Confirm → collaboration transition 🔴** → Collaboration detail 🟡

### C. Demand survey — **retired, not a gap**
Retired product-wide per `2026-08-11-cross-role-consistency-design.md` §5.3 — the advertiser prototype folded it into 제안 관리 and admin dropped it in `ef26a46`. The creator prototype must NOT gain it; the equivalent creator journey is the proposal flow (브랜드 존 → 제안 → 제안함).

### D. Group buy — **entirely 🔴**
List → detail → apply → pending approval → raw-footage submission → inspection → **dedicated sales-link issuance** → sales & commission.

### E. Affiliate — **entirely 🔴**
Tab entry → product list → link issuance (modal) → my-link management → commission settlement → ad-disclosure guidance.

### F. Account recovery — **🔴**
Failed login → find email / reset password → completion. Only a dead link exists.

---

## 8. UI/UX design backlog

### P0 — a core journey is broken

| # | Screen | Module | Existing reference | How the creator reaches it | Key content | Primary CTA | Required states | Suggested prototype location |
|---|---|---|---|---|---|---|---|---|
| 1 | **Application complete** | Campaigns | `campaign-apply-form.page.ts` `'신청이 완료되었습니다.'` | after submitting the form | application summary · announcement date · what's next | Go to my collaborations | success / failure (`'신청 실패'`) | `route:'applyDone'` |
| 4 | **Received / sent proposal list** | Proposals | `my-page/demand-proposal` | MY · notifications | received/sent tabs · status badges · response deadline | Accept / Reject | awaiting selection · under review · selected · not selected · confirmed · rejected · expired | `route:'proposals'` |
| 5 | **Payout history** | Settlement | `my-page/settlement/settlement.page.ts` | MY > settlement | total received to date · accrued for next payout · per-item history | Manage payout account | scheduled / processing / carried over | `route:'payoutHistory'` |

Note: revision-request response (rejection reason + re-upload) is already covered by the `review` route (review-detail screen, `openReview`/`main.dc.html`) — not a gap; do not rebuild it.

### P1 — major capability missing

| # | Screen | Module | Existing reference |
|---|---|---|---|
| 7 | Password reset (request → mail notice → reset → done) | Auth | `pages/find-password` |
| 8 | Find email | Auth | `pages/find-email` |
| 9 | Operating-channel registration detail — Naver Clip URL input + "how to get the clip URL" guide + theme selection + reset confirm | Account | `my-page/account` |
| 10 | Channel theme / category selection sheet | Account | `modals/channel-category` |
| 11 | Group-buy list · detail · apply | Group buy | `pages/group-buy` |
| 12 | My group-buy participation (raw-footage submission · sales link) | Group buy | `my-page/my-group-buy` |
| 13 | Affiliate product list · detail | Affiliate | `pages/affiliate` |
| 14 | My affiliate (links · commission · ad disclosure) + link-issued modal | Affiliate | `affiliate-my`, `affiliate-link-issued` |
| 16 | Three upload states (in progress · over 500MB · wrong format) | Shared | `my-review-detail`, `my-group-buy` |
| 17 | Cancel-participation / cancel-reservation confirm modals | Review | `'리뷰 참여를 취소하시겠습니까?'` |
| 18 | Campaign detail enrichment — image expand, store contact, recommendations | Campaigns | `campaign-detail.page.html` |
| 19 | Shipment tracking (tracking no. → courier site) | Review | `'택배사 사이트로 이동'` |

### P2 — supporting flows

20. Visit-type campaign **map view** (`client-web/app/map`)
21. Sort & filter drawer for the campaign list
22. Inquiry list / detail / edit + inquiry type selection
23. My review activity (video collection) + video detail & preview modals
24. Followed-brand AlimTalk consent modal + open-campaign badges
25. Point-shop purchase confirmation modal + sort & category
26. Penalty score gauge · policy notice · permanent-suspension state
27. Account-deletion notice (destroyed data · restrictions · consent) + withdrawal grace overlay
28. Advertiser-conversion inquiry (`campaign-register-request`, `consultation-form`, `mall-partner-form`)
29. Brand detail section tabs · follow toggle · empty state
30. My-dashboard profile completeness gauge
31. Loading / skeleton · network error & retry · logged-out gate

### P3 — polish

32. No-search-results state 33. Attendance reward history 34. Separate marketing-purpose consent 35. Home banner modal 36. Product preview

---

## 9. Target prototype screen tree

```
Creator
├── Auth
│   ├── Splash [COVERED] · Login [COVERED] · Signup [COVERED] · Terms [COVERED]
│   ├── Find Email [MISSING]
│   └── Reset Password [MISSING]
├── Onboarding  welcome·connect·analyzing·draft·live [COVERED]
├── Home [COVERED]
├── Discover
│   ├── Campaign / Brand mode [COVERED]
│   ├── Sort & Filter Sheet [MISSING]
│   └── Map View [MISSING]
├── Campaign
│   ├── Detail [PARTIAL] (image expand · store contact · recommendations)
│   ├── Apply [PARTIAL] (raw footage · consent expansion)
│   └── Apply Done [MISSING]
├── Demand Survey [MISSING]
│   ├── Detail · Rate Proposal Form · Confirm Sheet · Done
├── Group Buy [MISSING]
│   ├── List · Detail · Apply · My Participation (footage submission · sales link)
├── Affiliate [MISSING]
│   ├── List · Detail · My Links · Link Issued Modal
├── Brand
│   ├── Brand Zone [COVERED] · Brand Detail [PARTIAL] · Proposal [COVERED]
├── My Collaboration
│   ├── List [PARTIAL] (tab structure)
│   ├── Collab Detail [PARTIAL]
│   ├── Revision Request [COVERED] (via Review Detail — `route:'review'`)
│   ├── Review Detail [PARTIAL] (courier tracking · upload errors)
│   ├── Cancel Participation Modal [MISSING]
│   └── Past [COVERED]
├── Proposals (received / sent) [MISSING]
├── Settlement
│   ├── Account [COVERED] · Payout Request [COVERED]
│   └── Payout History [MISSING]
├── Points  History [COVERED] · Shop [PARTIAL] · Purchase Confirm [MISSING]
├── Community  list · supporters · article [COVERED]
├── Events / Guide [VERIFY]
├── Attendance [COVERED] · Reward History [MISSING]
├── Support  chat · help · notice [COVERED] · Inquiry CRUD [PARTIAL]
└── MY
    ├── Creator Profile [COVERED] · Space [PARTIAL] · Profile Edit [COVERED]
    ├── Channel Connect [PARTIAL] · Category Sheet [MISSING]
    ├── Saved [PARTIAL] · Notifications [COVERED] · Noti Settings [COVERED]
    ├── Penalty [PARTIAL] · Video Collection [MISSING]
    ├── Withdraw [PARTIAL]
    └── Advertiser Inquiry [MISSING]
```

---

## 10. Final summary

| Item | Count |
|---|---|
| 1. Creator routes discovered | **74** (Angular) + 5 client-web-only |
| 2. Major screens | **58** |
| 3. Modals / sheets / micro-flows | **27** modals + numerous sheets and inline flows |
| 4. ✅ Fully covered | **21** screens |
| 5. 🟡 Partially covered | **20** screens |
| 6. 🔴 Not covered | **17** screens + 8 modals |
| 7. ❓ Needs manual verification | **5** |
| 8. ⚪ Excluded as implementation-only | **4** (3 callbacks, side-menu) |
| 9. **Estimated UI/UX coverage** | **~62%** (21 full + 20 partial × 0.5 = 31 of 50 in-scope screens) |

### Top 10 highest-priority missing screens
2. Campaign application complete
3. Received / sent proposal list and detail
4. Payout history
5. Password reset
6. Group buy — 3 screens (list · detail · my participation)
7. Affiliate — 3 screens (list · detail · my links)
8. Operating-channel registration detail (Naver Clip URL + theme selection)
9. Three upload states · cancel-participation confirm modal

(Revision-request response is already covered via Review Detail — `route:'review'` — not a gap.)

### Gaps by category
- **Missing detail screens** — group-buy detail, affiliate product detail, payout history, proposal detail, my review activity
- **Missing forms** — group-buy participation, channel URL registration, create inquiry (with type selection), password reset
- **Missing campaign flows** — application complete, closed-campaign state, recommendations
- **Missing content-submission flows** — three upload errors, raw-footage URL registration, cancel participation (revision re-upload is already covered via Review Detail — `route:'review'`)
- **Missing settlement UI** — payout history and its scheduled / processing / carried-over states
- **Missing profile & account UI** — channel theme selection, clip-URL guide, profile completeness, account-deletion notice
- **Missing modals** — AlimTalk consent, point purchase, link issued, video viewer, category selector, three advertiser-inquiry forms
- **Missing UX states** — loading/skeleton, network error & retry, no search results, account restricted, withdrawal grace
- **Missing navigation / IA** — map view (deferred). Affiliate entry point is void (module excluded); three-way my-campaigns tabs and the sort/filter drawer are won't-do design choices.

### Recommended design order
1. **Close the broken journeys** (P0 1–6) — six screens, insertable without reworking existing ones.
2. **Auth recovery + channel registration** (P1 7–10) — the new-user intake path.
3. **The three revenue modules** (P1 11–14) — group buy and affiliate; independent, so they can be designed in parallel.
4. **Harden the submission pipeline** (P1 15–19) — upload, cancellation, shipment tracking.
5. **Supporting flows + shared states** (P2) — do loading, error, and empty states once as design-system components.
6. **Polish** (P3).

### ❓ Items needing manual verification
- The prototype's `events` tab is labelled "가이드" (guide). Confirm whether it is the same surface as `client-web /(tabs)/events` (events + articles) or a different one.
- The prototype's **payout request** (amount input, withholding calculation) has no counterpart in the existing product. Confirm whether the policy changed from automatic payout to request-based, or whether the prototype ran ahead.
- Unclear whether `payment-receipt` is creator-facing or advertiser-facing.
- Confirm whether `campaign-inquiry` (campaign-context inquiry) is intended to be replaced by the prototype's AI chat.
- `influencer-profile-preview` — could not confirm whether a preview exists inside the prototype's profile edit.
