유형: 현황 (프론트 A정합 배선 매핑 — A 라우트 전수 기준·A-시각 검증)
최종 업데이트: 2026-07-07 (submanager 74라우트 전수집계 / manager 사이드모달 정정 / dev 8라우트 실체판정 반영 — vote·live·live/[uid]·opinion-poll·daily·explore-2·feedback·m/builder)
프론트 A정합 배선 매핑 (frontend-a-parity-map)
목적: A(www.punkpoll.com)의 모든 라우트/링크를 B(v2dev)와 1:1 시각/구조 대조해, 각 페이지가 A의 UI/UX 표현 그대로인지 판정한다. "완료" = A 원본 페이지와 나란히 놓고 시각적으로 일치(A-시각 검증) 통과분만. (컴포넌트 존재·데이터 옴 만으로는 불충분.)
A 소스 = 실측: punkpoll_web(Next 14 app router) page.* 파일 전수 = 총 74 라우트. 추측 금지.
상태 범례: ✅완료(A-시각 검증 PASS·배포) / 🔧진행(수정중 or 백엔드 대기) / ⏳페이즈드(고급/후반) / ❌미착수·미검증
갭유형: 데이터표현 / 레이아웃 / 탭 / 진입(배선) / 상호작용. 담당: 데이터=백엔드 · 레이아웃/탭/진입/상호작용=프론트(dev/dev2).
A 커버리지 실측 (2026-07-07) — 매핑 ≠ 검증
| 구분 | A 라우트 | 맵 행(매핑) | A-시각 PASS(완료) |
| ① 핵심 사용자 | 29 | ~13 | 7 |
| ② 푸터/정적 | 22 | 0 | 0 (후반) |
| ③ 어드민 | 21 | 0 (기능 별도완료) | A-시각 미포함 |
| ④ 인증/시스템 | 2 | 0 | 0 (M4 등) |
| 합계 | 74 | ~13 | 7 |
정직한 답(jegwon '어느정도 커버?') — 두 지표 구분:
- A-시각 검증 완료(진짜 "A UI/UX 그대로 확인") = 7건 → 핵심29의 ~24%, 전체74의 ~9%.
- 맵에 행으로 존재(매핑) = ~13건 → 핵심29의 ~45%, 전체74의 ~18%.
- 핵심 결론: "확인 완료"는 아직 핵심 페이지의 1/4(7건) 수준. 나머지 핵심22 + 정적22 + 어드민(별도) + 인증2 는 미검증/후반. 아래 ①표를 라우트별로 A-시각 검증하며 ✅로 수렴한다.
- 갱신(2026-07-07 정찰 완결): 미검증 12종 전수 실체판정(dev 8+dev2 4·A실코드 근거) → 핵심 29 = 라우트 분류 100%. 제외 3(explore-2·daily·citizen) / 완료 3(vote·l/·panel) / 페이즈드 1(m/builder) / 실작업 잔여 5건: live·opinion-poll(정적, dev 착수중)→live/[uid] 대조→feedback 신규→punk/purchase(KCP ~550LOC·backend2 게이트·정찰 발견 신규 실갭).
① 핵심 사용자 페이지 29 (A-시각 검증 우선)
| A 라우트 | A 소스 컴포넌트 | B 상태 | 갭유형 | 담당 | A-시각 검증 |
/ 홈 | app/page.jsx(6줄) | ✅ | — | dev | 실체판정(2026-07-07 dev): A /=redirect(routes.home='/explore') 6줄 — 별도 홈 페이지 없음. B 동일(redirect /explore) = A정합 확인 완료(기존 🔧는 과잉 표기) |
/explore 탐색 | (pages)/explore | ✅ | — | dev | PASS (jegwon 확인·품질기준) |
/explore-2 탐색변형 | (pages)/explore-2 | 🚫레거시 | — | dev | 실체판정(2026-07-07 dev 정찰): 레거시/데드 — 포팅 제외. explore 의 CSR 변형(Explore2 35줄), 진입링크 0·routes.js 미정의. 근거: app/(pages)/explore-2/page.jsx |
/search 검색 | (pages)/search/page.jsx(240줄) | ⏳footer종속 | — | dev | 실체판정(2026-07-07 dev): footer 가이드/약관 페이지 검색기(하드코딩 searchablePages·클라 키워드매칭·진입링크 0). 결과 링크가 전부 ② footer/정적 22 페이지 → footer 트랙(컷오버 후반)과 함께 포팅(지금 하면 결과 전부 404) |
/channel 채널브라우즈 | (pages)/channel·ChannelInfo | ✅ | 레이아웃 | dev2 | PASS (#113 프로필 오버랩·통계중앙·following) |
/channel/[id] 채널상세 | ChannelProfile | 🔧 | 레이아웃(미세) | dev2 | 메타라인·설문수 미세차(CLONE_MATRIX 기록) |
/channel/[id]/manager 관리자허브 | Channel manager tabs | 🔧 | 탭+레이아웃 | dev2+backend4 | 진입 ✅(#108) / 허브 풀(대시보드·팔로워·분석·blockchain·participants·편집) A-시각 미검증 |
/channel/[id]/edit 채널편집 | ChannelEditForm | 🔧 | 레이아웃 | dev2 | 백엔드 #75 / 프론트 A-시각 미검증 |
/channel/create 채널만들기 | ChannelForm | 🔧 | 레이아웃+기능 | dev2+backend1 | 레이아웃 진행(비업로드) / 이미지 업로드+크롭 엔드포인트 대기 |
/poll/[id] 설문상세 | Poll·PollDefaultInfo·PollDetailTab | ✅ | 레이아웃+탭 | dev | PASS (#111 좌측카드+#114 탭 A순서·게이팅·my-vote) |
/token/[id] 토큰상세 | Token·TokenStatistics | 🔧 | 데이터+레이아웃 | dev2+backend1 | 메타(#116) 배포 / 차트(공급분포·통계) 엔드포인트 대기 |
/user/[id] MyPage | ProfileCard·통계·탭 | 🔧 | 진입+레이아웃 | dev2 | 진입 ✅(#110) / 통계 pill 데이터 A정합(#115+#129) / 🔴 실세션(jegwon 2026-07-07): 숫자는 나오나 페이지 전체 표현이 A와 다름 — pill만 봤지 페이지 껍데기(ProfileCard·탭·섹션·아바타·배너) A대조 미실시 → dev2 전면 재대조 / 토큰도넛·이력링크 P1 |
/builder 빌더진입 | Poll(accordionItems·stepType) | ✅ | 레이아웃 | dev | PASS 구조 (#117 3플랫→A 5스텝 아코디언+스텝네비) |
/builder/poll 설문빌더 | Poll builder | 🔧 | 기능 | dev | B1 구조 라이브 / B2 리워드·B3 고급(예치·배포채널·유권자등록) 페이즈드 |
/builder/ai-survey AI설문 | AiSurveyBuilder | ❌ | 미착수 | dev | A AI 설문생성 — 미매핑 |
/m/builder/poll 모바일빌더 | m/builder/poll·MobileLogInPage | ⏳웹뷰전용 | 진입 | dev | 실체판정(2026-07-07): 웹뷰/챗봇 전용 헤드리스 로그인 진입 셸(20줄) — routes.builderM, MainContent 가 Header/Footer 숨김. 포팅 = 챗봇/웹뷰 연동(M4) 시점 페이즈드 |
/mWallet 지갑 | MWallet·SBT·History | 🔧 | 구조발산 | dev2+backend4 | 🔴 실세션(jegwon 2026-07-07): '지갑 연결' 메시지만 — WalletGate가 A 발산(non-custodial 등록). custodial 교정 승인됨(로그인=지갑 자동) / SBT표시(#105)·Receive(#130)는 교정 위에 얹힘 |
/vote 투표 | (pages)/vote·Vote.jsx(179줄) | ✅ | — | dev | 실체판정(2026-07-07): '준비 중입니다' 정적 페이지(통계 0 하드코딩) — nav 링크 있음. B 이미 픽셀 재현(D-074 라이브 대조 채택) |
/live 라이브 | (pages)/live·Live.jsx(191줄) | ✅ | — | dev | #142 MERGED(reviewer 조건부 PASS) — YouTube 히어로·현황3·기능2·준비중 배너 A재현. 우측 카드=미니(placeholder 맥락 수용, SharePollCard A-exact는 live/[uid] 트랙) |
/live/[surveyUid] 라이브상세 | app/live/[surveyUid]·SharePopupEnhanced | 🔧 | 레이아웃 | dev | #143 MERGED: 하단 프레임 3건 정합(공유 死버튼→실동작·안내 i18n·그라디언트). 잔여 = SharePollCard 561줄 A-exact(플립 카운트다운·평균색·PhoneInput 알림톡=★백엔드 EP 부재 게이트★·주최자) |
/opinion-poll 여론조사 | (pages)/opinion-poll·OpinionPoll.jsx(121줄) | ✅ | — | dev | #142 MERGED(reviewer PASS) — 통계4·기능2·준비중 배너 A재현 |
/daily 데일리 | (pages)/daily·Daily.jsx | 🚫데드 | — | dev | 실체판정(2026-07-07): 데드코드 — 포팅 제외. 진입링크 0·routes.js 미등록 고아 라우트(내용=차트+태그+폴리스트 동작하나 도달 불가) |
/citizen 시민 | citizen | ❌ | 미검증 | dev | 설문 변형 — 확인 후 매핑 |
/panel 패널 | panel | ❌ | 미검증 | dev | 패널 — 확인 후 매핑 |
/login 로그인 | Login·auth | 🔧 | 진입 | dev+backend | 인증 배선 동작 / A-시각(카카오/텔레그램 진입) 미검증 |
/l/[type]/[id] 공유딥링크 | share resolver | ❌ | 미검증 | dev | 공유링크 → 상세 리다이렉트 — 미매핑 |
/punk/purchase PUNK구매 | PunkPurchase | 🔧 | 레이아웃 | dev2+backend4 | buyPunk 백엔드 done / 구매 UI A-시각 미검증 |
/punk/purchase/return 구매완료 | purchase return | ❌ | 미검증 | dev2 | 결제 리턴 — 미매핑 |
/feedback 피드백 | (pages)/feedback·Feedback.jsx(131줄) | 🔧 | 데이터표현 | dev | #144 PASS(조건부) — 히어로(A자산)·특징4·CTA·목록 A재현. 잔여 = FeedbackQRCard 276줄 A-exact(QR 플립·★qrcode.react dep = dev2 #130 머지 게이트★) |
컴포넌트/링크레벨(라우트 아님):
- 헤더검색(#118 ✅ /explore) · MyPage진입 아바타(#110 ✅) · 채널오너진입 🔴(jegwon 2026-07-07 실세션): 채널관리 버튼 안 나옴 + 프로필메뉴 채널항목→/channel/[id]/manager 진입 안 됨. #108 배포됐으나 실세션 미표시 — ownerYn 라이브디버그(channel_admins 멤버십)+A UserMenuPanel 채널항목 대조 필요
- 설문 사이드모달 DetailSideModal: 상단 PASS(#80) / 하단 액션바(👍💬공유) 🔧 — jegwon 2026-07-07 스샷 지적. 2버그 규명(className flex override로 세로눌림 + stale prop/userLiked 미전달), dev 수정중·reviewer 재검증 예정.
- 빌더 고급(예치·배포채널/알림톡·유권자등록) ⏳ B3 · 빌더 리워드스텝 ⏳ B2(T4) · 풀 검색모달 ⏳ · 설문상세 InfoWallet ⏳
- 🔴 설문상세 모니터링 탭(jegwon 2026-07-07 스샷): #137 미니팝업 = A 축소·의도차 미승인 통과 → 재배정 = A RealtimeMonitor 풀포팅(🔴LIVE·도넛 참여율·시간대별 라인차트·문항별 실시간 결과바 + /api/monitor SSE EP). 완료=A 실화면 병렬대조.
- 각 페이지 내부 네비/버튼 링크레벨은 라우트 A-시각 검증 시 함께 대조해 이 문서에 누적.
② 푸터/정적 22 (콘텐츠 — 컷오버 후반)
footer/how-to-use(+buy-tokens·create-poll·participate·voter-verification), footer/user-guide(enterprise·government·host·marketing·participant), footer/voting-system(receipt-nft·survey-system·votenft), footer/terms-privacy(+cookie·privacy·terms), footer/support(kakao·telegram), footer/about/initiative, cookie-policy, privacy-policy = 22. 상태 ❌ 미매핑. 정적 카피/레이아웃 위주라 A-시각 우선순위 낮음 — 코어 완료 후 일괄 대조.
③ 어드민 21 (기능 별도완료·관리자전용)
admin + admin/{alimtalk,alimtalk/templates,blockchain,channels,comments,costs,gas-price,notifications,payments,reports,scheduler,settings,settings/admins,settings/api-keys,settings/costs,settings/prompts,surveys,tokens,user2,users} = 21. 백엔드·관리기능 별도 완료(backend1/backend4/dev2 admin 도메인). A-시각 매핑 미포함(사용자 페이지 아님) — 별도 admin 정합 트랙.
④ 인증/시스템 2
auth/kakao/finish(카카오 OAuth 콜백 — M4 카카오 연결 시), dev/alimtalk-progress(내부 진행 페이지).
⑤ 글로벌 네비게이션·링크·모달 인벤토리 (라우트 아님 — "모든 링크" 커버)
jegwon '모든 링크' 요구 대응. A 실측(Explore) = 글로벌 네비링크 42 + 모달 15+. 라우트표(①~④)와 별개로 헤더/푸터/메뉴/모달의 이동·트리거를 전수 기록. 각 라우트 A-시각 검증 시 이 인벤토리의 해당 링크도 함께 대조.
5-A. 헤더 네비게이션 (Header/Nav — components/common/layout/header/)
| 링크 | 목적지 | 조건 | B 상태 |
| 로고 | / (채널선택 시 /channel/[id]) | 항상 | 🔧 |
| Explore | /explore | prod | ✅ |
| Channel | /channel | 항상 | ✅ |
| Create Poll | /channel/[id]/manager | 로그인 | 🔧 |
| 검색 버튼 | 태그/검색 모달 열기 | 항상 | ✅(#131 TagLayer 풀모달, reviewer A-시각 PASS·MERGED) |
| 태그선택 | /explore?tag= | 검색모달 | ✅(#131) |
| 키워드검색 | /explore?q= | 검색모달 | ✅ 프론트(#131) / 백엔드 searchKeyword 갭(backend1 큐) |
| Vote/Live/Feedback/Opinion-Poll/Panel | 각 라우트 | dev메뉴 | ❌ (①에서 미검증) |
5-B. 유저/채널/폴 메뉴 패널 (UserMenuPanel·ChannelMenuPanel·PollMenuPanel)
| 링크 | 목적지 | 조건 | B 상태 |
| 프로필 클릭 | /user/[id] or /channel/[id]/manager | 로그인 | ✅ 진입(#110) |
| My Page | /user/[id] | 로그인 | ✅ 진입 / 🔧 레이아웃 |
| Admin | /admin (새탭) | 관리자 | 별도 admin 트랙 |
| 채널항목 | /channel/[id]/manager | 채널보유 | ✅ 진입(#108) |
| 로그아웃 | 세션종료 | 로그인 | 🔧 미검증 |
| Create Channel | /channel/create (비로그인→로그인모달) | — | 🔧 |
| Create Poll | /channel/[id]/manager (비로그인→로그인모달) | — | 🔧 |
5-C. 푸터 (Footer — 21 링크, ②정적과 연결)
How-to-use 4 · User-guide 5 · Voting-system 3 · Support 2(+이미지모달) · About/Whitepaper/Blog/X 외부4 · Legal 3 · 다크모드토글. → 전부 ❌ 미매핑(②코어 후반). 외부링크(punkpoll.io·blog·x.com)는 그대로 연결만.
5-D. 모바일 네비 (MobileNav) — 8 링크
Vote/Live 아이콘·Polls(/explore)·더보기(Feedback/Opinion-Poll/Panel/Channel/Admin)·프로필버튼(유저메뉴 팝업). B 상태 🔧 미검증(모바일 헤더 A대조 별도).
5-E. 페이지 내부 이동 링크 (라우트간)
- 채널상세: SNS 외부8(youtube/twitter/instagram/facebook/kakao/discord/telegram/external)·토큰상세·카테고리필터(
?categoryCodeKey=)·편집·관리 → 🔧 - 토큰상세: 채널상세·유저프로필·Punk info 외부 → 🔧
- MyPage: 토큰상세·폴상세·채널상세·TX explorer 외부 → 🔧
- 채널매니저: 폴상세·유저프로필·explorer 외부 → 🔧
- explore/피드백: 빌더(
/builder/poll)·채널 → ✅/❌ - 채널 사이드바(매니저): 채널상세·홈·탭이동 → 🔧
5-F. 모달/오버레이 15+ (components/modals/)
LoginModal(카카오/텔레그램)·CommonModal·Alert·ConfirmDialog·ShareModal·SocialShareModal·SharePopupEnhanced·DetailSideModal(설문사이드·상단✅#80·하단액션바 #120으로 해소·재검증中)·FollowersSideModal·SocialGraphModal·VoterResultModal·PunkpollImageModal·IpfsModal·(Klaytn)ScopeModal·CommentModal·AlimtalkTemplateSelectModal·PanelMenuModal·DistributeModal·ChartModal. → B 상태 대부분 🔧/❌ 미검증(로그인모달·사이드모달 외 A대조 필요). 각 트리거 지점은 해당 라우트 검증 시 대조.
§⑤ 요약: 네비링크 42·모달 15+ 중 A-시각 검증 완료는 헤더 Explore/Channel·프로필/채널 진입 등 소수(①의 ✅와 중첩). 대부분 라우트 검증에 종속되어 각 라우트 ✅ 전환 시 함께 대조·누적한다. = "모든 링크"가 이 문서에 등재됨(검증은 라우트별 진행).
검증 프로세스 (jegwon 확인 답)
1. 각 B 페이지를 A punkpoll_web 실코드/실페이지와 나란히 시각 대조한다.
2. 레이아웃·섹션·탭·순서·데이터표현·진입점·내부 링크/버튼이 A와 시각적으로 일치하면 reviewer A-시각 검증 PASS.
3. PASS 통과분만 "완료" 판정 → jegwon 보고. (컴포넌트 존재·데이터 옴 만으로는 완료 아님.)
4. A소스 = punkpoll_web 실코드. 추측 금지.
5. 로그인 게이트 페이지(MyPage·오너세션·지갑탭 등)는 2단 판정(reviewer 확정 2026-07-07): ⓐ ✅ 코드/배포 A정합(reviewer A대조 PASS + 배포키 실측) = 검증완료(GO) / ⓑ ⏳ 실세션 픽셀(jegwon 데모/실계정 육안 1회) = 잔여(비블로킹). 자동화 후보 = 인증 픽스처 골든 캡처.
→ 이 표(①29 라우트)를 라우트별로 A-시각 검증하며 ✅로 갱신 = A UI/UX 그대로 재현 확인 후 완료. ②③④는 코어 수렴 후 일괄. 링크레벨(페이지 내부 네비/버튼)은 각 라우트 검증 시 함께 대조해 누적.
부록: 요소 단위 클릭맵 (jegwon 구조리뷰 2026-07-07, manager-as-main)
jegwon STOP-MODE 구조 재점검. manager 메인, A 실코드로 요소별 클릭→목적지 확정. reviewer/dev2 교차검증. 팀 착수 정지 — 그린라이트 시 아래 갭 교정.
A-1. 헤더 네비 (비로그인/공통) — A 실코드 Header.jsx·Nav.jsx 확정
| 요소 | 목적지 | 근거 |
| 로고 | 홈(/→routes.home=/explore) | Header.jsx:50 href="/" |
| 채널명(있을시) | 채널 상세 | Header.jsx:69 routes.channel.detail |
| 검색 아이콘 | 검색창+태그 노출, 엔터→검색결과 | 검색 모달(태그 다수) |
| 태그 클릭 | 해당 태그 설문/토큰 | — |
| Polls | /explore | Nav.jsx:190 routes.home |
| 채널 | 채널 브라우즈 | Nav.jsx:218 routes.channel.explore |
| Poll 만들기 | 개인채널 관리자 빌더 | Nav.jsx:70/111 routes.channel.manager |
A-2. 로그인 영역 드롭다운 — A 실코드 UserMenuPanel.jsx 확정
| 요소 | 목적지 | 근거 |
| 프로필 이미지 | 마이페이지(routes.user 본인) | :68 handleProfileClick(본인→user) |
| 지갑 | 드래그 모달(WalletModal) 페이지 아님 | :82 UserWallet→WalletButton→WalletModal |
| My Page 버튼 | 마이페이지 | :86 routes.user |
| 관리자 | 관리자 페이지 새 탭(role 게이트) | :95 window.open(routes.admin,_blank) |
| 내 채널 리스트 각 채널 | 그 채널 매니저 페이지 | :114 routes.channel.manager (상세 아님) |
| 로그아웃 | 소셜별(카카오/텔레그램) 라벨+아이콘 | :139-159 messengerType 분기 |
| B 갭 | ⓐ지갑 /mwallet 페이지→모달 ⓑ로그아웃 단일→소셜별 | dev2 배정 |
A-3. 설문 사이드 패널 — A 실코드 DetailSideModal/VoteButton/ShareButton/ChannelProfile 확정
| 요소 | 목적지 | 근거 |
| 새창열기 | 설문 상세 이동 | DetailSideModal:131 Link routes.poll |
| 링크복사 | 상세 URL 복사(HOST/poll/{uid}) | :146 handleCopyClipBoard |
| Vote | 로그인→sendMeJoinSurvey(챗봇 참여메시지) / 비로그인→로그인모달 | VoteButton:30-36 |
| Vote 노출조건 | voteYn=N && (대기\ | 진행)만. 대기시 안내 Alert. 이미참여/종료 숨김 | VoteButton:43-46 |
| 좋아요 | 토글(POST /like). 비로그인→로그인모달 | ShareButton handleLike:154 |
| 댓글 | 댓글 입력창(CommentModal) | ShareButton handleComment |
| 공유 | 공유 모달(ShareModal) | ShareButton |
| 팔로우 | 채널 팔로우/언팔 토글. 비로그인→로그인모달. 채널 발행자만 렌더(개인 발행자는 팔로우 버튼 없음) | ChannelProfile:67 creatorSe 게이트 |
| 채널 정보 영역 | 채널 상세(개인이면 유저 페이지). 아바타 shape 분기(채널=rounded-xl·개인=rounded-full) | ChannelProfile :39-47 creatorSe 분기 |
| B 갭 | Vote 버튼 /live 이동→sendMeJoinSurvey 챗봇 방식 | dev2 VoteButton 교정 |
누적 교정 백로그 (그린라이트 시)
1. dev2 — 지갑: /mwallet 페이지 → WalletModal 드래그 모달(콘텐츠 재사용, 트리거만)
2. dev2 — 로그아웃: 단일 라벨 → 소셜별(카카오/텔레그램) 라벨+아이콘 (ProfileMenu)
3. dev2 — Vote: /live 이동 → sendMeJoinSurvey(챗봇 참여메시지 전송)
A-4. 채널 브라우즈(/channel) — A 실코드 app/(pages)/channel/page.jsx 확정
| 요소 | 목적지/동작 | 근거 |
| 채널 만들기 | /channel/create. 비로그인→로그인모달(복귀경로 create) | onClick routes.channel.create·setIsLoginModalOpen |
| Polls / 최근 탭 | 정렬 재조회. Polls=인기(poll)/최근=최신(new) | SORT_TABS→useLoadPolls sortOption |
| 태그(카테고리) | 카테고리 필터(categoryCodeKey). 토글식(재클릭 해제) | onCategoryClick·selectedCategory |
| 채널 카드(전체) | 채널 상세(routes.channel.detail). 카드 전체 Link | channelList.map Link |
| 팔로우 버튼 | 팔로우/언팔 토글(POST /api/channel/follow). 비로그인→로그인모달. e.preventDefault로 카드링크 분리 | handleSubscription |
목적지 페이지(/channel/create): 커버사진·채널명·URL·카테고리·소개·링크8(웹/유튜브/트위터/인스타/페북/카톡채널/디스코드/텔레그램)·저장.
A-5. 채널 상세(/channel/[id]) — A 실코드 ChannelInfo.jsx+Channel.jsx 확정
| 요소 | 목적지/동작 | 근거 |
| 채널 전환/채널 관리 버튼 | ownerYn=Y만 노출. 프로필명≠채널명→'채널 전환'(setProfile 컨텍스트 전환)→라벨 '채널 관리'로 변경→클릭시 routes.channel.manager | ChannelInfo:347-366 |
| 1토큰 | 채널 발행 토큰 페이지(routes.token(tokenNoList[0])) | :286-296 |
| 토큰 보유자 | 우측 사이드 패널(SideModal) 보유자 테이블(주소·토큰수·더보기) | :298-308 openSideModal('tokenholders') |
| 팔로워 | 우측 사이드 패널 팔로워 테이블(주소·투표수) | :310-315 openSideModal('followers') |
| 참여자 | 우측 사이드 패널 참여자 | :280 openSideModal('participants') |
| 편집 | 채널 편집 페이지(routes.channel.edit). ownerYn=Y만 | Channel.jsx:65-72 |
| 공유 | 공유 모달(QR+카카오톡+URL복사) | Channel.jsx:74 ShareButton shareOnly |
| 태그 | 채널 설문 태그 검색(/channel/{uid}/tags) | Channel.jsx TagList |
| 설문 | 사이드 패널(다른 페이지 동일) | Channel.jsx PollList |
| 카테고리 칩 | 그 카테고리로 채널 브라우즈(exploreCategory) | :322-333 |
| SNS 외부링크 8 | 새탭(웹/유튜브/트위터/인스타/페북/카톡채널/디스코드/텔레그램) | :190-269 |
| B 갭(Task#17) | ⓐownerYn 라이브 미해결(channel_admins) ⓑheader currentProfile 컨텍스트 배선 → :348 게이트+:363 라벨분기 태워야 | dev2 |
A-6. 마이페이지(/user/[id]) — A 실코드 page.jsx+ProfileCard+TokenHistory+TokenHoldings 확정
| 요소 | 목적지/동작 | 근거 |
| 팔로잉 | 우측 사이드 패널 팔로우 채널 리스트(ChannelProfile 목록·더보기) | ProfileCard:199 onOpen→:217 SideModal |
| 태그 | 유저 설문 태그 검색. searchType 01(내페이지 참여)/02(타인 배포받음) | page.jsx:47 TagList /user/tags/{id} |
| 설문 카드 | 우측 사이드 패널 설문 정보(DetailSideModal, 동일) | PollListForMyPage |
| 채널명 | 채널 페이지 이동 | poll card |
| 좋아요/댓글/공유 | 동일 인터랙션 | ShareButton |
| 토큰 탭 | TokenHistory(내페이지만)+TokenHoldings 도넛 | page.jsx:59-67 |
| 토큰 컬럼 | 해당 토큰 페이지(routes.token, PUNK=token(0)) | TokenHistory:84·136 |
| 활동 컬럼 | txHash 있으면 Avalanche C-chain 블록탐색기 새탭 / 없으면 설문 상세 | TokenHistory:206-234 |
| 토큰 보유현황 토큰 | 토큰 페이지(handleTokenClick→routes.token) | TokenHoldings:79-81 |
| B 갭(🔴) | 클릭맵 확정 / 페이지 표현(ProfileCard 레이아웃·탭·섹션·아바타·배너) A정합 dev2 전면 재대조 별도 | dev2 |
A-7. 채널 관리자 허브(/channel/[id]/manager) — A 실코드 전건 검증 (manager+Explore 5에이전트)
구조: 좌측 Sidebar 가 actionMenu 스위치 → 우측에 해당 뷰 렌더(page.jsx renderActionMenu). 비로그인시 홈 리다이렉트.
Sidebar(좌측 메뉴)
| 요소 | 동작 | 근거 |
| 만들기 드롭다운 | Poll 만들기(/builder/poll)·Poll AI(/builder/ai-survey)·라이브 투표(?type=live)·토큰 만들기(/builder/token) → 우측 Builder 뷰 | CREATE_MENU_LIST·handleCreateClick |
| 대시보드 | Dashboard 뷰 | SIDE_MENU_LIST |
| 배포 | Voters 뷰 | 〃 |
| 블록체인 TX | BlockChain 뷰 | 〃 |
| 리포트 | Reports 뷰 | 〃 |
| 빌더 | Builder 뷰(builderData 있을 때만 노출) | 〃 |
| PUNK 구매와 지갑 | Punk 뷰 | 〃 |
| 채널 페이지 | router.push(channel.detail) 페이지 이동 | handleClickMenu detail |
| 설정→매니저 | Managers 뷰 | SETTING_LIST |
| 채널 공개/비공개 토글 | POST channelVisibility (참여자>0일 때만) | Sidebar:314·323 |
| 채널 삭제 | ConfirmDialog→DELETE (참여자==0일 때만)→홈 | Sidebar:112-128 |
대시보드(Dashboard) — 설문 관리 그리드
| 요소 | 동작 | 조건 |
| 상태 필터탭 | 전체/준비완료/진행중/종료/작성중/숨김 | — |
| 그리드/리스트 토글 | viewMode | — |
| 브라우즈 노출/숨김 토글 | PATCH mySurvey/visibility | — |
| 수정 | 빌더/액션메뉴 진입 | — |
| ⋮ 케밥 | 제목·커버수정/알림톡템플릿설정/Poll복사/Poll정보(사이드모달)/삭제(voteCount==0)/브라우즈숨김·해제(voteCount>0) | — |
| 카드·커버 클릭 | 설문 정보 사이드모달(DetailSideModal) | — |
| 태그 | 태그 필터 | — |
| 투표 버튼 | sendMeJoinSurvey 챗봇 | 진행중·미투표 |
| 참여 진행바 | 결과 뷰 | 진행중 |
| 배포 버튼 | ShareModal/DistributeModal | 작성중 아님 |
| 모니터링 버튼 | RealtimeMonitor | 진행중 |
| 참여자 아바타 | participants 모달 | — |
배포(Voters) — 탭 연락처/발송내역/참여자/토큰보유자/팔로워
| 요소 | 동작 |
| 전화번호부 생성/편집(저장·취소) | createPhoneBook/modify·delete |
| 전화번호부 행 선택 | 상세 아코디언 |
| 전화번호 추가·삭제·모두삭제·저장 | updatePhoneNumber |
| 배포(발송) | 확인모달→sendPhoneDistribution(알림톡) |
| 참여현황·미참여자 재발송 | participation-status·resend-non-participants |
| 참여자/토큰보유자/팔로워: 정렬헤더(마지막투표·토큰·투표)·프로필→/user·주소→블록탐색기(avax/mina)·검색 | — |
블록체인 TX(BlockChain) — 탭 Poll배포/PUNK트랜잭션/토큰배포/토큰트랜잭션
| 요소 | 동작 |
| 내용·이벤트명 | /poll/{uid} 또는 /token/{uid} |
| 프로필 | /user/{uid} |
| 계정주소 | avax.network/c-chain/address(0x)·minascan(mina) 새탭 |
| TX 해시 | avax.network/c-chain/tx(0x)·minascan/tx 새탭 |
| 검색·새로고침·페이지네이션·더보기 | — |
리포트(Reports) — 탭 개요/분석
| 요소 | 동작 |
| 기간 필터 | 1주(7d)/1개월(30d)/기간설정(custom→시작·종료 DatePicker) |
| 통계카드(총설문·총참여·토큰홀더·총구독자) | 표시전용 |
PUNK 구매와 지갑(Punk)
| 요소 | 동작 |
| 지갑 버튼 | WalletApp 드래그 모달 |
| 패키지 라디오 | 50/100/1000/5000 PUNK |
| 결제수단 | 신용카드/계좌이체(NHN KCP) |
| 충전 | 로그인체크→createOrder→KCP팝업→approvePayment→성공모달 |
| 환불규정 | 모달 |
설정·매니저(Managers)
| 요소 | 동작 |
| 매니저 초대 | 카카오 공유 초대(callback /api/sysres/cued) |
| 매니저 이름 | /user/{uid} |
| 삭제 | ConfirmDialog→비활성화 |
B 갭(Task#17): 이 허브 전체가 채널 오너 진입에 종속. ownerYn(channel_admins)+currentProfile 컨텍스트가 A대로 배선돼야 진입·표시. 각 뷰 표현(레이아웃/차트/테이블) A정합은 dev2/backend 재대조 별도.
A-8. explore(홈 피드) — A 실코드 PollList·PollCard·CardActions·CardInfo·CardChannelInfo
| 요소 | 목적지/동작 | 조건 | 근거 |
| 태그 필터 | routes.tag.explore(tag) → /explore?tag= | — | TagList:54,78 |
| 태그 Clear(×) | 쿼리 제거 | tag/검색 활성 | TagList:54 |
| 설문 카드 클릭 | DetailSideModal(사이드 패널) | — | PollCard:94-108 |
| Vote 버튼 | sendMeJoinSurvey 챗봇 / 비로그인 로그인모달 | 진행중·미투표 | CardInfo:33-103 |
| 진행률 바 | 결과 탭 스크롤 | 진행중 | CardInfo:112 |
| 종료 결과 버튼 | 결과 탭 | 종료 | CardInfo:141 |
| 좋아요 | POST like (로그인 필수) | — | CardActions:158 |
| 댓글 | CommentModal | — | CardActions:208 |
| 공유 | ShareModal | — | CardActions:213 |
| 채널명·아이콘 | routes.channel.detail | — | CardChannelInfo:8 |
| +더보기 | 무한스크롤 페이지네이션 | !isEndReached | PollList:191 |
A-9. 설문 상세 전체(/poll/[id]) — PollDetailTab·PollDefaultInfo·ResultDetail·ParticipantsDetail·ChannelProfile
| 요소 | 목적지/동작 | 조건 | 근거 |
| 상단 Vote/좋아요/댓글/공유 | 사이드패널과 동일(VoteButton·ShareButton) | — | — |
| 탭: 결과 | ResultDetail | resultOpenDate 이후 or 오너 | PollDetailTab:50-70 |
| 탭: 문항 | QuestionsDetail | 항상 | 〃 |
| 탭: 참여자 | ParticipantsDetail | 항상 | 〃 |
| 탭: 내 투표 | QuestionsDetail(myResult) | voteYn=Y·로그인 | PollDetailTab:148 |
| 탭: 크레딧 | CreditDetail | 항상 | 〃 |
| 모니터링 버튼(탭) | RealtimeMonitor 팝업 | type=button | PollDetailTab:177 |
| 결과 차트타입 | pie/bar 등 전환 | surveyType≠04 | ResultDetail:188 |
| 참여자 CID 링크 | VoterResultModal | cid≠비공개 | ParticipantsDetail:169 |
| 하단 채널명/팔로우 | channel.detail / follow(로그인) | creatorSe=channel | ChannelProfile:38-89 |
| 리워드 토큰 링크 | /token/{rewardTokenNo} | 종료 or voteYn=Y | PollDefaultInfo:109 |
A-10. 토큰 상세(/token/[id]) — Token.jsx·TokenStatistics·DeployTable·TokenTransactionTable
| 요소 | 목적지/동작 | 조건 | 근거 |
| 채널명·이미지 | routes.channel.detail | — | Token:228 |
| 팔로우/언팔 | POST follow (비로그인 로그인모달) | — | Token:284-310 |
| 채널 전환/관리 | manager or setProfile(전환) | ownerYn=Y | Token:262-281 |
| 공유/좋아요/댓글 | ShareButton(모달) | 좋아요 로그인 | Token:206 |
| 탭: 배포내역/거래내역/홀더 | DeployTable/TokenTransactionTable/홀더 | — | Token:456 |
| 검색 토글 | 테이블 필터 | — | Token:476 |
| 홀더 프로필 | routes.user | — | Token:404 |
| 배포행 이벤트명 | /token 또는 /poll | isCustomToken | DeployTable:35 |
| TX 해시 | 블록탐색기 새탭 | — | TokenTransactionTable:60 |
| 공급 분포 차트 | statistics/daily 로드 | — | TokenStatistics:65 |
A-11. 빌더(/builder/poll) — 5스텝 아코디언 Poll.jsx + Overview/Questions/DeployTime/Rewards/DeployRun + Left/RightLayer
| 스텝/요소 | 동작 | 조건 | 근거 |
| 1 커버설정 | 제목·태그추가·커버 업로드/AI생성·다음(putBasicInfo) | 설문 커버필수 | Overview·ImageUpload |
| 2 설문작성 | 질문타입선택·옵션추가삭제·카드포맷·다음(validate) | 질문≥1 | Questions·MultipleChoice |
| 3 시간설정 | 시작·종료·결과공개 DatePicker·결과공개 라디오(즉시/기간후/비공개)·다음 | 시작≠종료 | DeployTime |
| 4 리워드·토큰 | 참여인원·리워드토큰·총PUNK자동계산·SBT토글·유권자등록(투표)·다음 | 잔액 | Rewards |
| 5 배포 | 배포버튼(distribution+SSE)·익명참여·알림톡 체크(투표) | flagAll | DeployRun:66 |
| 좌측 레이어 | 새 설문·기존설문 편집·삭제 | — | LeftLayer |
| 우측 ⋮ | 정보·복사·삭제 | draft | RightLayer |
A-12. 라이브(/live·/live/[surveyUid])
| 요소 | 목적지/동작 | 조건 | 근거 |
| /live | 정적 준비중(버튼 텍스트만)+SharePollCard | — | Live.jsx:133-179 |
| /live/[uid] 로고 | router.push('/') | — | SharePopupEnhanced:93 |
| 전화번호 폼·제출 | sendAlimtalk(surveyUid, phones) | 유효·참여시간내 | SharePollCard:451-527 |
| QR 공유 | ShareModal | onShowQR | SharePopupEnhanced:120 |
A-13. PUNK 구매(/punk/purchase) — 채널허브 Punk와 동일 플로우
| 요소 | 동작 | 근거 |
| 패키지(50/100/1000/5000)·결제수단(카드/계좌) 선택 | 상태 | PunkPurchase:418-507 |
| 충전하기 | createOrder→KCP팝업→approvePayment→성공모달 (로그인) | :325 |
| 환불규정·이용약관·개인정보 | 모달/외부링크 | :533-556 |
A-14. 채널 생성/편집(/channel/create·/channel/[id]/edit) — 동일 ChannelForm
| 요소 | 동작 | 조건 | 근거 |
| 배너·프로필 이미지 업로드 | 크롭모달→getImageUrl | — | ChannelForm:218 |
| 채널명·URL(중복체크)·카테고리·소개·SNS링크 | 입력 검증 | 편집시 채널명 disabled | ChannelForm:244-347 |
| 저장 | POST/PATCH /api/channel/basicInfo → 채널 상세 이동 | 프로필필수 | ChannelForm:349,163 |
A-15. 카테고리 변형 / 정적 / 인증
| 페이지 | 상태 | 근거 |
| /panel·/opinion-poll·/vote | 정적 준비중(클릭요소 없음, nav링크만) | Panel/OpinionPoll/Vote.jsx |
| /daily | 동적 피드(TagList+PollList+PoliticalChart, today API) | Daily.jsx:14-19 |
| /citizen | 홈 리다이렉트(레거시) | CitizenPage:24 |
| /feedback | 피드백 만들기 CTA→builder.poll + FeedbackQRList | Feedback.jsx:106-125 |
| /login | 카카오/텔레그램 로그인·회원가입 토글·약관/개인정보 외부링크 | Login.jsx:42-55 |
A-16. 별도 트랙(요약 표기)
- **footer/* 정적 22**: how-to-use·user-guide·voting-system·terms-privacy·support·about. 내부 링크+외부 링크 위주. 컷오버 후반 일괄. (/search 검색기가 이 페이지들 대상)
- **admin/* 21**: 관리자 콘솔(권한 게이트). 별도 admin 정합 트랙(백엔드·기능 완료분).
전 페이지 요소단위 A-소스 커버 완료 (2026-07-07, manager-as-main + Explore 8에이전트). jegwon 지시 '이미지 없는 페이지 포함 전부'. 남은 것은 각 페이지의 '표현(레이아웃·차트·테이블) A정합' 재대조(dev/dev2/backend) — 클릭맵(구조)은 확정.