HQ Surface Matrix — 본사 모드(HQ_MANAGER) 화면별 구현 현황
기획 원문 docs/planning/11-prd-client-admin-mode.md(Page 1~22) 대비 현재 구현 현황 추적표.
코드 현황 기준이며, 신규 기능 정의가 아니라 갭 가시화용이다. 본사 모드는 apps/space
(space.linkmusic.io)의 /admin/* 라우트로 구현된다(점장 모드와 한 앱).
Overview
본사(HQ_MANAGER) PRD 는 22 페이지(Page 1~21 + Page 22 LLM 자동멘트 v1 신규)다. 현재 구현은 대시보드 · 안내방송(생성·수정·송출·예약/반복·캘린더) · CM송 관리 · 라이브러리/플레이리스트 조회 · 산하 매장(목록·상세·등록·CSV 일괄·인라인 편집) · 고객지원 · 감사 · 계정 설정까지 확장됐고, 남은 미구현은 LLM 자동멘트(외부 LLM 게이트)와 범위 밖 구독/결제뿐이다. 이 페이지가 PRD ↔ 시안 ↔ 구현 ↔ 후속 게이트의 대응을 한눈에 추적한다.
사이드바 현황:
HQSidebar10 항목(시안hq-shared.jsx §HQSidebar) 중 9 항목이 enabled (대시보드·안내방송·CM송·플레이리스트·라이브러리·매장·고객지원·감사·설정)이고,enabled: false(“준비 중”)는 LLM 자동멘트 1개뿐이다. 구독/결제 항목은 확정 스코프 제외라 사이드바에서 아예 제거됐다(감사 B3/B6 — 제외는 제거, 예정 미구현만 disabled). 코드:apps/space/src/components/hq-shell/hq-sidebar.tsx.
핵심 경계 — TTS 안내방송
TTS 안내방송 = 콘텐츠 생성·수정·재생·삭제 + 송출(전체 매장 ALL)까지 구현(#061 생성·#062 수정· #063 톤 프리셋·송출 슬라이스,
/admin/announcements). 행 [송출] → 산하 매장 전체에 fan-out → 점장 player 가 음악을 멈추지 않고 더킹(음악 감쇠) + 오버레이로 동시재생(dead-end 폐쇄, SPEC #141). 매장 개별선택(STORES · #072)·지역 지정(REGION · #144 — 시/도 17종 select, 미선택 시 제출 disabled)· 미리듣기 게이트(#073)·예약/반복 예약·캘린더(#078·#083·#139)·더킹 (#141, 본사는 default 설정만 — 감쇠 자체는 점장 player)까지 구현됐다. 방송 우선순위 큐만 미구현(후속). 즉 “안내방송을 만들어 전체/지정 매장/지정 지역에 즉시 또는 예약 송출할 수 있으며, 점장 화면에서 음악 위에 겹쳐 실제로 들린다.” 상세는 HQ Mode TTS 안내방송 참조.
표면 매트릭스
구현 상태 범례: 구현 = 동작하는 화면 / 조회만 = read-only(편집 불가) / stub = 사이드바 disabled 또는 placeholder / 없음 = 라우트·화면 자체 미존재 / 범위 밖 = 확정 스코프에서 제외.
| 화면 / 플로우 | PRD 근거 | 시안(hq-*.jsx) | 구현 상태 | SPEC / 후속 게이트 |
|---|---|---|---|---|
| 대시보드 | Page 1 | hq-dashboard.jsx | 구현 — 산하 매장 집계 실데이터 | #050 |
| 안내방송 목록 | Page 2 | (목록은 시안 별도 없음, ListToolbar 관용구) | 구현 — 목록·검색·재생·수정·삭제 | #061/#062/#063 |
| 새 안내방송 등록(생성) | Page 3 | hq-broadcast-new.jsx §Step1Content | 구현(콘텐츠 합성만) — 대상 선택·미리듣기 게이트·송출은 목록 행의 별도 송출 다이얼로그가 담당(아래 2행) | #061 |
| 안내방송 상세·편집 | Page 4 | hq-broadcast-new.jsx(편집 겸용) | 구현 — 수정(조건부 재합성)·삭제 | #062 |
| 안내방송 송출(전체 매장 ALL) | Page 2~4 인터랙션 | (확인 다이얼로그 — 삭제 idiom 미러) | 구현 — 행 [송출]→전체 매장 fan-out→점장 player 가 음악 위에 동시재생(더킹) | 송출 슬라이스 |
| 안내방송 송출 고도화(매장선택·지역·예약·미리듣기) | Page 2~4 인터랙션 | hq-broadcast-new.jsx §Step2~ | 구현 — STORES 개별선택(#072)·REGION 지역 지정(#144)·미리듣기 게이트(#073)·예약/반복 예약·캘린더(#078·#083·#139)·더킹 default(#141) | 방송 우선순위 큐만 후속(20-policy §4) |
| 방송 스케줄(캘린더) | Page 5 | hq-schedule.jsx | 구현 — /admin/announcements/schedules 반복 예약 등록·목록·취소 + 타임테이블(시각×방송 그리드, 전체 ACTIVE 규칙 집계) + 월 캘린더 탭(getHqDispatchCalendar, 월 그리드 범위만 fetch) | #078·#083·#139 / 5분 슬롯 충돌 UI 는 점장측(#109)만 |
| CM송 목록 | Page 6 | (시안 없음 — 본사 hq-stores.jsx 테이블 idiom 미러) | 구현 — /admin/commercials 목록·검색·페이지네이션·상세(/[id] 편집·삭제) | #093 |
| CM송 업로드 | Page 7 | (시안 없음) | 구현(MVP) — /admin/commercials/new 등록 폼(title·audioUrl·durationSeconds). 음원 파일 업로드 UI 는 미포함(공개 URL 직접 입력, SPEC #093 §D9) | #093 / 업로드 흐름은 후속 |
| CM송 빈도 설정 | Page 8 | (시안 없음) | 구현 — 본사 default 는 /admin/settings “CM송 사이클 빈도”(1~100, #095), 매장 override 는 /admin/stores/[id](#103). 재생은 점장 player 라운드로빈(#104) | #095·#103·#104 |
| 라이브러리 목록 조회 | Page 9 | (시안 없음, ListToolbar 관용구) | 조회만 — /admin/libraries 목록·검색(q)·타입 필터(AI/TRUST)·페이지네이션, 행=이름 Link·타입 배지·음원 수·PL 사용 수·수정 시각 | #080 / 편집=운영사 전용 |
| 라이브러리 상세 조회 | Page 9 | (시안 없음, hq-playlist 상세 idiom 미러) | 조회만 — /admin/libraries/[id] 메타 카드(음원 수·PL 사용·수정일)·트랙 테이블(제목·길이 mm:ss·추가일)·페이지네이션. 메타 server fetch(404→notFound), 트랙 client query. read-only(음원 추가/제거·편집 없음) | #107(#080 §F1 마감) / 음원 할당=운영사 전용 |
| 플레이리스트 조회 | Page 10 | hq-playlist.jsx | 조회만 — read-only, 기본 PL 배지(#058)·상태 파생 배지(#060) | #057 / 편집=운영사 전용(본사 미편집) |
| 플레이리스트 편집 | Page 10 | hq-playlist.jsx | 없음 — 본사는 조회만, 편집은 운영사(apps/admin) | 비대상(정책상 운영사 편집) |
| 매장 목록 | Page 11 | hq-stores.jsx | 조회만 — 산하 매장 목록·검색·점장 계정 필터(#184 D8)·페이지네이션 + [등록]·[CSV 일괄] 진입. 상태 변경(정지·복구·폐점)·점장 계정 관리(정지/회수/비번 재설정)는 여전히 운영사 전용 | #051 · #184 |
| 매장 상세 | Page 14 | (시안 부재 — 운영사 /stores/[id] 5섹션 idiom 미러) | 구현 — /admin/stores/[id] 5섹션(개요·점장 정보·활성 PL·운영 상태·메타) + 매장 정보 인라인 편집(#105) + CM 사이클 빈도 override(#103) + 더킹 per-field override(#141) + [점장 발급] 사후 발급(#184 D4 — 미발급·회수 상태에서만, 폐점 제외) | #084 F1 마감(#105)·#103·#141·#184 F5 발급 마감 |
| 신규 매장 등록(단일) | Page 12 | (시안 부재 — atom-grounded) | 구현 — /admin/stores/new 단일 단계 폼(5 필드) createHqStore. #184 — managerEmail = 점장 로그인 ID 이며 매장 + 계정 한 트랜잭션(비우면 “점장 미정”). 201 응답이 envelope {store, managerAccount?} 로 변경 | #106(#084 F2 마감) · #184 |
| 매장 CSV 일괄 등록 | Page 13 | (시안 부재 — atom-grounded, design-debt §2) | 구현 — /admin/stores/bulk 파일 업로드 + 부분 실패 결과 리포트 bulkCreateHqStores(multipart, 5필드). #184 — “담당자이메일” 행은 점장 계정까지 발급(합계 managerAccountCreatedCount·setupEmailFailedCount 안내). 영업시간·2단계 미리보기는 후속 | #111(#084 F3 마감) · #184 |
| 구독/결제·이력·방식변경 | Page 15~17 | (시안 없음) | 범위 밖 — billing/PG 확정 스코프 제외라 HQSidebar 구독·결제 항목 제거(감사 B3/B6) | 후속 도메인(토스/팝빌 외부연동) |
| 고객지원 목록·작성·상세·댓글 | Page 18~20 | (시안 없음, ListToolbar+운영자 /tickets idiom 합성) | 구현 — /admin/support 목록·검색·필터·작성·상세·댓글(read+create+comment) | #086 / #101(audit) |
| 고객지원 상태/우선순위 변경 | (상세 인터랙션) | (운영자 tickets/[id] ActionCard idiom 미러) | 구현 — F1 상태(제한적: RESOLVED→CLOSED·IN_PROGRESS, CLOSED→IN_PROGRESS; OPEN/IN_PROGRESS 는 운영자 전담) · F2 우선순위(LOW/NORMAL/HIGH, URGENT 제외) | #108(#086 F1·F2 마감) |
| 계정 설정 | Page 21 | (시안 없음) | 구현 — /admin/settings 본사/본인 정보(읽기)·매니저 이름 편집·이메일 변경·비밀번호 변경·CM송 사이클 빈도(#095)·더킹 default(#141) | #085·#095·#141 |
| 감사(송출 audit 조회) | (PRD 외 — 운영 요구) | hq-audit-page.jsx(design_8 §8E-⑤) | 구현 — /admin/audit 송출 audit 목록·필터(기간·actor·action·q)·CSV 내보내기·임퍼소네이션 행 강조 | #067·#069·#070 / #101(CS audit 합류) |
| LLM 자동멘트 | Page 22 (v1 신규) | (시안 없음) | stub — HQSidebar 10 항목 중 유일한 enabled: false, BE 없음 | 후속 게이트(가드레일·외부 LLM) |
| 긴급 즉시 송출 | (송출 인터랙션) | (시안 없음) | 구현(점장측) — 긴급 옵션은 점장 즉시방송(isEmergency, #082)이고 점장 player 가 진행 중인 일반 방송을 preempt 해 즉시 재생한다(#090). 본사 송출 다이얼로그에는 긴급 옵션이 없다(본사는 일반 송출만) | #082·#090 / 본사측 긴급 토글·우선순위 큐는 후속 |
| 본인 프로필(getHqMe) | (셸 공통) | hq-shared.jsx | 구현 — 임퍼소네이션 배너·본인 프로필 | #050 |
| 온보딩 — 비밀번호 변경 강제 | (계정 공통) | ops-change-password.jsx (본사·점장 공용) | 구현 — /onboarding/change-password 본사·점장 공용 관문(login + /admin layout 가드가 me.passwordMustChange 로 강제). 변경 완료 후 /admin | #050 / 자기-변경·reset 후속 |
정리 — 남은 미구현
위 표 기준으로 본사 모드에서 아직 없는 표면은 다음뿐이다.
- LLM 자동멘트(Page 22) —
HQSidebar유일한 disabled. 외부 LLM 연동·가드레일 게이트. - 구독/결제·이력·방식변경(Page 15~17) — 확정 스코프 범위 밖(billing/PG 제외). 사이드바 항목도 제거됐다.
- 송출 우선순위 큐(
20-policy §4) — 동시 도착 방송의 6단계 우선순위 정책. 현재는 긴급 > 일반 안내방송 > CM 3단계만 점장 player 안에서 구현. - 본사측 긴급 송출 토글 — 긴급은 점장 즉시방송(#082)에만 있다.
- CM송 음원 파일 업로드 UI — 현재는 공개 URL 직접 입력(#093 §D9).
그 외 PRD 영역(대시보드·안내방송 생성/수정/송출/예약/캘린더·CM송·라이브러리·플레이리스트 조회· 매장 목록/상세/등록/CSV·고객지원·감사·설정)은 전부 라이브다. 각 화면의 상세는 위 표의 SPEC 열과 References 링크를 따라간다.
References
- 기획 원문
docs/planning/11-prd-client-admin-mode.md(Page 1~22) - 시안: workspace parent dir
design_handoff_linkmusic/design/hq-shared.jsx·screens/hq-dashboard.jsx·hq-broadcast-new.jsx·hq-schedule.jsx·hq-playlist.jsx·hq-stores.jsx - 코드:
apps/space/src/components/hq-shell/hq-sidebar.tsx(사이드바 enabled 현황) ·apps/space/src/app/admin/*(대시보드·안내방송+schedules·commercials·libraries·playlists·stores· support·audit·settings) - 구현 상세: HQ Mode 대시보드·산하 매장 · HQ Mode 플레이리스트 조회 · HQ Mode TTS 안내방송 · HQ Mode CM송 관리 · HQ Mode 계정 설정 · HQ Mode 감사
- SPEC #050(대시보드)·#051/#084/#105/#106/#111(매장)·#057(플레이리스트 조회)·#080/#107(라이브러리)· #061/#062/#063(TTS 안내방송)·#072/#073/#144(송출 대상·게이트)·#078/#083/#139(예약·캘린더)· #093/#095/#103/#104(CM송)·#086/#108(고객지원)·#067/#069/#070(감사)·#085/#141(설정·더킹)