재료 준비
냉장 보관과 당일 준비 동선을 분리합니다.
diff --git a/apps/site/design.md b/apps/site/design.md index e6cfb11..f2fd47e 100644 --- a/apps/site/design.md +++ b/apps/site/design.md @@ -1135,3 +1135,26 @@ Pretendard `dynamic-subset` 은 유니코드 범위별로 파일을 쪼개고 - 위 전용 E2E는 저장소 전체 `verify.mjs`의 L6에 포함한다. 배포 전에는 전체 게이트를 다시 실행한다. - 2026-08-26 국소 조정: 배포 텍스트에서 한자를 전부 차단하고, 쇼케이스의 세로 조판·한지/먹·인장/도장·다도 연출은 가로 라벨, 중립 상태 배지, 금속 활자·편집 도구, 독서·정밀 목공 언어로 교체했다. 한국어 고유명사와 역사 소재는 유지하되 동아시아 전통 장식을 제품의 시각 단축어로 쓰지 않는다. + +## 한남자리 · 철판클럽 쇼케이스 듀오 (2026-08-29) + +### 한남자리 — 집 목록이 아닌 개인 브리핑 데스크 + +- 공개 페이지는 `맞춤 브리핑 → 세 집 비교 → 선택 서류철 → 중개사 인계`의 다섯 장면으로 끝낸다. 같은 경고와 검수 원장을 공개 페이지에 반복하지 않는다. +- 입력 기준은 거래 형태·예산·최소 전용면적·입주 희망일·필요 주차 다섯 개뿐이다. 화면에 없는 조건을 점수나 추천 근거로 사용하지 않는다. +- AI는 조건 관계를 해석하고, 공인중개사는 권리·현장·계약 사실을 확인한다. 분석 전 화면은 중립 상태이며 생성 이미지와 예시 자료는 소유 범위 안에서 바로 표시한다. +- 시각 방향은 석재색 종이 면, 서울의 청회색, 제한된 브론즈 한 색이다. 어두운 면은 마지막 인계 장면에만 써서 검정·금색 부동산 광고 문법을 피한다. +- 관리자 화면은 공개 페이지의 설명을 복제하지 않고 게시 전 사실·표시·AI 근거·변경 이력을 검수한다. 선택 전에는 표가 전체 폭을 쓰고 선택 뒤에만 조사관이 열린다. + +### 철판클럽 — 도심 철판 버거와 운영 조건의 두 갈래 + +- 공개 페이지는 주문 뒤 눌러 굽고 조립하는 한 끼의 속도와 버거 조합기를 보여 준다. 가맹 페이지는 상권·점포·전용 면적·주방 동선·미정 비용을 먼저 보여 준다. +- 코발트는 서울 도심 간판처럼 제한적으로 쓰고, 크림 종이 면·검정 활자·실제 조리 동선에 가까운 생성 이미지로 국내 빠른 식사 매장의 감각을 만든다. +- 가상의 브랜드이므로 매출·수익률·실제 매장·계약 조건을 꾸미지 않는다. 미정 비용은 미정으로 남기고 문의 전 확인 목록으로 연결한다. + +### 6단계 증거 + +- 실제 Chromium·WebKit E2E: **90/90 시나리오 · 350/350 단언 · 12/12 캡처** 통과. +- 공개·하위 화면 실렌더 감사: 320·390·768·1440에서 **8/8 통과**. axe, HTML, CSS, JS, 한자 검사도 통과했다. +- 갤러리 카드 네 장과 공유 이미지 두 장은 확정 화면을 실제 Chrome으로 다시 캡처했다. +- 구현 중 발견한 21개 교훈은 `research/showcase-duo-learning-ledger-2026-08-29.md`에 근거와 함께 남겼고, 재사용 가능한 규칙은 `packages/skill/references/trustworthy-showcases.md`와 관련 게이트 문서에 반영했다. diff --git a/apps/site/gate-report.md b/apps/site/gate-report.md index 2f1d832..1b4358a 100644 --- a/apps/site/gate-report.md +++ b/apps/site/gate-report.md @@ -1,18 +1,18 @@ -# 게이트 리포트 — 2026-08-26 09:11 +# 게이트 리포트 — 2026-08-29 12:12 **전 항목 통과 — 배포 가능** ``` PASS L0 정적 — SKIP — checks.static=false PASS 죽은 선택자 — SKIP — checks.deadCss=false -PASS twentyoz-products 토큰 위생 — 색 0·radius 1 리터럴(토큰 1파일) +PASS twentyoz-products 토큰 위생 — 색 0/0건(0종)·radius 1종·토큰 1파일/73개 PASS twentyoz-products SEO/meta — title 17자·desc 85자·OG✓·alt 0결 PASS twentyoz-products/single 오버플로 — 320/375/390/768/1440 PASS twentyoz-products/single h1 1줄 PASS twentyoz-products/single 수축 없음 PASS twentyoz-products/single 리듬·트랙 PASS twentyoz-products/single 대비 AA -PASS twentyoz-products 스케일×폭 h1 — scales 1/1.3 +PASS twentyoz-products 스케일×폭 h1 — 최대 1줄 · scales 1/1.3 PASS twentyoz-products 브랜드 1줄 PASS twentyoz-products/single 터치타깃 — 컨트롤 ≥44px·인라인 ≥24px PASS twentyoz-products/single 왼쪽 인셋 — 최소 텍스트 시작 20px diff --git a/apps/site/gate.config.json b/apps/site/gate.config.json index dbc1b4e..b19ac5c 100644 --- a/apps/site/gate.config.json +++ b/apps/site/gate.config.json @@ -41,6 +41,124 @@ ], "h1": "h1", "brand": ".wordmark" + }, + { + "name": "hannam-jari", + "path": "public/work/hannam-jari/index.html", + "views": [ + "single" + ], + "h1": "h1", + "h1MaxLines": 2, + "brand": ".brand", + "staticContract": { + "selectorFiles": [ + "public/work/hannam-jari/styles/landing.css" + ], + "selectorDocuments": [ + "public/work/hannam-jari/index.html", + "public/work/hannam-jari/scripts/landing.js" + ], + "hygieneFiles": [ + "public/work/hannam-jari/styles/landing.css" + ], + "tokenFiles": [ + "public/work/hannam-jari/styles/tokens.css", + "public/work/hannam-jari/styles/landing.css" + ], + "budgets": { + "colorLiterals": 64, + "radiusLiterals": 2 + } + } + }, + { + "name": "hannam-jari-admin", + "path": "public/work/hannam-jari/admin/index.html", + "views": [ + "single" + ], + "h1": "h1", + "brand": ".sidebar-brand", + "staticContract": { + "selectorFiles": [ + "public/work/hannam-jari/styles/admin.css" + ], + "selectorDocuments": [ + "public/work/hannam-jari/admin/index.html", + "public/work/hannam-jari/scripts/admin.js" + ], + "hygieneFiles": [ + "public/work/hannam-jari/styles/admin.css" + ], + "tokenFiles": [ + "public/work/hannam-jari/styles/tokens.css" + ], + "budgets": { + "colorLiterals": 256, + "radiusLiterals": 15 + } + } + }, + { + "name": "griddle-club", + "path": "public/work/griddle-club/index.html", + "views": [ + "single" + ], + "h1": "h1", + "h1MaxLines": 2, + "brand": ".brand", + "staticContract": { + "selectorFiles": [ + "public/work/griddle-club/styles/site.css" + ], + "selectorDocuments": [ + "public/work/griddle-club/index.html", + "public/work/griddle-club/scripts/site.js", + "public/work/griddle-club/franchise/index.html", + "public/work/griddle-club/scripts/franchise.js" + ], + "hygieneFiles": [ + "public/work/griddle-club/styles/site.css" + ], + "tokenFiles": [ + "public/work/griddle-club/styles/tokens.css" + ], + "budgets": { + "colorLiterals": 41, + "radiusLiterals": 6 + } + } + }, + { + "name": "griddle-club-franchise", + "path": "public/work/griddle-club/franchise/index.html", + "views": [ + "single" + ], + "h1": "h1", + "h1MaxLines": 2, + "brand": ".brand", + "staticContract": { + "selectorFiles": [ + "public/work/griddle-club/styles/franchise.css" + ], + "selectorDocuments": [ + "public/work/griddle-club/franchise/index.html", + "public/work/griddle-club/scripts/franchise.js" + ], + "hygieneFiles": [ + "public/work/griddle-club/styles/franchise.css" + ], + "tokenFiles": [ + "public/work/griddle-club/styles/tokens.css" + ], + "budgets": { + "colorLiterals": 26, + "radiusLiterals": 0 + } + } } ], "widths": [ diff --git a/apps/site/package.json b/apps/site/package.json index 56ffbfa..1c408da 100644 --- a/apps/site/package.json +++ b/apps/site/package.json @@ -10,6 +10,8 @@ "test:design:products": "node tools/design-gate.mjs --config=gate.twentyoz-products.config.json", "test:e2e:recent-showcases": "node tools/recent-showcases-e2e.mjs", "test:e2e:twentyoz": "node tools/twentyoz-e2e.mjs", + "test:e2e:showcase-duo": "node tools/showcase-duo-e2e.mjs", + "capture:showcase-duo": "node tools/capture-showcase-duo.mjs", "prebuild": "npm run build:showcase-assets", "build": "astro build", "postbuild": "node tools/no-hanja.mjs --root dist", diff --git a/apps/site/public/work/griddle-club/assets/griddle-press.webp b/apps/site/public/work/griddle-club/assets/griddle-press.webp new file mode 100644 index 0000000..3114561 Binary files /dev/null and b/apps/site/public/work/griddle-club/assets/griddle-press.webp differ diff --git a/apps/site/public/work/griddle-club/assets/hero-handoff-mobile.webp b/apps/site/public/work/griddle-club/assets/hero-handoff-mobile.webp new file mode 100644 index 0000000..4f9132b Binary files /dev/null and b/apps/site/public/work/griddle-club/assets/hero-handoff-mobile.webp differ diff --git a/apps/site/public/work/griddle-club/assets/hero-handoff.webp b/apps/site/public/work/griddle-club/assets/hero-handoff.webp new file mode 100644 index 0000000..acbed73 Binary files /dev/null and b/apps/site/public/work/griddle-club/assets/hero-handoff.webp differ diff --git a/apps/site/public/work/griddle-club/assets/kitchen-flow.webp b/apps/site/public/work/griddle-club/assets/kitchen-flow.webp new file mode 100644 index 0000000..5a86700 Binary files /dev/null and b/apps/site/public/work/griddle-club/assets/kitchen-flow.webp differ diff --git a/apps/site/public/work/griddle-club/assets/signature-double.webp b/apps/site/public/work/griddle-club/assets/signature-double.webp new file mode 100644 index 0000000..cce958c Binary files /dev/null and b/apps/site/public/work/griddle-club/assets/signature-double.webp differ diff --git a/apps/site/public/work/griddle-club/franchise/index.html b/apps/site/public/work/griddle-club/franchise/index.html new file mode 100644 index 0000000..9bf64b6 --- /dev/null +++ b/apps/site/public/work/griddle-club/franchise/index.html @@ -0,0 +1,358 @@ + + +
+ + +철판클럽 가맹 안내
++ 버거 사진만 보고 결정하지 않도록 상권, 점포, 전용 면적, 주방 동선과 아직 정할 수 없는 비용을 순서대로 보여 줍니다. +
+실제 가맹 모집이 아닌 디자인 쇼케이스입니다. 금액, 수익, 매장 수와 개점 기간을 꾸며내지 않습니다.
+
+
+ 01 수익률을 약속하지 않음
+02 점포를 보기 전 금액을 확정하지 않음
+03 실제 개인정보를 받지 않음
+어떤 운영 방식인지
조리, 조립, 포장, 전달이 서로 겹치지 않는 흐름을 먼저 검토합니다. 실제 설비와 인원은 점포마다 달라집니다.
+냉장 보관과 당일 준비 동선을 분리합니다.
패티와 양파가 움직이는 구간을 짧게 둡니다.
주문표, 유산지, 상자를 한 방향에 둡니다.
매장 손님과 배달 픽업이 부딪히지 않게 나눕니다.
운영자에게 필요한 태도
상권과 점포
아래 분류는 적합 판정이 아니라 문의 때 빠뜨리지 않을 조건 목록입니다. 권장 면적 수치는 실제 검토 뒤에만 제시할 수 있습니다.
+A
+업무가, 주거지, 역 주변, 대학가, 상점가 또는 여러 수요가 섞인 곳인지 먼저 적습니다.
+B
점포 없음, 찾는 중, 협의 중, 보유함으로 나눕니다.
+C
사용자가 입력한 ㎡와 환산한 평을 함께 봅니다. 적합 판정은 하지 않습니다.
+D
전기, 배기, 급수, 배수와 반입 경로는 점포 자료로 따로 확인합니다.
+E
음식점, 소매점, 빈 점포 등 이전 사용 상태를 확인합니다.
+개설 절차
점포, 자료, 협의와 공사 조건에 따라 기간이 달라집니다. 아래 흐름은 화면 설명용 예시이며 계약이나 개점을 보장하지 않습니다.
+희망 지역과 시작 시기를 정리합니다.
상권 종류, 점포 상태와 운영 경험을 봅니다.
주소가 정해졌다면 면적, 설비와 동선을 확인합니다.
확인 가능한 조건과 미정 항목을 나눕니다.
실제 자료와 조건을 받은 뒤 각 항목을 확인합니다.
주방, 포장대와 픽업 동선을 점포에 맞춥니다.
조리 순서와 위생 기록을 함께 익힙니다.
설비, 재료, 동선과 운영 준비를 확인합니다.
비용 항목
점포, 면적, 설비와 계약 자료가 확인되지 않아 금액을 제시하지 않습니다.
+| 항목 | 현재 상태 | 금액 | 다음 확인 |
|---|---|---|---|
| 가맹 관련 비용 | 자료 미제공 | 미정 | 실제 안내 자료 확인 |
| 교육 비용 | 범위 미정 | 미정 | 인원과 교육 범위 확인 |
| 계약 보증 관련 비용 | 조건 미정 | 미정 | 실제 계약 자료 확인 |
| 주방 설비 | 점포 필요 | 미정 | 전기, 배기와 설비 확인 |
| 가구와 집기 | 사양 필요 | 미정 | 좌석과 포장 방식 확인 |
| 인테리어 | 면적 필요 | 미정 | 전용 면적과 현장 확인 |
| 간판과 외부 표시 | 건물 조건 필요 | 미정 | 건물과 지역 조건 확인 |
| 주문 기기 | 운영 방식 필요 | 미정 | 주문과 결제 방식 확인 |
| 허가와 신고 | 지역 조건 필요 | 미정 | 관할 안내 확인 |
| 첫 물류 | 메뉴 범위 필요 | 미정 | 품목과 보관량 확인 |
| 임대 보증 관련 비용 | 점포 계약 필요 | 미정 | 임대 조건 직접 확인 |
| 합계 | 계산하지 않음 · 확인되지 않은 숫자를 더하지 않습니다 | ||
평균 매출, 예상 수익, 회수 기간과 최저 비용은 근거 자료가 없어 제공하지 않습니다.
+문의 준비 체험
+실제 이름과 연락처를 받지 않습니다. 화면 안에서 상권과 점포 조건을 정리하고 전송 전 검토 상태를 체험합니다.
+입력 내용은 서버로 보내거나 저장하지 않습니다. 성공 화면도 실제 접수가 아닙니다.
+화면 체험 완료
+제출 절차를 보여 주는 예시이며 실제 담당자에게 전송되지 않았습니다.
+ +철판클럽
서울 도심 눌림 버거
++ 얇게 눌러 가장자리는 바삭하게. 주문 뒤 조립하고 포장해, 퇴근길 한 상자로 건넵니다. +
+ +
+ 주문 뒤 조리
+단품과 세트
+포장 여부 매장별 확인
+배달 여부 매장별 확인
+GRIDDLE CLUB
+버거 조합기
+재료 선택과 예시 총액은 실제로 바뀝니다. 주문 전송 기능은 없습니다.
+철판에서 상자까지
+얇은 패티를 뜨거운 철판에 눌러 가장자리를 만듭니다.
치즈, 구운 양파, 피클을 고른 순서대로 올립니다.
유산지와 상자에 담고 포장 상태를 확인합니다.
+
+ 매장 찾기
주소, 전화, 거리와 운영 상태를 꾸며내지 않습니다. 아래 세 곳은 상태 화면을 위한 예시 매장입니다.
+서울 성동구 성수동 일대 · 상세 주소 없음
+서울 마포구 연남동 일대 · 상세 주소 없음
+서울 영등포구 문래동 일대 · 상세 주소 없음
+검색어와 지역 조건을 지우고 다시 확인해 주세요.
+ +
+
+ 가맹을 생각한다면
+상권, 점포, 면적, 조리 동선과 비용 미정 항목을 먼저 확인할 수 있게 분리했습니다.
+ 가맹 운영 조건 보기 + 실제 가맹 모집과 상담이 아닌 쇼케이스용 흐름입니다. +게시 전에 매물 사실, 표시 항목, AI 근거와 변경 이력을 한 자리에서 확인합니다.
+| 매물 | 거래 | 예시 조건 | 마지막 확인 | 표시 검수 | AI 검토 | 담당 |
|---|---|---|---|---|---|---|
| + | 매매연립주택 | 38억 원전용 118.42㎡ | 2026.08.272일 전 · 모의 | 2개 차단 | 검토 전 | 김김유진 | +
| + | 전세공동주택 | 전세 22억전용 142.80㎡ | 2026.08.263일 전 · 모의 | 데모 통과 | 수정 승인 | 박박소연 | +
| + | 월세다세대주택 | 5억 · 월 1,200만전용 140.84㎡ | 2026.08.1118일 전 · 오래됨 | 다시 확인 | 오래됨 | 김김유진 | +
| + | 매매단독주택 | 상담 종료공개 목록 제외 | 2026.08.281일 전 · 모의 | 게시 안 함 | 종료 | 박박소연 | +
| + | 전세공동주택 | 조건 작성 중면적 입력됨 | 확인 전모의 서류 없음 | 5개 차단 | 실행 전 | 최최민서 | +
| + | 매매공동주택 | 41억 원전용 151.20㎡ | 2026.08.254일 전 · 모의 | 동의 대기 | 실행 실패 | 최최민서 | +
대기열을 불러오는 중입니다.
+필터를 초기화하면 전체 대기열을 다시 볼 수 있습니다.
+버튼을 숨기는 데서 끝내지 않고 게시 시점에 역할, 게이트와 객체 버전을 다시 확인하는 모델입니다.
사무소 연결, 역할, 모든 게시 관리
감사 로그 수정 불가법정 검수, AI 승인, 게시와 중단
역할 관리자 변경 불가초안, 문의 정리, 일정 등록
검수 승인과 게시 불가설명, 이미지, 미리보기
가격, 법정 필드와 고객 정보 수정 불가실제 연락, 저장 서버, 광고 채널과 등록정보 연결을 비활성 상태로 유지합니다.
한남 생활권 맞춤 중개
+예산과 면적, 입주 계획을 먼저 정리합니다. AI가 후보를 비교하고 공인중개사가 다시 확인합니다.
+
+ 내 조건 브리핑
+화면에 입력한 값과 후보 정보를 이 브라우저에서 대조합니다.
+분석을 실행하면 세 후보 가운데 조건과 가까운 집을 고르고, 이유를 세 묶음으로 정리합니다.
예시 매물 3곳
후보를 바꾸면 가운데 장면과 오른쪽 다섯 조건이 함께 바뀝니다.
+
+ 선택한 예시 집 검토 서류철
+한강진역 북쪽 생활권거리·소요 시간 미제공
+

서류를 통해 현재 권리 상태를 확인합니다.
거래 형태에 맞는 보호 조건을 검토합니다.
상담 시점에 다시 확인합니다.
역과 생활 편의 시설의 이용 방식은 현장에서 확인합니다.
출퇴근 경로는 실제 출발지와 시간대에 맞춰 다시 봅니다.
이미지의 배경은 조망이나 채광 판단에 사용하지 않습니다.
사람에게 넘기는 마감
가격, 면적, 입주, 주차를 한 장에 모읍니다.
서로 다른 집의 차이를 같은 기준으로 대조합니다.
서류와 현장에서 확인한 뒤 최종 판단합니다.