release: v0.10.0
All checks were successful
ci / build (push) Successful in 42s
release / release (push) Successful in 1m5s

This commit is contained in:
Yun Chan 2026-08-29 21:19:26 +09:00
parent 2b7fa32b5b
commit 6930906583
61 changed files with 15165 additions and 82 deletions

View file

@ -0,0 +1,216 @@
# 두 쇼케이스 구현 청사진
> **최종 정본 (H04 반영, 2026-08-29):** 이 문서는 구현과 사용자 게이트를 모두 통과한 최종 정보 구조, 진실성 계약, 화면 상태, 토큰, 성능 예산과 자동 게이트를 기록한다. 초기 9장 구성과 지도·통근 중심 설계는 폐기됐다.
## 1. 공통 계약
- `한남자리`와 `철판클럽`은 디자인 검증용 가상 브랜드다.
- 실제 사무소, 실제 매물, 실제 매장, 실제 가격, 실제 주문, 실제 가맹 문의로 오인될 표현을 만들지 않는다.
- 고지는 푸터 한 곳에 숨기지 않는다. 같은 진실 범위의 가장 가까운 의미 부모가 한 번 소유하고, 제한이 달라지는 카드·가격·매장 상태·제출 행동에서만 새로 표시한다.
- 생성 이미지는 물성, 공간, 음식과 현장 분위기만 소유한다. 가격, 상태, 주소, 분석, 버튼과 표지는 실제 문서 객체가 소유한다.
- 정적 데모의 계산은 실시간 인공지능이나 서버 전송으로 표현하지 않는다.
- 화면이 실패해도 입력값과 확인된 사실은 남기고, 성공 상태를 가장하지 않는다.
- 공개 경로와 운영 경로는 같은 브랜드 토큰을 공유하되 표현, 움직임, 정보 밀도 다이얼은 따로 둔다.
## 2. 경로와 소유권
| 제품 | 경로 | 주 임무 | 표현 / 움직임 / 밀도 |
|---|---|---|---|
| 한남자리 공개 | `/work/hannam-jari/` | 다섯 조건 입력, 예시 브리핑, 세 집 비교, 서류철, 사람 인계 | 7 / 4 / 5 |
| 한남자리 관리자 | `/work/hannam-jari/admin/` | 표시 검수, 게시 방어선, 사람 검토, 감사 | 4 / 3 / 8 |
| 철판클럽 공개 | `/work/griddle-club/` | 메뉴, 조합, 매장, 포장 행동 | 8 / 6 / 4 |
| 철판클럽 가맹 | `/work/griddle-club/franchise/` | 운영 조건, 비용 미정, 문의 준비 | 5 / 3 / 6 |
공유 저장소 수정 지점:
- `apps/site/src/data/work.ts`: 두 쇼케이스와 하위 경로 등록
- `apps/site/gate.config.json`: 네 경로 디자인 게이트 등록
- `apps/site/tools/showcase-duo-e2e.mjs`: 결정적 기능과 실패 상태 검증
- `apps/site/tools/design-gate.mjs`: 네 경로의 정적 계약과 실제 렌더를 320, 375, 390, 768, 1440에서 감사
- `apps/site/tools/capture-showcase-duo.mjs`: 본 화면과 핵심 보조 화면 캡처
- `apps/site/tools/verify.mjs`: 재귀 정적 검사, 실렌더 감사와 전용 시나리오 포함
## 3. 한남자리 공개 화면
### 밝은 Hero와 조건 도크
- 제목은 `한남에서, 내 기준에 맞는 집부터.`다.
- 서울 생활권의 생성 외관 이미지를 밝은 지면 위에 두고, 검정은 마지막 사람 인계 장면에서만 사용한다.
- 의사결정 SSOT는 거래 형태·예산·최소 전용면적·입주 희망일·필요 주차 다섯 필드뿐이다.
- 월세는 보증금과 월 납부액을 분리한다. 화면에 없는 통근·일조·좌표·조망은 추천 근거로 쓰지 않는다.
- 입력 전송은 없고, 명시적으로 저장할 때만 다섯 필드를 현재 브라우저에 보관한다.
### 예시 AI 브리핑과 세 집 비교
- 분석 전에는 중립 상태를 유지한다. 실행 뒤 `조건과 맞는 점 / 조정이 필요한 점 / 중개사와 확인할 점` 세 묶음을 만든다.
- 세 후보의 가격·면적·입주·주차를 동일한 입력과 비교하며, 선택 후보를 비교표·서류철·상담 인계에 동기화한다.
- 모든 후보와 생성 사진의 가상·연출 범위는 가장 가까운 공통 부모에서 표시한다.
### 탭형 검토 서류철과 사람 인계
- 서류철은 기본·가격·권리·입지 확인·시설과 관리 다섯 탭이며 클릭과 방향키·Home 키를 지원한다.
- 권리, 실제 이동 시간, 현장 상태, 입주 가능일처럼 근거가 없는 항목은 확인 필요로 남긴다.
- 마지막 장면은 `AI가 좁히고, 공인중개사가 확인합니다.`라는 역할 분리를 보여준다.
- 상담 흐름은 외부 전송 없는 모의 대화상자이며 닫기·바깥 클릭·Escape 뒤 선택 상태와 초점을 함께 복구한다.
## 4. 한남자리 관리자
### 첫 화면 구조
- 일반적인 지표 카드 세 장과 차트로 시작하지 않는다.
- 검수 대기열이 화면의 중심이고 우측 조사관이 선택 행의 전체 맥락을 가진다.
- 표 열은 상태, 매물, 거래, 가격, 마지막 확인, 표시 검수, 분석 검토, 담당이다.
- 검색, 상태 필터, 정렬, 키보드 행 선택과 빈 결과 초기화를 제공한다.
### 이중 게시 게이트
`쇼케이스 미리보기`는 다음 조건을 모두 통과할 때만 가능하다.
- 상시 데모 표지
- 개별 매물 예시 표지
- 생성 이미지 출처와 증빙 불가 표지
- 실제 연락 기능 비활성
- 실제 주소와 등록번호 없음
- 결정적 예시 분석 표지
`실제 광고`는 다음이 모두 실제 자료가 아니므로 모든 fixture에서 차단한다.
- 실제 등록 사무소 정보
- 실제 중개의뢰 관계
- 광고 동의
- 거래 가능 상태
- 실제 서류와 미디어 권리
- 공인중개사 최종 승인
가상 데이터로 실제 광고 게이트를 통과시키는 성공 상태는 구현하지 않는다.
### 조사관 탭
1. 기본
2. 표시·광고
3. 서류
4. AI 분석
5. 문의·일정
6. 변경 이력
표시 검수는 `통과`, `누락`, `충돌`, `오래됨`, `해당 없음`을 구분하고 법령, 행정 기준, 내부 운영 기준을 한 범주로 섞지 않는다. 누락 항목은 해당 필드로 이동한다.
### 운영 상태
- 대기열 없음과 필터 결과 없음은 서로 다른 상태다.
- 권한상 볼 수 없음, 선택 행 계약 완료, 분석 실패·취소·오래됨을 제공한다.
- 저장 실패는 낙관적 성공을 되돌리고 입력을 보존한다.
- 버전 충돌은 다른 담당자의 버전과 현재 편집본을 덮어쓰지 않고 비교한다.
- 실제 게시 요청은 중복 클릭, 권한, 객체 버전, 규칙 묶음, 감사 로그 쓰기 중 하나라도 실패하면 닫힌 상태를 유지한다.
- 조사관과 대화상자는 닫기, 바깥 클릭, Escape가 패널과 선택 행 강조를 함께 해제한다.
## 5. 철판클럽 공개 화면
### 첫 화면과 메뉴
- 제목은 `눌러 굽고, 바로 건넨다.`이다.
- 일반 고객 행동인 메뉴와 매장 찾기가 가맹보다 높은 위계를 가진다.
- 대표 두 메뉴는 큰 사진과 한국어 이름으로, 나머지는 세 열 편집 리듬으로 보여준다.
- 모든 가격에 `화면 계산용 예시`를 가까이 붙인다.
- 검증하지 않은 인기, 판매량, 순위 배지를 쓰지 않고 `대표`만 쓴다.
- 품절, 매장 미제공, 준비 중을 색만이 아니라 문구와 행동 제한으로 표시한다.
### 조합기
- 단품·세트, 패티, 치즈, 양파, 피클, 소스, 곁들임, 음료와 받을 예시 매장을 선택한다.
- 세트의 곁들임이나 음료가 비면 완료 상태가 되지 않는다.
- 매장별 품절 재료가 있으면 조합은 보존하고 다른 매장 행동을 제공한다.
- 매장이 닫혀도 조합을 지우지 않는다.
- 가격 자료가 없으면 합계를 만들지 않는다.
- 성공 행동은 주문이 아니라 `선택 내용 저장`이다.
- 저장 결과는 현재 기기의 화면 상태이며 서버 전송으로 말하지 않는다.
### 알레르기와 매장
- 재료를 빼면 예시 알레르기 표시는 다시 계산한다.
- 같은 철판과 도구의 교차 접촉 경고는 어떤 선택에서도 남긴다.
- 매장은 `예시 매장`으로 표시하고 동네 범위만 제공한다.
- 실제 도로명 주소, 전화번호, 거리와 위치 권한을 만들지 않는다.
- 영업 중, 마지막 주문 임박, 종료, 임시 휴무, 확인 필요를 각각 다른 행동으로 연결한다.
## 6. 철판클럽 가맹 화면
- 첫 사진은 버거 접사보다 조리, 포장, 응대 동선이 보이는 운영 장면이다.
- 브랜드 이유, 운영 방식, 희망 상권, 점포 상태, 개설 순서, 비용 상태, 교육과 품질, 문의 준비 순서로 읽힌다.
- 검증하지 않은 최소 면적, 가맹비, 평균 매출, 회수 기간과 예상 수익을 만들지 않는다.
- 비용 항목은 금액이 아닌 `미정`과 미정 이유를 보여주고 합계를 만들지 않는다.
- 면적 입력은 ㎡와 평을 함께 보여주지만 적합 판정으로 표현하지 않는다.
- 문의는 실제 이름과 연락처를 받지 않는 체험이다.
- 성공 상태는 `문의 준비가 끝났어요`이며 실제 접수나 담당자 연락을 주장하지 않는다.
- 실패 상태는 입력을 보존하고 다시 시도 행동을 제공한다.
## 7. 토큰과 조판
### 한남자리 공개
- 바탕 `#EEECE5`
- 검정 `#0F0F0E`
- 어두운 면 금색 `#C6A15B`
- 밝은 면 갈금 `#6F5420`
- 금색 점유율 5% 이하, 선택·검토·확인 표시에만 사용
- Pretendard 또는 SUIT 계열 한 패밀리
### 한남자리 관리자
- 밝은 중립 바탕, 흰 패널, zinc 계열 경계
- 브랜드 검정과 갈금은 선택 행, 현재 탭, 방어선 상태에만 사용
- 표 본문 13~14px, 일반 본문 15~16px, 지나치게 작은 보조문 금지
- radius는 작은 제어 6~8px, 패널 10~12px 이내
### 철판클럽
- 바탕 `#F4F1E9`
- 글자 `#211F1C`
- 코발트 `#2147E7`
- 코발트 점유율 8~10%, 행동과 포장 재료에 집중
- 스테인리스, 치즈와 불빛은 사진만 소유
- Pretendard Variable 한 패밀리
## 8. 반응형과 접근성
- 320, 390, 768, 1440에서 가로 넘침이 없어야 한다.
- 모바일 주 행동은 최소 높이 44px이다.
- 첫 제목은 320px에서도 두 줄 이내를 목표로 하되 한국어 어절을 강제로 쪼개지 않는다.
- 고정 머리글과 하단 행동은 안전 영역을 포함한다.
- 가로 표는 명시적 스크롤 용기와 표 설명을 가진다.
- 현재 선택, 품절, 차단, 경고는 색과 함께 텍스트·아이콘·속성으로 표현한다.
- 상태 변경은 `aria-live`, 폼 전체 실패는 `role=alert`로 알린다.
- 감소 모션에서는 자동 이동, 부드러운 스크롤과 장식 변환을 끈다.
- 자바스크립트가 없어도 제목, 핵심 사실, 예시 고지와 경로 설명은 남는다.
## 9. 이미지와 성능 예산
- 데스크톱 Hero 목표 180~240KB, 하드 상한 320KB
- 모바일 Hero 목표 140~190KB, 하드 상한 240KB
- 카드 목표 65~100KB, 하드 상한 130KB
- 첫 화면 동일 출처 자산은 데스크톱 350KB, 모바일 260KB 이하를 목표로 한다.
- Hero만 높은 우선순위를 사용하고 나머지는 지연 로딩한다.
- 모든 이미지에 고정 크기, 반응형 크기 힌트, 대체 문구를 둔다.
- 생성 이미지 픽셀의 글자와 로고는 자동 한자 검사로 잡히지 않으므로 별도 육안 감사한다.
## 10. 자동 게이트 계약
정적 게이트:
- 모든 하위 HTML 재귀 검증
- 모든 하위 CSS 재귀 스타일 검사
- 자바스크립트 문법 검사
- 한자 금지 검사
- 상대 경로, CSS 변수, 한글 조판 무결성 검사
실제 브라우저 게이트:
- 네 경로 × 네 폭의 구조와 오버플로 감사
- 한남자리 조건 분석, 단위 전환, 지도·목록 동기화, 상담 데모
- 한남자리 관리자 검색·정렬·필터·탭·게시 차단·대화상자 해제
- 철판클럽 메뉴, 조합기, 품절·영업 종료, 알레르기, 저장 성공·실패
- 철판클럽 가맹 면적 환산, 비용 미정, 검토 복귀, demo 성공·실패
- 키보드 순서, 접근성 자동 검사, 감소 모션, 자바스크립트 없음
- 깨진 이미지, 콘솔 오류, 네트워크 실패, 누적 배치 이동과 최초 주요 표시 시간
게이트의 자동 승인은 무조건 통과가 아니다. 검사 결과가 녹색일 때만 승인 기록을 남기고, 실패 시 관련 단계로 되돌아가 수정한다.