코드베이스에서 브랜드 추출
개요
제품 리포지토리가 유일한 브랜드 진실 공급원입니다. 브랜드 키트는 marketing-videos/<brand>/brand.md로 한 번 추출되며, 모든 값은 file:line 출처를 가지며, 파일은 읽은 시점의 리포지토리 커밋을 기록하여 다시 읽지 않고 갱신할 수 있습니다.
brand.md 규약
다음 섹션을 이 순서대로 작성합니다. 모든 값은 (path:line) 형식의 출처로 끝납니다.
- 출처: 리포지토리 경로, 브랜치, 리포지토리별
git rev-parse --short HEAD, 추출 날짜, 그리고 파이프라인 게이트 G1이 오래된 키트를 감지하기 위해 읽는 리포지토리별 기계 판독 가능 블록:```refresh repo: <product-repo> ref: HEAD commit: c8fb26e paths: src/data/content.ts src/app/globals.css public/brand ```repo는D:\Projects아래의 폴더 이름입니다. Git이 아닌 리포지토리는ref와commit대신mtime: <ISO date>를 사용합니다. - 아이덴티티: 이름, 한 줄 포지셔닝, 태그라인, 톤 (카피 파일을 인용하고, 의역하지 마십시오).
- 색상 토큰: 먼저 의미론적 브랜드 토큰(
--color-brand-*,primary,AppColors.primary), 그 다음 보조 토큰. 표면이 다른 경우(landingvsapp) 표면별로 하나의 표. - 타이포그래피: 표면별. 랜딩 폰트는 종종 앱 폰트와 다릅니다. 루트 레이아웃과 섹션 수준의
fonts.ts를 모두 확인하십시오. - 로고 및 이미지: 파일 경로, 실제 제품 렌더링인지 vs 스톡 사진인지 (스톡은 절대 실제 사용자로 제시되어서는 안 됨), 그리고 라이선스 또는 크레딧 파일.
- 허용된 주장: 기능, 모드, 가격, CTA 라벨, URL, 연락처. 각각은 출처가 있는 직접 인용. 샘플 데이터는
SAMPLE로 표시하십시오 (더미 숫자로 렌더링) 비디오가 "Contoh"라고 표시하도록. - 금지된 주장: 그럴듯하지만 출처가 없는 모든 것: 사용자 수, 수익, 평점, 사용 후기, 파트너 로고, "terpercaya", "#1".
- 캡처 대상: 프로덕션 및 스테이징 URL, 캡처할 가치가 있는 경로, 앱 스크린샷 폴더, Play Store URL.
- 모호함: 중복되거나 충돌하는 토큰, 사이트와 앱 간에 다른 카피, 다른 곳에서 사용된 브리프의 값이 코드와 모순되는 경우. 사용자에게 나열하고, 절대 조용히 해결하지 마십시오.
추출 체크리스트
| 찾을 대상 | 일반적인 위치 |
|---|---|
| 카피, CTA, 가격 | src/data/content.ts, src/content/*.ts, 랜딩 섹션 컴포넌트, RELEASE_NOTES.md, docs/features/ |
| 웹 토큰 | globals.css @theme / :root, tailwind.config.*, palette.ts |
| Flutter 토큰 | lib/core/constants/app_colors.dart, app_text_styles.dart, pubspec.yaml 폰트 |
| 폰트 | app/layout.tsx (next/font), 섹션 fonts.ts, pubspec.yaml |
| 로고 | public/brand/, docs/brand/, assets/icons/brand/ |
| URL | src/ 전체에서 grep -rn "https://<brand-domain>" 실행, metadataBase, site.ts, 약관 페이지 |
값을 찾기 전에 누락되었다고 선언하지 마십시오: 도메인, CTA 텍스트, 토큰 이름을 src/ 전체에서 grep 하십시오.
.env*, .mcp.json, google-services.json, 키스토어, 그리고 모든 키나 토큰은 건너뛰십시오. 절대 그 값을 brand.md에 복사하지 마십시오.
소스 리포지토리가 체크아웃되지 않은 경우 (클라우드 세션)
게이트 G1은 brand_repo_absent를 정보로 보고하고, G2는 리포지토리 대신 brand.md의 정확한 인용문에 대해 모든 주장을 검증합니다 (claim_verified_brand_kit). 이는 brand.md가 path:line과 함께 카피를 그대로 인용할 때만 작동하므로, 인용문을 문자 그대로 추출하고 절대 의역하지 마십시오. brand.md를 갱신하려면 리포지토리가 필요합니다: 노트북에서 수행하거나, 제품 리포지토리를 클라우드 세션에 추가하고 MV_PROJECTS_ROOT를 상위 폴더로 지정하십시오.
갱신 규칙
게이트 G1은 모든 갱신 블록에 대해 git -C <repo> log --oneline <commit>..<ref> -- <paths>를 실행하고, 변경 사항이 있으면 brand_stale과 함께 실패합니다. 해결하려면 변경된 파일만 다시 읽고, 해당 행을 업데이트한 후 블록의 commit을 증가시키십시오. Git이 아닌 리포지토리는 파일 수정 시간과 mtime을 비교합니다.
실제 UI 캡처
| 제품 표면 | 방법 |
|---|---|
| 라이브 웹사이트 | 프로덕션 URL에서 HyperFrames 웹사이트 캡처 (product-launch-video 경로가 이 작업을 수행); 사용자가 기능이 출시되지 않았다고 말하는 경우에만 스테이징 |
| 로컬 개발 서버 | 사용자가 출시되지 않은 화면을 요청하는 경우에만; 브리프에 출시되지 않음이라고 표시 |
| Flutter 앱 | 기존 실제 스크린샷 (사이트 screens/, Play Store 자산) 또는 에뮬레이터 스크린샷, 기기 프레임에 배치 |
| 작은 애니메이션 요소 (CTA 버튼, 통계 카드) | brand.md 토큰을 사용하여 HTML로 재구성; 존재하지 않는 화면을 절대 만들어 내지 마십시오 |
스토리보드 주장 참조
STORYBOARD.md의 모든 화면 내 주장은 brand.md 출처를 포함합니다. 예: "Biaya layanan 2%" (<product-repo>/src/data/content.ts:212). 출처가 없는 주장은 스토리보드에서 부드럽게 처리되지 않고 제거됩니다.
일반적인 실수
- 의미론적 브랜드 토큰(
--color-brand-navy) 대신 발견된 첫 번째 네이비(--navy-main)를 선택하는 것. 의미론적 이름을 선호하고 다른 것은 모호함으로 나열하십시오. - 랜딩 페이지 비디오에 앱 폰트를 사용하거나 그 반대.
- 하나의 파일만 확인한 후 URL이 "발견되지 않았다"고 선언하는 것.
- 스톡 사진을 실제 고객인 것처럼 보여주는 것.