diff --git a/docs/OWNER_FEEDBACK.md b/docs/OWNER_FEEDBACK.md index 7c563fa..2395517 100644 --- a/docs/OWNER_FEEDBACK.md +++ b/docs/OWNER_FEEDBACK.md @@ -272,3 +272,44 @@ **GAP_AUDIT 재판정 (커밋 41503f7):** G-01~G-09 전량 해소를 코드/엔드포인트/V50~V56 기준 재확인 — **코드 미개발 잔여 0건**. 로드맵 잔여는 서류 HWP 렌더·AppQr iOS(EAS G3) 2건뿐. **검증:** tsc 0 · vite build 통과 · push 후 배포 게이트(번들 마커 + public API) 통과. + + +--- + +## 처리 로그 (2026-07-14 세션 5 — LIVE 데모 배치 완성 + 부스 자동 배치 "평면도 안" 정렬) + +**소유자 지시:** ① "LIVE 데모 배치(진행중) → 완성 할 것!" ② "부스 자동 배치" ③ "평면도 안에 배치 해 줘야 하는 것 아닌가? 평면도 안에 자동 배치 해 줘야 한다." + +**근본원인 — 부스가 평면도 밖에 보이던 이유(2중):** +1. **도면 정렬 부재**: 홀 도면 JPG는 여백·범례·미니맵을 포함한 전체 도면인데, 캔버스가 이미지를 홀 사각형(0,0~W,H m)에 통째로 스트레치(`preserveAspectRatio=none`) → 부스 그리드가 노란 전시 바닥면 밖(여백·범례 위)까지 덮임. +2. **하드코딩 홀 치수**: BoothLayoutEditorPage가 `hallDims=[126,90]` 고정 — 백엔드는 실측 홀 치수로 배치를 생성하므로 축척 불일치. + +**수정 (커밋 0cc7f26):** +- `hallFloorplan.ts`: 홀 1~10 도면 JPG의 전시 바닥면(1전시장 연노랑·2전시장 라임그린) bbox를 **색상 블롭 자동 측정(최대 연결 성분, Pillow)**으로 산출한 캘리브레이션 `FLOOR_REGIONS` 추가. +- `FloorplanCanvas`: 캘리브레이션 영역이 홀 사각형에 오도록 도면을 역산 배치 → **부스 좌표가 도면의 채색 바닥면 "안"에 정확히 놓임**. 언더레이 가시성 0.3→0.55. +- `BoothLayoutEditorPage`: `layout.hall.dimsM` 실측 치수 사용(126×90 하드코딩 제거), 프론트 `LayoutDto`에 누락됐던 `hall`(HallInfoDto) 타입 추가. +- `FloorplanServiceImpl.packBooths`: 무시되던 **주출입구·무대·라운지 수를 예약 영역으로 반영** — 중앙 교차 주통로(40m 이상 변), 출입구 전면 클리어존(9×6m), 무대(12×9m+버퍼, 후면), 라운지(9×9m+버퍼, 중앙). 배치안이 실제 전시 평면도처럼 구획됨. + +**세션4 미커밋 WIP 완성 (커밋 c686365):** admin 실집계 통계 API(`/api/admin/stats`, SCR-16)·옥션 실시간 순위 WebSocket 푸시(`/topic/auctions/{id}/ranking`, afterCommit·봉인입찰 마스킹 유지·폴링 폴백)·CMS 예약 게시(30초 DB 폴러+V58 부분 인덱스). 컴파일은 됐으나 `CmsServiceTest`가 신규 `AuditLogService` 생성자 미반영으로 테스트 컴파일 실패 → 수정. + +**검증:** gradle test 통과 · tsc 0 · vite build 통과 · 매퍼 XML well-formed 0건 · push→자동배포 → 번들 스왑 확인(D_hzGGkv→Cmx0ZsFU, 캘리브레이션 값 번들 포함 확인) · health UP · **HTTP 스모크 13/13 통과**. ★V58 라이브 dry-run은 이 세션에 SSH 자격증명(KINTEX_SSH_PASSWORD env) 부재로 생략 — V19 기존 컬럼 대상 `CREATE INDEX IF NOT EXISTS` 멱등이라 저위험, 배포 스크립트 health 게이트+롤백이 커버. + +**잔여:** 도면 교체 시 캘리브레이션 재측정 필요(스크립트 패턴은 색상 블롭 최대 연결 성분). 배치안 내 무대/라운지 시각 표기(예약 공간만 비움, 오브젝트 미표시)는 후속 후보. + +### 세션 5 추가 지시 처리 (같은 날 연속 — 실 운영 전환) + +**소유자 지시(순차):** ① "전시장 선택하여 실 운영" ② "평면도 목록 보여라 / 홀 기준인가" ③ "대분류>중분류>소분류" ④ "데이터는 트리구조" ⑤ "이미지 생성은 버튼 클릭할 때만" ⑥ "이미지 클릭 시 확대 팝업" ⑦ "나노바나나 이미지 저장 기능(조회 재열람·입찰 참고용)" ⑧ "자동 배치를 사용자가 쉽게 기획하여 재구성" + +**처리(커밋 6c0d364, 배포 검증 완료):** +- **V59**: 홀 치수 전 홀(10) 도면 방향 정렬(예: H1 63×171→171×63, H7 126×90→90×126) + 가정 비상구·트렌치 재유도. 근거: 도면 JPG 10장 전수 실측 — 전 홀이 DB와 90° 뒤집혀 있었음. +- **V60 hall_zone(트리)**: 대분류(전시장)>중분류(홀)>소분류(구역) — 도면 실측 구획(1A/1B·6A/6B/6C·7A/7B·8A/8B·9B/9A·10B/10A, 9·10홀은 A가 아래). `GET /api/halls/tree`. +- **자동배치 3단계 위저드**(AutoLayoutDialog 재구성): ①어디에(트리 캐스케이드) ②조건(자연어+AI 해석) ③3안 비교. 구역 선택 시 `zoneId` 경계 안에서만 패킹. +- **이미지 버튼 전용 생성**: autoGenerate의 S7 자동 발행 제거(Gemini 쿼터 보호), `POST …/auto-generate/preview` 신설 — 카드별 "조감 이미지 생성" 버튼 클릭 시에만 발행. +- **확대 팝업+저장**: 생성 이미지 클릭 → 라이트박스(워터마크 고지 유지) + "이미지 저장"(다운로드). 렌더는 render_job 영속 → 갤러리(boothRef=HALL-{hallId}) 재열람·옥션 MaterialPackage.aiImageUrl 참고 재사용. +- **P0 결함 발견·해소**: 프론트가 apply-option을 호출하지 않아 "이 안으로 편집 시작"이 배치를 저장하지 않았음 → 실저장 배선. +- **캘리브레이션 교정**: H8·H10 도면은 중앙 통로가 색 영역을 갈라 최대 블롭 측정이 하부 절반만 잡았음 → 유의미 블롭 합집합으로 재측정. +- **문서**: PLANNING v3.5(M2-1 이지 플로우, planner)·design.md v2.6(SCR-03/04 위저드·라이트박스, designer). + +**검증:** gradle test·tsc·vite build·매퍼 XML 전부 통과 → push→자동배포(번들 CYBPm4tX)→health UP→스모크 13/13. V59/V60은 배포 health 게이트로 검증(SSH 자격증명 이 세션 부재로 사전 dry-run 생략 — 멱등 설계). + +**미사용 CAD(DWG) 질의 답변 기록:** JPG는 시각 언더레이용, DWG(1전시장 층별 평면 3장+전기·설비 트렌치 / 2전시장 평면·전력간선·철골기둥 주심도)는 실측 데이터원. DWG는 사유 바이너리라 즉시 파싱 불가 — ODA 변환→DXF→ezdxf 레이어 추출 파이프라인으로 트렌치 실좌표(현 6m 가정 그리드)·기둥(현 미반영)·비상구 실좌표(현 변 중앙 가정) 대체가 후속 과제(PLANNING R4 정합). diff --git a/docs/PLANNING.md b/docs/PLANNING.md index fe48e22..7aeef6e 100644 --- a/docs/PLANNING.md +++ b/docs/PLANNING.md @@ -1,6 +1,6 @@ # 킨텍스 AI 전시·행사시스템 (KINTEX AI Exhibition & Event System) 기획서 -> 작성: 기획 에이전트(planner) · 작성일: 2026-07-11 · 최종 갱신: 2026-07-12 · 버전: **v3.4** +> 작성: 기획 에이전트(planner) · 작성일: 2026-07-11 · 최종 갱신: 2026-07-14 · 버전: **v3.5** > **제품 공식 명칭(소유자 확정 2026-07-12): "KINTEX AI 전시·행사시스템"** — 기존 "자동전시시스템(Exhibition Automation Platform)"을 대체한다. 전시(exhibition)뿐 아니라 행사·이벤트(event) 전반을 포괄한다는 의미를 명칭에 반영. 본 명칭이 정본이며, 이하 본문·3-트랙 기획·타 문서 후속 반영 시 이 명칭을 사용한다(기존 "자동전시시스템" 표기는 문맥 보존을 위해 삭제하지 않고 잔존하나, 신규 표기는 정본 명칭을 따른다). > 근거 문서: `docs/analysis/kintex-website.md` (킨텍스 웹사이트 25개 페이지 + 전시주최자매뉴얼 PDF + 참가업체 매뉴얼 PDF 전수 분석, 2026-07-11) > 근거 문서: `docs/analysis/coex-website.md` (코엑스 VISITOR/BUSINESS/CYBER 3-사이트 IA 분석 + 킨텍스 대비표, 2026-07-12) — §2-2 대외 접점 3-트랙 재구성 확정 근거 @@ -12,6 +12,7 @@ > **v3.2 대외 접점 3-트랙 재구성**: 코엑스(COEX) IA 분석(3-사이트 분리: VISITOR/BUSINESS/CYBER)을 근거로, 대외 접점을 **visitor(관람객) / business(비즈니스=주최자·참가업체) / agency(에이전시=공사·장치·협력사)** 3개 트랙으로 분리·재편한다. 기존 6역할·7페르소나(§2)·포털 매트릭스(§2-1)·모듈(M1~M18)·화면(SCR-*)은 **전부 보존**하고, 그 위에 **트랙 셸(track shell) — 랜딩 3-분기 + 트랙별 서브홈 + 트랙-스코프 로그인 후 홈** IA 레이어만 얹는다. 상세는 **§2-2**(내부 역할 ops·admin은 대외 트랙 외부에 그대로 유지). > **v3.4 AI 사용성 & 토큰 최소화**: 소유자 지시(2026-07-12) — "AI 기능을 쉽게 사용하도록 기획 + 토큰을 최소한으로 사용하는 방식 채용". 산재해 있던 AI 규약을 **§8A**로 명문화한다 — ① AI 사용성 표준(전 화면 인라인 진입점·예시 질문 칩·원탭 액션·다음 명령 제시·구조화 카드+근거 인용·대화 히스토리·다국어/모바일/음성) ② 토큰 최소화 6원칙(결정론 우선 라우팅으로 LLM 우회·소형모델 우선 티어링·RAG 발췌로 프롬프트 축소·캐싱·출력 상한/구조화·집계는 SQL) ③ 측정지표·목표 ④ design/개발 계약 포인트. 기존 스코프(§5B 공통 AI·§6 나노바나나·§8 스택·§8-2 격리)·화면·라우트 보존, 원칙·계약·지표만 순증. M10 관람객 AI 도우미·M16 BI·§5B 공통 AI 보조에 §8A 링크. 이미 진행 중(visitor-assistant DB 근거 응답·AiTextRouter Claude→Ollama 폴백)과 정합(재발명 아님·표준화). src·design.md 미수정(designer/backend 후속). > **v3.3 로그인 사용자 구분 → 메인페이지·메뉴 그룹 결정 규칙**: 소유자 확정(2026-07-12) — **"로그인한 사용자의 사용자 구분으로 메인페이지가 결정되고, 좌측 메뉴 그룹도 결정된다."** §2-2의 3-트랙(visitor/business/agency) + 내부 역할(ops/admin) 위에, **미인증 기본 진입 = visitor 공개 관람 랜딩**, **인증 후 역할별 전용 메인**(business 메인·agency 메인·visitor 메인은 신규 화면 — designer Stitch 의뢰, admin/내부 = 관리 메인 또는 비즈니스 메인+시스템관리)과 **트랙별 좌측 메뉴 그룹 노출/숨김**을 결정하는 규칙을 **§2-3**에 확정한다. 기존 §2·§2-2·화면(SCR-*)·라우트는 보존(안 B 정합), 결정 규칙·트랙 메인 화면 목록만 순증. src·design.md 미수정(frontend·designer 후속). +> **v3.5 M2 자동 배치 이지 플로우(3단계 위저드)**: 소유자 지시(2026-07-14) — "사용자가 쉽게" 원칙으로 M2 부스 자동 배치 UX를 재구성. **§M2-1 신설**: ①평면도 안 생성·표시(홀 도면 JPG 캘리브레이션 좌표계) ②평면도 트리 선택(전시장>홀>구역, `hall_zone` V60) + 구역 경계 내 패킹 ③S7 조감 나노바나나 **버튼 클릭 시에만 생성**(자동 발행 금지 — §6-3 S7 트리거 개정) ④생성 이미지 확대 팝업·다운로드·`render_job` 영속·렌더 갤러리 재열람·옥션 참고 이미지 재사용 ⑤3단계 위저드(어디에→어떻게→3안 비교·선택) + `apply-option` 실제 저장(현행 프론트 미배선 결함 명시). 기존 M2 본문(3안 생성·선택/병합·규정 검증)·타 절 보존, UX 계약만 순증. > **문서 소유권**: 본 PLANNING.md는 planner만 수정한다. design.md·타 문서는 이 문서 변경 시 "designer/planner 후속 반영 필요"로만 표기하고 직접 수정하지 않는다. --- @@ -534,6 +535,42 @@ graph TB - **필요 데이터**: 홀별 실측 도면(63×171m, 층고 10~15m, 기둥·셔터·비상구 좌표 — **킨텍스로부터 CAD 원본 확보 필요, 미확보 시 공개 규격 기반 근사 도면으로 Phase 1 진행**), 트렌치 그리드 좌표. - **연동**: M5(홀 전경 시각화), M6(부스배치도 제출 서류 자동 생성), kxwp. +#### M2-1. 자동 배치 이지 플로우 — 3단계 위저드 (v3.5, 소유자 지시 2026-07-14) + +> **원칙: "사용자가 쉽게"** — CAD를 모르는 주최자가 **클릭 몇 번 + 자연어 한 줄**로 배치안을 얻는다. 본 소절은 이미 구현 진행 중인 소유자 지시 5건을 기획 권위로 반영한다. 기존 M2 본문(3안 다양화·선택/병합·규정 검증·버전 기록)은 보존하고, 그 **진입 UX 계약**만 정의한다. + +**(1) 사용자 여정 — 주최자 관점 3단계 위저드** + +| 단계 | 사용자 질문 | 사용자 행동 | 시스템 동작 | +|---|---|---|---| +| **① 어디에** | "어느 공간에 배치하지?" | **평면도 트리 선택**: 대분류(제1/제2전시장) > 중분류(홀 H1~H10) > 소분류(구역 1A/1B · 6A/6B/6C · 7A/7B · 8A/8B · 9A/9B · 10A/10B) | 선택 즉시 해당 **홀 도면 JPG를 캔버스에 로드**(바닥면 캘리브레이션 정렬 완료). 구역(zone) 선택 시 **그 구역 경계 안에서만 패킹** | +| **② 어떻게** | "어떤 배치를 원하지?" | **자연어 한 줄 입력**(예: "3×3 부스 최대한 많이, 무대는 북쪽에") | LLM이 조건을 해석해 **구조화 폼(AI 해석 폼)** — 목표 부스 수·프리미엄 비율·주출입구/무대/라운지 — 에 채워 보여주고, 사용자가 수정·확정. §8A P1 정합: **해석만 LLM, 패킹은 결정론 엔진** | +| **③ 3안 비교·선택** | "어느 안으로 가지?" | 3안 카드 비교(M2 본문 다양화 기준: 부스 수 최대/동선·가시성/피난 여유) → 한 안 선택 → **"이 안으로 편집 시작"** 클릭 | **`apply-option` 호출로 선택안을 실제 배치 데이터로 저장**한 뒤 편집 캔버스(SCR-03)로 진입 | + +**(2) 권위 원칙 5건 (소유자 지시 2026-07-14)** + +1. **평면도 안 생성·표시**: 부스 자동 배치는 반드시 **홀 도면 JPG 바닥면(캘리브레이션 좌표계) 위에서** 생성·표시된다. 도면 없는 추상 캔버스에 배치 후 도면을 덧그리는 방식 금지. +2. **평면도 트리 선택**: 대분류(전시장) > 중분류(홀) > 소분류(구역) 트리. 구역 마스터는 **`hall_zone` 테이블(V60)**. 구역 선택 시 패킹 엔진은 해당 구역 폴리곤 경계를 하드 제약으로 사용(`zoneId` 파라미터). +3. **S7 조감 이미지는 버튼 클릭 시에만 생성**: 나노바나나(S7 홀 전경) 자동 발행 금지 — 배치안 생성/저장 이벤트에 연동하지 않고, 사용자가 **명시적으로 생성 버튼을 클릭할 때만** RenderJob 발행(Gemini 쿼터 보호). **본 항이 §6-3 S7 트리거 표("M2 배치안 생성 시")를 개정한다(버튼 클릭 시로).** +4. **생성 이미지 라이프사이클**: 생성된 S7 이미지는 ⓐ클릭 시 **확대 팝업** ⓑ**저장(다운로드)** 가능 ⓒ**`render_job` 영속** → 조회화면(**렌더 갤러리**, `boothRef=HALL-{hallId}`)에서 재열람 ⓓ**M15 옥션 입찰 참고 이미지로 재사용**(자료 패키지 `MaterialPackage.aiImageUrl`). 일회성 미리보기로 휘발되지 않는다. +5. **`apply-option` 저장 계약**: 3안은 비교 단계까지는 미리보기(미저장)이며, **"이 안으로 편집 시작" 시에만 `apply-option`으로 실제 배치 데이터가 저장**된다. **[결함 명시]** 현행 프론트는 apply-option 미배선 — 3안 선택이 저장으로 이어지지 않아 위저드가 편집으로 연결되지 않는 P0 결함. 구현 하네스(kintex-impl) 배선 대상. + +**(3) 화면 계약 — SCR-03/04 관계** (design.md는 designer 후속 반영) + +- **위저드는 SCR-03(부스 배치 에디터)의 진입 모드**로 편입: 배치 미존재 시 위저드 ①단계부터 시작, 기존 배치 존재 시 편집 캔버스 직행(+위저드 재실행 진입점 제공). +- **③단계 3안 비교는 SCR-04(배치안 비교·S7 조감) 재사용**: 기존 선택/병합 UX 위에 ⓐ"이 안으로 편집 시작" CTA = apply-option 저장 트리거 ⓑ**S7 생성은 안별 버튼 클릭**(원칙 3) ⓒ이미지 확대 팝업·다운로드(원칙 4)를 계약으로 추가. +- 렌더 갤러리(조회화면)에서 `boothRef=HALL-{hallId}` 필터로 홀 조감 이미지 재열람 — S1/S2(부스 단위)와 동일 갤러리 체계. + +**(4) 데이터 계약 요약** + +| 항목 | 계약 | +|---|---| +| 구역 트리 | `hall_zone`(V60): 전시장–홀–구역 계층 + 구역 폴리곤(PostGIS). 트리 API가 위저드 ①단계 소스 | +| 패킹 입력 | `zoneId` 지정 시 구역 경계 폴리곤이 패킹 하드 제약(미지정 시 홀 전체) | +| S7 생성 | 사용자 버튼 클릭 → RenderJob 발행(자동 트리거 금지) | +| 렌더 영속 | `render_job` 영속 + `boothRef=HALL-{hallId}` → 렌더 갤러리 재열람 + M15 `MaterialPackage.aiImageUrl` 재사용 | +| 확정 저장 | `apply-option`(선택안 → 실제 배치 저장) → 이후 M2 본문 5(버전 기록) 흐름 합류 | + ### M3. 부스 설계 스튜디오 (인테리어·장치 공사 설계) — **P0** - **현재**: 조립부스는 주최측 기본 구조에 간판/가구/조명 옵션 신청서 작성. 독립부스는 장치업체가 평면·입면·조감·전기도면 작성 → kxwp 제출 → 반려 시 재작업. @@ -1261,6 +1298,7 @@ graph TB | 버전 | 일자 | 작성자 | 내용 | |---|---|---|---| +| **v3.5** | 2026-07-14 | planner | **M2 자동 배치 이지 플로우 — 3단계 위저드 신설(소유자 지시 2026-07-14, 이미 구현 진행 중 사항의 권위 반영).** 기존 M2 본문(3안 생성·선택/병합·규정 검증·버전 기록)·타 절 전부 보존, 진입 UX 계약만 순증. ①헤더 v3.5 라인 + 버전 상향 ②**§M2-1 신설** — (1) 주최자 3단계 위저드(①어디에=평면도 트리 선택 → ②어떻게=자연어 한 줄 + AI 해석 폼(해석만 LLM·패킹은 결정론 엔진, §8A P1 정합) → ③3안 비교·선택 → "이 안으로 편집 시작") (2) 권위 원칙 5건: 평면도 안 생성·표시(홀 도면 JPG 캘리브레이션 좌표계, 추상 캔버스 금지)·평면도 트리(전시장>홀>구역, `hall_zone` V60·구역 폴리곤 경계 내 패킹 `zoneId`)·**S7 조감 나노바나나 버튼 클릭 시에만 생성(자동 발행 금지, Gemini 쿼터 보호 — §6-3 S7 트리거 표 개정)**·생성 이미지 라이프사이클(확대 팝업·다운로드·`render_job` 영속·렌더 갤러리 `boothRef=HALL-{hallId}` 재열람·M15 옥션 `MaterialPackage.aiImageUrl` 재사용)·**`apply-option` 저장 계약("이 안으로 편집 시작" 시에만 실제 저장 — 현행 프론트 미배선 P0 결함 명시, 구현 하네스 인계)** (3) 화면 계약: 위저드=SCR-03 진입 모드 편입·3안 비교=SCR-04 재사용(+CTA/S7 버튼/팝업 계약) (4) 데이터 계약 요약표. **src·design.md 미수정** — designer(SCR-03/04 위저드·팝업 반영)·frontend(apply-option 배선) 후속 | | **v3.4** | 2026-07-12 | planner | **AI 사용성 & 토큰 최소화 아키텍처 신설(소유자 지시 2026-07-12).** 기존 스코프·화면·라우트 전부 보존, AI 원칙·계약·지표만 순증. ①헤더 v3.4 라인 + 버전 상향 ②**§8A 신설**(§8-2 뒤·§9 앞) — (8A-1) AI 사용성 표준 U1~U7(인라인 진입점 `AiAssistant`·예시 질문 칩·원탭 AI 액션·다음 명령 제시(규칙 우선)·구조화 카드+근거 인용·"모름" 폴백·대화 히스토리 요약·접근성/다국어/모바일/음성, 관람객·업무 사용자 단일 컴포넌트 공유) (8A-2) 토큰 최소화 6원칙 P1~P6(결정론 우선 라우팅으로 사실조회 LLM 미호출·소형모델 우선 티어링 AiTextRouter 저비용→승급·RAG 발췌 top_k 제한·캐싱 응답/프롬프트/기간요약·max_tokens 상한+구조화 출력(스트리밍=UX용 토큰 불변)·집계는 SQL LLM은 설명만) + 오케스트레이션 흐름 (8A-3) 측정지표·목표(LLM 우회율≥40%·소형모델 처리율≥70%·캐시 적중률≥30%·평균 입력≤1500/출력≤400·근거 인용률≥95%, `ai_usage_log` 적재·tenant/모듈 비용 귀속) (8A-4) design/개발 계약 6종(단일 `/ai/ask`·규칙테이블 IntentRouter·캐시 키·AiConfig 티어·공통 `AiAssistant`/`AiActionButton`·모듈 링크) ③**M10·M16-1·§5B-2에 §8A 정합 링크** 순증(관람객 AI 도우미 DB 직답·BI 집계 SQL/LLM 설명만·공통 AI 보조 중앙 `/ai/ask` 경유). 이미 진행 중(visitor-assistant DB 근거·AiTextRouter 폴백)과 정합·표준화(재발명 아님). 외부 API 게이트·RAM 제약 정합. **src·design.md 미수정** — designer(AiAssistant/칩 Stitch)·backend/ai-dev(라우팅·캐시·티어) 후속 | | v1.0 | 2026-07-11 | planner | 최초 작성 — kintex-website.md 분석 기반 전체 기획. ReRoomAI 소스 분석(reroomai-source.md)은 추가 시 6장 갱신 예정 | | v1.1 | 2026-07-11 | planner | ReRoomAI 소스 분석 반영. ①§6 나노바나나 파이프라인 제어 파라미터 확정 — 모델 `gemini-3.1-flash-image-preview`(나노바나나 2)·`@google/genai` SDK·image-to-image(inlineData+text parts) 호출 스택, 구조화 사전(BOOTH_TYPES·BOOTH_STYLES·FIXTURE_LAYERS) + "보존/교체 명시 분리" 부스 프롬프트 템플릿(§6-4), Canvas 1024px 전처리·RenderJob 방어 로직(크기 가드·SAFETY·에러 분기·성공 시에만 쿼터 차감)·단계별 로딩 UX 신설(§6-5). ②S6 배선 오버레이 백엔드 래스터 합성 우선 명확화(§6-3). ③§7 마스터 데이터 순증 반영(기본부스 표준 품목·프리미엄 6×3×4m 2kW·조명 반입 금지·이격 30/60cm·옥외 2,849㎡·홀6 93×60×10m·제3전시장 홀11~18). ④§10 R11 해소, R12(Gemini 외부 API 미승인·소유자 승인 게이트) 추가. BACKLOG B-11 done, B-09 정리 | diff --git a/docs/design.md b/docs/design.md index cf9ea9c..956c7cf 100644 --- a/docs/design.md +++ b/docs/design.md @@ -1,6 +1,6 @@ # 킨텍스 AI 전시관리 시스템 — UI 디자인 스펙 (design.md) -> 작성: 디자인 에이전트(designer) · 작성일: 2026-07-14 · 버전: **v2.5** +> 작성: 디자인 에이전트(designer) · 작성일: 2026-07-14 · 버전: **v2.6** > 근거 문서: `docs/PLANNING.md` **v3.0**(모듈 맵 M1~M18 + §5B 공통/시스템관리 레이어 + §1A 멀티테넌시, 6+2 역할, 나노바나나 표준 샷 세트 S1~S7) · `docs/FEATURE_BACKLOG_100.md`(100대 기능 F001~F100·NFR 4축) · Stitch 산출물 `stitch_kintex_ai_system_architect/`(18화면 + DESIGN.md 3변형) 학습·정합 > **단일 출처(Single Source of Truth)**: 프론트 구현 토큰·컴포넌트 계약은 본 문서가 권위다. Stitch 화면(code.html/screen.png)은 시각 참조로만 사용하며, 상충 시 본 문서를 따른다. > 용도: **각 화면의 "Stitch 프롬프트" 코드블록을 Google Stitch(stitch.withgoogle.com)에 그대로 붙여넣어 화면을 생성**한다. 문서는 한국어, Stitch 프롬프트만 영어. @@ -529,35 +529,42 @@ An enterprise dashboard for an exhibition organizer, part of "KINTEX AI 전시 ### SCR-03 부스 배치 에디터 (히어로: 드래그앤드롭 + AI 자동배치 + 규정 위반 오버레이) [M2] -- **대상**: 주최자 (홀매니저 읽기 전용) · **진입 경로**: 대시보드 → 플로어플랜 스튜디오 / 배치안 비교에서 "이 안 편집" +- **대상**: 주최자 (홀매니저 읽기 전용) · **진입 경로**: 대시보드 → 플로어플랜 스튜디오 / AI 자동배치 위저드 ③단계 "이 안으로 편집 시작"(apply-option 저장 완료 후 캔버스 진입 — SCR-04) - **레이아웃**: - 1. 상단 툴바: 배치안 버전 드롭다운("배치안 B v3"), 저장 상태, **보라색 AI 버튼 "AI 자동배치"**, "규정 검증 실행", "홀 전경 생성(S7)", 공유 + 1. 상단 툴바: **홀 선택 셀렉트**(전시장별 optgroup 그룹핑 — "제2전시장 · 홀7", 변경 시 해당 홀 배치 라우트로 전환, v2.6 M2-1 정합), 배치안 버전 드롭다운("배치안 B v3"), 저장 상태, **보라색 AI 버튼 "AI 자동배치"(클릭 시 3단계 위저드 다이얼로그 오픈 — 아래 M2-1 절)**, "규정 검증 실행", "홀 전경 생성(S7)", 공유 2. 좌측 도구 패널(240px): 부스 팔레트(기본 3×3m / 프리미엄 6×3m / 아일랜드), 시설 요소(무대·라운지·주출입구), 레이어 토글(트렌치 그리드 / 기둥·셔터·비상구 / 위반 오버레이) - 3. **중앙 캔버스(다크 `#1C2536`)**: 홀7 도면(126×90m, 축척 표시) 위 부스 폴리곤 드래그앤드롭. 부스는 파란 채움+부스번호, 선택 시 핸들. 트렌치 그리드는 점선, 비상구는 녹색 아이콘. **위반 오버레이**: 통로 폭 미달 구간 빨간 반투명 밴드 + 번호 핀(차단 2건 — 핀 1·2), 바닥하중 초과 부스 주황 빗금(경고 3건 — 핀 3·4·5) — 우측 [검증] 탭 요약 "차단 2 · 경고 3"과 핀이 1:1 일치(v2.5 B-07 정정) + 3. **중앙 캔버스(다크 `#1C2536`)**: **실측 홀 도면 JPG를 배경으로 로드하고, 도면 내 전시 바닥면 캘리브레이션 영역(FLOOR_REGIONS 분율 좌표 — 구현 정본 `hallFloorplan.ts`)에 홀 좌표계(홀7 기준 126×90m, 축척 표시)를 정렬**해 부스 폴리곤이 **평면도 안에** 표시·드래그앤드롭된다(도면 없는 추상 캔버스에 배치 후 도면 덧그리기 금지 — PLANNING v3.5 M2-1 원칙 1). 부스는 파란 채움+부스번호, 선택 시 핸들. 트렌치 그리드는 점선, 비상구는 녹색 아이콘. **위반 오버레이**: 통로 폭 미달 구간 빨간 반투명 밴드 + 번호 핀(차단 2건 — 핀 1·2), 바닥하중 초과 부스 주황 빗금(경고 3건 — 핀 3·4·5) — 우측 [검증] 탭 요약 "차단 2 · 경고 3"과 핀이 1:1 일치(v2.5 B-07 정정) 4. 우측 패널(360px) 탭 2개: [속성] 선택 부스 좌표·크기·타입·배정 업체 / [검증] 위반 목록 카드(핀 번호, 규정 근거 "피난 통로 3m 미만", 심각도, "위치 보기") + 요약 "차단 2 · 경고 3" 5. 하단 상태 바: 부스 수 486/510 · 판매 면적 · 줌 컨트롤 -- **상태**: AI 자동배치 실행 중 — 캔버스 위 진행 오버레이("제약조건 풀이 중… 복수 안 생성") · 검증 통과 시 녹색 배너 "위반 0건 — 제출 가능" · 빈 캔버스 — "조건을 입력하고 AI 자동배치로 시작하세요" CTA. +- **상태**: AI 자동배치 생성 중 — **위저드 다이얼로그 내 진행 화면**("제약조건 풀이 중… 복수 안 생성" — 캔버스 오버레이 아님, v2.6 정정) · 검증 통과 시 녹색 배너 "위반 0건 — 제출 가능" · 빈 캔버스 — "AI 자동배치(3단계 위저드)로 시작하세요" CTA(위저드 ①단계 진입). +- **M2-1 자동배치 3단계 위저드 진입 모드 (v2.6 신설 — PLANNING v3.5 M2-1 정합, 구현 정본 `AutoLayoutDialog.tsx`)**: 위저드는 SCR-03의 **진입 모드**(모달 다이얼로그 `.kx-auto`)로 편입 — 배치 미존재 시 ①단계부터 시작, 기존 배치 존재 시 캔버스 직행(+툴바 "AI 자동배치"로 위저드 재실행). 단계 표시기(`① 어디에 → ② 조건 → ③ 배치안 선택`, 완료 단계 체크 표시) 공통. + - **① 어디에**: **셀렉트 3단 캐스케이드** — 대분류(전시장: 제1/제2전시장) > 중분류(홀 H1~H10, 라벨에 실측 치수 "…— 63×171m" 병기) > 소분류(구역, 기본값 **"홀 전체"**). 소스 = `GET /api/halls/tree`(V60 `hall_zone` 계층). 상위 변경 시 하위 초기화. 트리 로드 실패 시 degraded 노트("⚠ 평면도 목록을 불러오지 못해 현재 홀 기준으로 진행합니다")로 계속 진행. 액션: "취소" / "다음 — 조건 입력". + - **② 조건**: **자연어 한 줄 입력**(placeholder 예: "부스 120개, 프리미엄 3할, 무대 1개, 입구 2개로 3안 뽑아줘") + 보라 AI 버튼 "AI 해석"(`POST …/auto-generate/interpret`, Enter 동일) → 해석 결과를 **AI 해석 폼**(목표 부스 수·프리미엄 비율%·무대 수·주출입구 수·생성 안 수 1~3)에 채움 + 해석 노트("✓ …" / degraded "⚠ AI 해석을 사용할 수 없습니다. 아래 값을 직접 입력해 주세요."). **최종 권위는 폼**(사용자 수정 가능 — 해석만 LLM, 패킹은 결정론 엔진 §8A P1). 액션: "← 평면도 다시 선택" / 보라 "배치안 생성"(`POST …/auto-generate?ai=true`, `zoneId` 포함 — 구역 선택 시 구역 경계가 패킹 하드 제약). + - **③ 배치안 선택**: SCR-04(아래) — 3안 카드 그리드·S7 온디맨드 생성·라이트박스·apply-option 저장 계약을 위저드 ③단계 화면으로 실현. - **Stitch 프롬프트**: ``` -A professional floor plan editor screen for exhibition booth layout, in a Korean B2B web app "KINTEX AI 전시관리". Desktop 1440px. All UI text in Korean. Three-column editor layout. Top toolbar: version dropdown "배치안 B · v3", autosave label "저장됨", a distinctive purple #6D4AFF button with sparkle icon "AI 자동배치", outlined buttons "규정 검증 실행" and "홀 전경 생성", and an icon button with a share icon labeled "공유" at the right end of the toolbar. Left tool panel 240px on white: booth palette items with small square previews ("기본 부스 3×3m", "프리미엄 6×3m", "아일랜드 부스"), facility items ("무대", "라운지", "주출입구"), and layer toggles with switches ("트렌치 그리드", "기둥·비상구", "위반 오버레이" turned on). Center: large dark navy canvas #1C2536 showing a top-down exhibition hall floor plan (hall outline 126×90m with scale ruler), dozens of small blue booth rectangles arranged in rows with white booth numbers like "A-101", dashed grid lines for floor trenches, green emergency-exit icons on walls; overlay violations: two semi-transparent red bands across an aisle with numbered red pins "1", "2", and three booths hatched in orange with numbered orange pins "3", "4", "5". Right panel 360px with two tabs "속성 | 검증", showing the 검증 tab: summary chips "차단 2 · 경고 3", a list of violation cards each with pin number, red or orange severity dot, Korean text like "피난 통로 폭 3m 미만 (규정 §4.2)" and a small link "위치 보기". Bottom status bar: "부스 486 / 510 · 판매면적 4,374㎡ · 100%" with zoom controls. Dense engineering-tool aesthetic, light UI chrome around a dark canvas. +A professional floor plan editor screen for exhibition booth layout, in a Korean B2B web app "KINTEX AI 전시관리". Desktop 1440px. All UI text in Korean. Three-column editor layout. Top toolbar: a hall selector dropdown "제2전시장 · 홀7" (grouped by exhibition center), version dropdown "배치안 B · v3", autosave label "저장됨", a distinctive purple #6D4AFF button with sparkle icon "AI 자동배치", outlined buttons "규정 검증 실행" and "홀 전경 생성", and an icon button with a share icon labeled "공유" at the right end of the toolbar. Left tool panel 240px on white: booth palette items with small square previews ("기본 부스 3×3m", "프리미엄 6×3m", "아일랜드 부스"), facility items ("무대", "라운지", "주출입구"), and layer toggles with switches ("트렌치 그리드", "기둥·비상구", "위반 오버레이" turned on). Center: large dark navy canvas #1C2536 showing a scanned top-down exhibition hall floor-plan drawing (JPG blueprint style) as the base layer, with the booth layout aligned inside the drawing's exhibition floor area (hall outline 126×90m with scale ruler) — dozens of small blue booth rectangles arranged in rows with white booth numbers like "A-101" sitting inside the floor plan, dashed grid lines for floor trenches, green emergency-exit icons on walls; overlay violations: two semi-transparent red bands across an aisle with numbered red pins "1", "2", and three booths hatched in orange with numbered orange pins "3", "4", "5". Right panel 360px with two tabs "속성 | 검증", showing the 검증 tab: summary chips "차단 2 · 경고 3", a list of violation cards each with pin number, red or orange severity dot, Korean text like "피난 통로 폭 3m 미만 (규정 §4.2)" and a small link "위치 보기". Bottom status bar: "부스 486 / 510 · 판매면적 4,374㎡ · 100%" with zoom controls. Dense engineering-tool aesthetic, light UI chrome around a dark canvas. ``` --- -### SCR-04 배치안 비교 (S7 홀 전경 조감) [M2+M5] +### SCR-04 배치안 비교 (위저드 ③단계 · S7 홀 전경 조감) [M2+M5] -- **대상**: 주최자 · **진입 경로**: AI 자동배치 완료 → "생성된 배치안 비교" / 스튜디오 탭 +- **대상**: 주최자 · **진입 경로**: SCR-03 AI 자동배치 위저드 ②단계 "배치안 생성" 완료 → ③단계(동일 다이얼로그 내 전환). **v2.6부터 별도 페이지가 아니라 위저드 ③단계 화면으로 실현**(PLANNING v3.5 M2-1 (3) 화면 계약, 구현 정본 `AutoLayoutDialog.tsx` phase `result`) — 기존 선택/비교 UX 계약은 보존하고 진입·S7 생성·저장 계약만 개정. - **레이아웃**: - 1. 헤더: "AI 생성 배치안 3건 — 조건: 목표 510부스, 프리미엄 15%, 무대 1" + 조건 수정 버튼 - 2. 배치안 카드 3열 그리드: 각 카드에 **S7 아이소메트릭 조감 이미지(AI 생성 라벨+워터마크)**, 지표(부스 수·판매면적·통로 폭 최소값·위반 수), 라디오 선택 - 3. 하단 비교 테이블(지표 나란히) + 우측 고정 CTA "이 안으로 편집 시작" + 1. 위저드 다이얼로그 헤더(AiLabel "AI 자동배치" + 제목) + 단계 표시기("① 어디에 → ② 조건 → ③ 배치안 선택" — ①②는 완료 체크, ③ 활성) + 2. **배치안 카드 3열 그리드**(카드 전체가 라디오 선택 영역): 각 카드 상단 이미지 슬롯은 **기본이 점선 테두리 CTA 박스** — 안내 문구 "조감 이미지는 필요할 때만 생성합니다" + 보라 AI 버튼 **"조감 이미지 생성"**. **S7 조감은 자동 생성되지 않는다**(쿼터 보호 — M2-1 원칙 3): 버튼 클릭 시에만 `POST …/auto-generate/preview`로 RenderJob 발행 → WebSocket 구독으로 진행 상태 갱신 → 완료 시 카드에 **`AiImage`**(S7 홀 전경 샷 라벨 + 대각 워터마크 "AI 생성 예상 이미지 — 실제 시공 결과와 다를 수 있습니다" + 고지 "계약·심사 서류에 사용 불가") + 3. 카드 본문: 안 라벨(1안/2안/3안), 지표 리스트(부스 수/목표 · 판매면적㎡ · 최소 통로폭m · 위반 건수 — 위반>0 빨강, 0건 녹색) + **WISE AI 요약**(AiLabel + 안 특성 한 줄, 예: "통로 가시성을 우선한 안입니다") + 4. 그리드 하단 안내 문구: **"생성한 조감 이미지는 자동 저장되어 시각화 갤러리에서 다시 보거나 공사 옥션 참고 이미지로 쓸 수 있습니다"** — 이미지는 `render_job` 영속(일회성 미리보기로 휘발 금지), 렌더 갤러리(SCR-12) `boothRef=HALL-{hallId}` 재열람 + M15 옥션 자료 패키지 `MaterialPackage.aiImageUrl` 재사용(M2-1 원칙 4) + 5. 하단 액션: 좌 "조건 수정"(②단계 복귀) / 우 주 CTA **"이 안으로 편집 시작"** — 클릭 시 **`POST …/apply-option`으로 선택안을 실제 배치안 버전으로 저장**(3안은 비교 단계까지 미저장 미리보기 — M2-1 원칙 5. 저장 중 버튼 라벨 **"저장 중…"** 비활성) 후 다이얼로그 닫힘 → 에디터 캔버스(SCR-03) 진입(적용 홀이 현재 라우트와 다르면 해당 홀 배치 라우트로 이동) +- **이미지 확대 라이트박스(`.kx-lightbox`, v2.6 신설)**: 생성 완료된 조감 이미지 클릭 → 확대 팝업(`role="dialog"` `aria-modal`, 배경 클릭·Esc 닫기) — 원본 크기 이미지 + **워터마크 고지 문구 유지**("AI 생성 예상 이미지 — 실제 시공 결과와 다를 수 있습니다. 계약·심사 서류에 사용 불가.") + 액션 2개: **"이미지 저장"**(`` 다운로드) / "닫기". - **샘플 지표 산술 정합(v2.5 — B-08 정정)**: 판매면적 샘플은 부스 수 × 기본 3×3m(9㎡) 기준으로 통일 — **510부스 = 4,590㎡**(SCR-03 하단 상태 바의 486부스 = 4,374㎡와 동일 산식). 기존 4,420㎡ 표기는 산술 오류로 폐기. -- **상태**: S7 생성 중 — 카드 이미지 영역 스켈레톤+"조감 생성 중…" · 실패 — 도면 탑뷰 래스터로 대체 표시 + 재시도. +- **상태**: S7 미요청(기본) — 점선 CTA 박스(스켈레톤 아님) · 생성 요청 중 — 버튼 "요청 중…" 비활성 · 생성 중 — AiImage QUEUED/RUNNING 스피너 · 생성 실패/큐 미가용 — 오류 노트("이미지 생성 큐가 준비되지 않았습니다…") 표시하되 **배치안 선택·적용은 계속 가능** · apply-option 저장 실패 — 오류 노트("배치안 저장 실패: …") + 재시도. - **Stitch 프롬프트**: ``` -A comparison screen showing 3 AI-generated exhibition floor layout options, Korean B2B web app, desktop 1440px, light theme, blue #0066B3 primary, purple #6D4AFF for AI labels. All UI text in Korean. Header: title "AI 배치안 비교", subtitle "조건: 목표 510부스 · 프리미엄 15% · 무대 1개소", outlined button "조건 수정". Three large cards in a row, each card contains: an isometric 3D-style rendering of an exhibition hall filled with rows of white booths (bird's-eye view), a small purple chip "AI 생성" and a faint diagonal watermark "AI 생성 예상 이미지" on the image, card title "배치안 A/B/C", metric rows "부스 510개 · 판매면적 4,590㎡ · 최소 통로폭 3.2m · 위반 0건" (option C shows "위반 2건" in red), and a radio button "선택". Below the cards: a compact comparison table with the same metrics side by side. Bottom right: primary blue button "이 안으로 편집 시작". Clean, decision-focused layout. +A modal wizard dialog (step 3 of 3) for comparing AI-generated exhibition floor layout options, in a Korean B2B web app "KINTEX AI 전시관리", desktop 1440px, light theme, blue #0066B3 primary, purple #6D4AFF for AI actions and labels. All UI text in Korean. The dialog floats on a dimmed backdrop over a floor plan editor. Dialog header: a small purple chip "AI 자동배치" next to the title "평면도 안 자동 배치", subtitle "전시장 평면도를 고르고 조건을 입력하면, 도면 바닥면 안에 배치안을 생성합니다", close X button. Below the header a 3-step indicator "① 어디에 → ② 조건 → ③ 배치안 선택" with steps 1 and 2 marked done (check) and step 3 active in blue. Body: three selectable option cards in a row, each with a radio button and title "1안 / 2안 / 3안". Card 1 and Card 2: the top image slot is an empty placeholder box with a dashed border, caption "조감 이미지는 필요할 때만 생성합니다" and a purple button with sparkle icon "조감 이미지 생성". Card 3: the top slot is filled with an isometric bird's-eye rendering of an exhibition hall full of white booth rows, a small purple chip "AI 생성 · S7 홀 전경" and a faint diagonal watermark "AI 생성 예상 이미지" across the image. Each card body shows metric rows "부스 508 / 510 · 판매면적 4,572㎡ · 최소 통로폭 3.2m · 위반 0건" (one card shows "위반 2건" in red) and a short purple-accented AI summary line like "통로 가시성을 우선한 안입니다" with a tiny "WISE AI" chip. Under the card grid a helper note: "생성한 조감 이미지는 자동 저장되어 시각화 갤러리에서 다시 보거나 공사 옥션 참고 이미지로 쓸 수 있습니다". Dialog footer: ghost button "조건 수정" on the left, primary blue button "이 안으로 편집 시작" on the right. Clean, decision-focused modal layout. ``` --- @@ -1933,6 +1940,7 @@ A mobile "my ticket wallet" screen for an exhibition visitor, 390px width, light | 버전 | 일자 | 작성자 | 내용 | |---|---|---|---| +| **v2.6** | 2026-07-14 | designer | **SCR-03/04 — PLANNING v3.5 §M2-1 "자동 배치 이지 플로우(3단계 위저드)" 정합(구현 정본 `AutoLayoutDialog.tsx`·`BoothLayoutEditorPage.tsx`·`FloorplanCanvas.tsx`·`hallFloorplan.ts`에 맞춘 스펙 문서화).** ①**SCR-03**: "AI 자동배치" 버튼 = **3단계 위저드 모달(`.kx-auto`) 진입 모드** 신설 절 추가 — ① 어디에(전시장>홀>구역 **셀렉트 3단 캐스케이드**, 소스 `GET /api/halls/tree`(V60 hall_zone)·"홀 전체" 기본·트리 실패 degraded 진행) → ② 조건(자연어 한 줄+"AI 해석" `…/auto-generate/interpret`→**AI 해석 폼**이 최종 권위, degraded 수동 입력) → ③ 배치안 선택(SCR-04). 툴바에 **홀 선택 셀렉트**(전시장 optgroup) 추가, 캔버스는 **실측 홀 도면 JPG의 전시 바닥면 캘리브레이션 영역(FLOOR_REGIONS)에 홀 좌표계 정렬**(부스가 평면도 안에 표시 — M2-1 원칙 1) 명문화, 생성 중 상태를 캔버스 오버레이→위저드 내 진행 화면으로 정정, Stitch 프롬프트에 홀 셀렉트·도면 JPG 베이스 반영 ②**SCR-04**: 별도 페이지→**위저드 ③단계 화면으로 실현** 재정의 — 3안 카드 그리드에서 **조감(S7)은 자동 생성 금지, 카드별 점선 CTA "조감 이미지 생성" 클릭 시에만 `…/auto-generate/preview` RenderJob 발행**(원칙 3), 생성 후 AiImage(워터마크+고지) 표시, **이미지 클릭→확대 라이트박스(`.kx-lightbox`) 신설**(고지 문구 유지+"이미지 저장" 다운로드+닫기, 원칙 4)·`render_job` 영속→시각화 갤러리 `boothRef=HALL-{hallId}` 재열람·M15 옥션 참고 이미지 재사용 안내 문구, **"이 안으로 편집 시작" = `apply-option` 실저장**(저장 중 "저장 중…" 표기) 후 에디터 진입(원칙 5), 하단 비교 테이블 항목은 카드 내 지표+AI 요약으로 흡수, 상태 6종 재정의(S7 미요청 점선 CTA 기본·생성 실패에도 선택/적용 계속 가능), **Stitch 프롬프트 위저드 3단계 구조로 전면 갱신**(단계 표시기·점선 CTA 2장+생성 완료 1장·산술 정합 508부스=4,572㎡ 동일 산식). 신규 토큰 0·타 절 무수정·PLANNING.md·src 무수정 | | **v2.5** | 2026-07-14 | designer | **BACKLOG designer 잔여 티켓 일괄 해소(B-01·B-04~B-08·B-10) — 소유자 지시 "백로그 미진행 사항 진행".** 기존 구조·번호 체계·토큰 불변(신규 토큰 0), 스펙 정정·순증만. ①**B-01(Major)**: SCR-06에 **조립부스 모드** 신설(PLANNING M3 Phase 1 범위 — 신규 SCR 없이 모드 분기) — 좌측 옵션 패널 3그룹(간판 문구·서체·색/가구 표준 자재 카탈로그 그리드(수량 스테퍼+기본 제공·추가 ₩ 칩)/조명 스포트 스테퍼·주간야간), 옵션 변경 시 3D 프리뷰·S1 예상 사진 즉시 갱신, Before/After "기본형↔옵션 적용", 옵션 견적 요약+CTA "옵션 신청 제출"(장치업체 컨펌 미적용 — 주최측 시공), 상태(마감 잠금·문구 미입력 비활성·오탈자 배지) + **전용 영어 Stitch 프롬프트 1종**(견적 산술 정합 30,000+70,000+15,000+40,000=155,000). SCR-05에 조립부스 분기(헤더 표기·옵션 마감 할 일 카드·장치업체 초대 미노출·스튜디오 진입 분기) 순증 ②**B-04**: 화면 수 표기 정정 — §3 헤더 "총 14개(웹12+모바일2)"→**P0 코어 15개(웹 13 = SCR-01·HOME·02~12 + 모바일 2)**(SCR-HOME 신설 반영), §2.8-2 집계 문장의 SCR-T0~T3 4화면 누락 정정 **85→총 89화면**(✅Stitch 83·미생성 6 상태 정합 — v2.2 변경이력과 일치화) ③**B-05**: SCR-02 사이드바 "정산" 메뉴 IA 불일치 해소 — §2-1 주최자 사이트맵에 "정산·결제 [M9, P1] — Phase 2 (SCR-21)" 추가 + SCR-02에 정합 메모(프롬프트 메뉴 문구 유지) ④**B-06**: SCR-01 Stitch 프롬프트에 스펙에만 있던 "이메일 인증으로 로그인" 버튼 추가 ⑤**B-07**: SCR-03 프롬프트에 툴바 "공유" 버튼 추가 + 위반 요약(차단2·경고3)↔캔버스 핀 불일치 정정(주황 빗금 부스 1→3개, 핀 3·4·5 — 스펙 레이아웃 ③에 핀·건수 명시로 1:1 고정) ⑥**B-08**: SCR-04 샘플 지표 산술 오류 정정 — 판매면적 4,420㎡→**4,590㎡**(510부스×9㎡, SCR-03 486부스=4,374㎡와 동일 산식 명문화) ⑦**B-10**: SCR-10/11 헤딩·메모에 **Phase 2**(PLANNING §9 홀매니저 대시보드), SCR-M1/M2에 **Phase 3**(현장 모바일 운영 도구) 로드맵 라벨 부착(화면·구현 선행 확보 명시 — P0 우선순위 컬럼과 구분) + **조명 배치안 제안(M4a) 전용 UI 검토 메모**를 SCR-06에 신설(Phase 1은 조명 프리셋+S2 야간 컷으로 흡수, 조도 히트맵·기구 배치 캔버스 전용 SCR은 정밀 조도 시뮬레이션(P2)과 함께 분리 검토 — 현 시점 신규 화면 없음). PLANNING.md·src 무수정 | | **v2.4** | 2026-07-12 | designer | **공개 사이트 비주얼·모션 전면 리뉴얼 스펙 신설(소유자 확정: "코엑스처럼 세련되게 — 히어로 배경·애니메이션·비주얼, 지금 착수").** §3C에 **3C-V 공개 사이트 비주얼·모션 스펙** 절 순증 — 기존 SCR-T0~T3·SCR-P* **구조는 불변**, 그 위에 비주얼/모션 레이어만 격상(구조 재설계 아님). ①**비주얼 폴리시(V-1)** 풀블리드·공백 없음·섹션 리듬(밴드↔카드 교대·96/64/40px)·여백·라운드 8px·소프트 앰비언트 그림자·타이포 위계 강화·선 SVG·이모지 금지·다크/라이트·2:3 포스터 카드. ②**모션 토큰(V-2)** duration(`--motion-fast 150`/`base 240`/`slow 400`/`hero 600`/`countup 1200`)·easing(`--ease-emphasized/standard/decelerate`) 신설(컬러 신규 토큰 0). ③**섹션별 배경·애니메이션 트리거 매핑(V-3)** 풀블리드 히어로(라이트 파랄랙스+인트로 리빌)·통계 카운트업·AI 타일 스태거·쇼케이스 hover 리프트/이미지 줌·행사 레일 오토스크롤·기획 브리핑 grow·공통 스크롤 리빌(IO threshold 0.15·once). ④**이미지 소스 매핑(V-4)** build 내장 `/media/`(hero·bands·poster·patterns 계약)·부재 시 그라디언트+패턴 폴백(레이아웃 시프트 0)·preload/lazy/webp/srcset. ⑤**접근성(V-5)** `prefers-reduced-motion` 필수 — 파랄랙스/오토스크롤 정지·카운트업 즉시·리빌 instant·모션은 전부 장식(정보 비의존)·양 테마 WCAG AA. ⑥**성능(V-6)** CSS 우선·`transform`/`opacity`만·`will-change` 절제·60fps·강등 순서. ⑦**프론트 계약(V-7)** `.pub-reveal`/`--stagger`·`.pub-hero__bg[data-parallax]`·`.pub-card--lift`·`.pub-card__media img` 줌·`.pub-countup`·`.pub-rail--auto`·폴백 유틸, **PublicShell 하위만 스코프**(AppShell/MDI·SCR-A*·모바일 미주입). ⑧**영어 Stitch 프롬프트 2종(V-8·V-9)** — 프리미엄 전시장 홈페이지(SCR-T1 시네마틱 히어로·스크롤 리빌·카운트업·hover 줌·오토스크롤·폴백·reduced-motion, 제품명 정확·NO emoji·선 SVG·라이트/다크) + 3-트랙 관문(SCR-T0 동일 톤 격상). **경계 준수**: visitor(T1)만 풀 시네마틱, business/agency는 B2B 톤 유지+공통 모션 절제 적용. 신규 컬러 토큰 0·PLANNING.md·src 무수정. | | **v2.3.2** | 2026-07-12 | designer | **SCR-T1 — AI 전시·행사 기획 브리핑(연간·월간 선제 제시) 추가(소유자 추가 지시 2026-07-12).** 단발 질의응답을 넘어 **AI가 개최 예정 전시·행사를 먼저 큐레이션**하는 섹션을 히어로 AI 능력 타일 직하(레이아웃 4번)에 신설 — **연/월 관점 토글**(① 연간=12개월 타임라인+분기 하이라이트+AiLabel "AI 요약" 헤드라인, ② 월간=선택 월 캘린더/리스트+AI 월간 요약), 연/월 전환 시 AI가 해당 기간 데이터 근거로 요약·추천 갱신. **중복 회피**: 하단 "진행 중/이번 달/다음 달" 쇼케이스(레이아웃 5)와 달리 본 섹션은 **연간 기획 관점**이 차별점, 월간은 동일 event 소스로 정합. 구성요소 `AiPlanningBriefing` 추가, 이하 레이아웃 5~11 재번호. **데이터 원천** — 신규 공개 엔드포인트 제안 `GET /api/public/events/planning?view=year|month&year&month`(크롤 적재 `exhibition`/`event`를 개최연·월 그룹 조회, AI 기간 요약은 AiTextRouter Claude→Ollama 폴백이 해당 기간 DB만 근거·근거 인용·캐시, DB 서빙·외부 실시간 호출 없음, 계약 제안). 상태(로딩·성공·**degraded(요약 미가용→데이터만 노출)**·빈·에러·기간 전환 부분 로딩) 정의. **Stitch 프롬프트 갱신** — 연간 타임라인+"AI 요약" 헤드라인("2026년은 상반기 스마트팩토리·로봇, 하반기 헬스케어·친환경…")+월간 요약("이번 달은 로봇·헬스케어 전시가 집중됩니다") 문단 추가, 쇼케이스와 구별 명시. 세련된 홈페이지 톤·풀블리드·반응형·라이트/다크·크롤 적재 DB 근거 원칙은 유지. 신규 토큰 0·PLANNING.md·src 무수정 |