Files
landing-manager/frontend/landing-admin-notes.md
2026-03-05 10:35:28 +09:00

506 lines
21 KiB
Markdown

# Landing Admin Page Log
관리자 페이지를 새로 만들거나 기능을 추가할 때마다 페이지별로 기록합니다.
## 기록 규칙
- 작성 시각
- 페이지 경로
- 목적
- 라우트
- 구성 항목
- 비고/다음 작업
## 2026-03-03
- 페이지: `/` 홈 랜딩
- 타입: 기본 페이지(비관리자)
- 노트: 초기 기본 레이아웃을 마크업으로 구성했고, 이후 `/admin` 계열부터 페이지 단위 기록은 여기서 계속 누적.
## 2026-03-03
- 페이지: `/admin` 대시보드
- 타입: 관리자 진입점 + 공통 레이아웃
- 라우트: `/admin`, `/admin/index`
- 구성:
- 사이드바 고정형 레이아웃 (`pages/admin.vue`) 추가
- 대시보드 메인 카드 3종(진행중 프로젝트, 전체 프로젝트, 새로운 리드)
- 진행중 프로젝트 테이블 요약 섹션 추가
- 비고:
- 1단계 MVP에서 API 연동 없이 정적 상태로 구성
- 다음 작업: `/admin/projects`, `/admin/pages`, `/admin/leads` 페이지 순차 추가
## 2026-03-03
- 페이지: `/admin` 대시보드(레이아웃 개선)
- 타입: 관리자 대시보드 UI 개선
- 라우트: `/admin`
- 구성:
- 상단 헤더 + 우측 액션 버튼을 1줄 배치
- KPI 3개 카드 + 추이 카드/미니 차트 구간을 2열로 구성하여 세로 몰림 완화
- 하단 목록/빠른 액션 영역을 2열로 나눠 가로형 화면 비중 확대
- 비고: 사용자 요청 반영(“너무 세로로 구성되어 있음” 해결)
## 2026-03-03
- 페이지: `/admin` 대시보드 KPI 라인 정렬
- 타입: 카드 배치 조정
- 라우트: `/admin`
- 구성:
- KPI 카드 3개(진행중 프로젝트/전체 프로젝트/새로운 리드)를 같은 라인(grid-cols-3)으로 고정 배치
- 비고: 동일 라인 요청 반영
## 2026-03-04
- 페이지: `/admin/projects`
- 타입: 프로젝트 그룹 보드
- 라우트: `/admin/projects`
- 구성:
- 상단 브레드크럼 + 타이틀 + `Create New Group` 버튼
- 검색/상태/정렬/필터 바
- 카드형 프로젝트 목록(상태 배지, 메트릭 2열, 하단 액션 버튼)
- `Create New Group` 대시드 카드
- 하단 페이지네이션 바
- 비고:
- 사용자 제공 레퍼런스 이미지 기반으로 다크 보드 스타일 구성
- 현재는 정적 더미 데이터 기반, 이후 API 연동 예정
## 2026-03-04
- 페이지: `/admin/projects` 상태 표시/디자인 톤 보정
- 타입: UI polish
- 라우트: `/admin/projects`
- 구성:
- 상태 표시를 큰 배지에서 `작은 dot + label` 형태로 변경
- 카드 두께/폰트 크기/메트릭 박스 크기 축소로 덜 투박하게 정리
- `Create New Group` 원형 아이콘 크기 축소
- 비고: 사용자 피드백(원형 과대, 전체 투박함) 반영
## 2026-03-04
- 페이지: `/admin/projects` 메트릭 정렬/상태 텍스트 크기 조정
- 타입: UI polish
- 라우트: `/admin/projects`
- 구성:
- 카드 내 `TOTAL LEADS`와 우측 메트릭 박스를 `flex` 기반 좌우 정렬로 고정
- 상태 라벨 폰트 크기 축소(`text-[10px]`) 및 패딩 축소
- 비고: 사용자 피드백(좌우 배치/상태 글자 크기) 반영
## 2026-03-04
- 페이지: `/admin/projects` 메트릭 50:50 폭 고정
- 타입: UI polish
- 라우트: `/admin/projects`
- 구성:
- 카드 메트릭 박스 2개를 `w-1/2 basis-1/2`로 고정하여 정확히 반반 분할
- 비고: 사용자 피드백(한쪽 쏠림) 반영
## 2026-03-04
- 페이지: `/admin/projects` 메트릭 반반 분할 방식 보정
- 타입: UI polish
- 라우트: `/admin/projects`
- 구성:
- `flex` 분할을 `grid grid-cols-2`로 변경해 gap 포함 상태에서도 정확히 50:50 유지
- 비고: 사용자 피드백(여전히 반반 아님) 재반영
## 2026-03-04
- 페이지: `/admin/projects` 메트릭 2열 강제 고정
- 타입: UI polish
- 라우트: `/admin/projects`
- 구성:
- 메트릭 래퍼에 인라인 `display:grid; grid-template-columns: 1fr 1fr;` 적용
- Tailwind 클래스 해석/브레이크포인트 영향 없이 무조건 좌우 반반 유지
- 비고: 사용자 피드백(여전히 위아래 배치됨) 재반영
## 2026-03-04
- 페이지: `/admin/projects` 하단 액션/상태 라벨 조정
- 타입: UI polish
- 라우트: `/admin/projects`
- 구성:
- 카드 하단 `Variants Tested` 라인과 버튼 간격을 늘려 버튼 위쪽 마진 추가
- 상태 배지 텍스트를 더 작은 크기로 축소
- 비고: 사용자 요청 반영(“tested copy url variants 버튼 윗쪽 마진, 상태 표시 더 작게")
## 2026-03-04
- 페이지: `/admin/projects` 하단 액션 여백 추가 강화
- 타입: UI polish
- 라우트: `/admin/projects`
- 구성:
- 하단 액션 래퍼(`Variants/Copy URL` 버튼 행) 상단 마진을 기존 대비 더 크게(`mt-6`) 상향
- 비고: “그대로 딱 붙어있다”는 피드백 반영
## 2026-03-04
- 페이지: `/admin/projects` 하단 액션 강제 간격 적용
- 타입: UI polish
- 라우트: `/admin/projects`
- 구성:
- 하단 버튼 행에 유틸 클래스 기반 `mt-`을 제거하고 `style="margin-top: 48px;"` 인라인 마진 강제 적용
- "tested copy url variants" 구간 분리를 즉시 체감 가능한 수치로 조정
- 비고: 변경사항이 반영 안됐다는 피드백에 대한 재반영
## 2026-03-04
- 페이지: `/admin/projects` 하단 액션 간격 과다 완화
- 타입: UI polish
- 라우트: `/admin/projects`
- 구성:
- 하단 액션 행 인라인 마진을 `48px`에서 `24px`로 축소
- 비고: “너무 많이 떨어짐” 피드백 반영
## 2026-03-04
- 페이지: `/admin/projects` 하단 액션 간격 재상향 조정
- 타입: UI polish
- 라우트: `/admin/projects`
- 구성:
- 하단 액션 행 인라인 마진을 `24px`에서 `28px`로 증가
- 비고: “좀더 올려줘” 피드백 반영
## 2026-03-04
- 페이지: `/admin/projects` 하단 간격 보장 방식 변경
- 타입: UI polish
- 라우트: `/admin/projects`
- 구성:
- `Variants Tested` 블록과 하단 액션 행 사이에 고정 높이 공백 블록(`h-6`) 추가
- 유틸 클래스/인라인 마진 조합과 함께 간격이 누락되지 않도록 구조적으로 보강
- 비고: 간격 변경이 화면에 반영되지 않는 피드백의 재반영
## 2026-03-04
- 페이지: `/admin/projects` 페이지네이션 위치 조정
- 타입: UI polish
- 라우트: `/admin/projects`
- 구성:
- 페이지네이션(`footer`) 위쪽에 `mt-4` 여백 추가
- 비고: 카드 본문보다 약간 아래쪽으로 페이지네이션을 띄우는 요청 반영
## 2026-03-04
- 페이지: `/admin/projects` 상태 라벨 크기 추가 축소
- 타입: UI polish
- 라우트: `/admin/projects`
- 구성:
- 상태 배지 텍스트 사이즈를 `text-[9px]`에서 `text-[8px]`로 축소
- 비고: `ACTIVE/ARCHIVED/DRAFT` 라벨이 더 작게 보이도록 조정
## 2026-03-04
- 페이지: `/admin/projects` 상태 라벨 직접 크기 강제 적용
- 타입: UI polish
- 라우트: `/admin/projects`
- 구성:
- 상태 배지에 `style="font-size: 8px; line-height: 1;"` 직접 지정
- 비고: Tailwind 유틸이 반영 안될 때도 체감되도록 강제 적용
## 2026-03-04
- 페이지: `/admin/projects` 상태 라벨 크기 상향 조정
- 타입: UI polish
- 라우트: `/admin/projects`
- 구성:
- 상태 배지 인라인 폰트 크기를 `8px`에서 `10px`로, `line-height``1.1`로 조정
- 비고: “너무 작다” 피드백 반영
## 2026-03-04
- 페이지: `/admin/projects` 검색/필터 패널 디자인 개선
- 타입: UI polish
- 라우트: `/admin/projects`
- 구성:
- 검색 영역을 입력 박스 + 라벨 + 통일된 필터 칩 스타일의 카드형 패널로 교체
- 검색창에 아이콘 유사 요소 및 focus 보더/그림자 적용
- 상태/정렬/필터 버튼을 동일한 반원각/톤으로 정돈
- 비고: “위쪽 검색하는 부분 이쁘게” 요청 반영
## 2026-03-04
- 페이지: `/admin/projects` 검색/필터 가로 고정 정렬
- 타입: UI polish
- 라우트: `/admin/projects`
- 구성:
- 검색/필터 블록을 `flex-nowrap` 1줄 레이아웃으로 변경
- 버튼에 `shrink-0`/`whitespace-nowrap` 적용해 라인 분리 없이 가로 유지
- 검색 입력 최소 너비 지정으로 한 줄 안정성 강화
- 비고: “가로로 생겨야지” 요청 반영
## 2026-03-04
- 페이지: `/admin/projects` 검색/필터 패널 패딩 보정
- 타입: UI polish
- 라우트: `/admin/projects`
- 구성:
- 검색 패널 `p-4``p-5`, 내부 간격을 `gap-4`로 강화
- 검색 라벨 간격 및 입력창 패딩(`px-9 py-3`) 확장
- 버튼 패딩(`px-5 py-3`) 상향으로 시각적 여유 확보
- 비고: “패딩 주고 보기 이쁘게” 요청 반영
## 2026-03-04
- 페이지: `/admin/projects` 검색/필터 정렬 조정
- 타입: UI polish
- 라우트: `/admin/projects`
- 구성:
- 검색 입력 최소 너비를 `360px`로 증가
- 상단 블록을 `justify-between` 처리 후 버튼 그룹에 `ml-auto` 적용해 Status~Filter를 오른쪽 정렬
- `Status / Sort / Filter`를 한 묶음으로 묶어 오른쪽 정렬 유지
- 비고: “검색란 넓히고 status부터는 오른쪽 정렬” 요청 반영
## 2026-03-04
- 페이지: `/admin/projects` Sort/Filter 컨트롤 타입 정리
- 타입: UI polish
- 라우트: `/admin/projects`
- 구성:
- `Status`를 select 박스로 유지
- `Sort by`를 select 박스로 전환
- `Filter`는 버튼으로 유지
## 2026-03-04
- 페이지: `/admin/projects` Filter 버튼 모양 정리
- 타입: UI polish
- 라우트: `/admin/projects`
- 구성:
- `Filter` 버튼의 그라디언트 스타일 제거 후, 다른 입력 컨트롤과 톤을 맞춘 플랫 보더 스타일로 통일
## 2026-03-04
- 페이지: `/admin/projects` 검색 입력 폭 추가 확대
- 타입: UI polish
- 라우트: `/admin/projects`
- 구성:
- 검색 input 최소 너비를 `520px`로 상향
- 비고: “검색박스 좀 길게” 요청 반영
## 2026-03-04
- 페이지: `/admin/projects` Status 컨트롤 select 전환
- 타입: UI polish
- 라우트: `/admin/projects`
- 구성:
- `Status: All` 버튼을 라벨 + `select` 박스로 변경
- 옵션: All / Active / Archived / Draft
## 2026-03-04
- 페이지: `/admin/pages/[id]/builder`
- 타입: 관리자 페이지 편집
- 라우트: `/admin/pages/:id/builder`
- 구성:
- `빌더 열기` 버튼을 페이지 목록에서 해당 route로 이동하도록 연결
- 동적 라우트 페이지 추가
- 페이지 메타(이름/캠페인/도메인/경로/상태) 표시
- 모바일 폭 기준 미리보기 카드형 캔버스 + 블록 리스트 영역 구성
- 블록 추가/위/아래 이동/삭제 인터랙션 추가
- 빈 상태 시 “페이지를 찾을 수 없음” 대응 처리
## 2026-03-04
- 페이지: `/admin/pages` 새 페이지 생성 기능
- 타입: UI/기능 개선
- 라우트: `/admin/pages`
- 구성:
- `CreatePageModal` 컴포넌트 추가
- 입력 필드: 페이지명, 프로젝트, 도메인, 경로
- 배경 클릭/닫기 버튼/취소 버튼으로 모달 종료
- `/admin/pages` 생성 버튼과 빈 상태 카드의 “바로 만들기”에 모달 연동
- `pages` store에 `createPage` 액션 추가
- 수동 입력 기반 페이지 생성(상태: `draft`, 리드/방문자/버전=0/0/1)
- 기존 `createQuickPage`는 기본값 기반 호출에서 `createPage`로 내부 위임
## 2026-03-04
- 페이지: `/admin/pages` 페이지 관리
- 타입: 관리자 페이지 기능 확장
- 라우트: `/admin/pages`
- 구성:
- Pinia 기반 `usePagesStore` 추가 (`frontend/app/stores/pages.ts`)
- 페이지 목록 UI/검색/필터/Campaign/정렬/생성/삭제 기능 구현
- 캠페인 카드에서 `페이지 관리` 버튼 추가 (`/admin/pages?campaignId=<projectId>`)
- `/admin` 좌측 사이드바 링크(`/admin/pages`)와 동작 연동
- 비고:
- 현재는 더미 데이터 기반 MVP 운영 화면
- 빌더 연동은 다음 단계에서 라우트 연계
## 2026-03-04
- 페이지: `/admin/pages`, `/admin/projects`
- 타입: 한글 로컬라이즈
- 라우트: `/admin/pages`, `/admin/projects`
- 구성:
- `/admin/pages` 제목/버튼/라벨/컬럼/상태/안내문구 한글 전환
- `/admin/projects` 영문 노출 라벨 일괄 한국어 전환
- 페이지 관리 스토어 캠페인명, 샘플 페이지명, 상태 라벨을 한글로 조정
- 비고:
- 영문 코드는 값 자체 유지(`live`, `draft` 등), 화면 텍스트만 한글화
## 2026-03-04
- 페이지: `/admin/leads`
- 타입: 리드 조회 페이지 추가
- 라우트: `/admin/leads`
- 구성:
- 검색, 상태, 채널, 캠페인 필터 지원
- 더미 리드 테이블(이름/연락처/이메일/캠페인/페이지/채널/상태/수집일) 표시
- 엑셀 내보내기 버튼(미구현 액션, UI 우선) 추가
- 비고:
- 사이드바 링크는 기존 `/admin` 레이아웃에 이미 존재해 바로 접근 가능
## 2026-03-04
- 페이지: `/admin/projects`
- 타입: 새 프로젝트 생성 모달 컴포넌트
- 라우트: `/admin/projects`
- 구성:
- 공용 컴포넌트 `CreateProjectModal` 신규 생성 (`frontend/app/components/admin/CreateProjectModal.vue`)
- 프로젝트명, 캠페인 표시명 입력폼 + 닫기/생성 액션
- 프로젝트 목록 페이지에서 모달 오픈/닫기 상태 관리 및 제출 이벤트 처리 추가
- `useProjectsStore``createProject` 액션 추가 (`frontend/app/stores/projects.ts`)
- 새 프로젝트 생성 버튼 및 새 그룹 카드에서 모달 오픈 연동
- 비고:
- 현재는 더미 데이터 스토어에 `unshift`로 즉시 반영되는 MVP 동작
## 2026-03-04
- 페이지: `/admin`, `/admin/projects`, `/admin/pages`
- 타입: 프로젝트/대시보드 라벨 완전 한글화
- 라우트: `/admin`, `/admin/index`, `/admin/projects`, `/admin/pages`
- 구성:
- 레이아웃 타이틀을 `Campaign & Page Console`에서 `캠페인·페이지 콘솔`로 변경
- 대시보드 라벨 `Dashboard``대시보드`로 변경
- 프로젝트 스토어 샘플 데이터(`title/subtitle/metricLabel`) 한글화
- `CONV. RATE``전환율`
- `CTR``클릭률`
- `Final``종료`
## 2026-03-04
- 페이지: `/admin` Pinia 런타임
- 타입: 상태 관리 안정화
- 라우트: `/admin`, `/admin/projects`
- 구성:
- `frontend/app/plugins/pinia.ts`(수동 `createPinia()` 주입 플러그인) 제거
- `@pinia/nuxt` 공식 모듈만 사용하도록 정리
- `useDashboardStore`, `useProjectsStore`를 setup 내에서 호출하되 Pinia 인스턴스가 항상 Nuxt 플러그인으로 주입되도록 정리
- 비고:
- `[🍍] getActivePinia()` 경고는 커스텀 플러그인과 공식 모듈 중복 등록 가능성이 원인이라 판단
- 수정 후 dev 서버 재시작 필요
## 2026-03-04
- 설정: Pinia 전역 상태 관리 연동
- 타입: 플랫폼 인프라
- 라우트: 전체 관리자 페이지
- 구성:
- `@pinia/nuxt``pinia` 의존성 추가
- `nuxt.config.ts``@pinia/nuxt` 모듈 등록
- 비고: 요청 반영으로 Pinia 기반 관리 준비
## 2026-03-04
- 페이지: `/admin/projects` 프로젝트 데이터 스토어 마이그레이션
- 타입: 상태 관리
- 라우트: `/admin/projects`
- 구성:
- `app/stores/projects.ts` 신규 추가
- 검색/상태필터/정렬 state 및 `filteredProjects` getter 적용
- 상단 검색/Status/Sort 컨트롤을 store 바인딩(`v-model`) 처리
## 2026-03-04
- 페이지: `/admin` 대시보드 데이터 스토어 마이그레이션
- 타입: 상태 관리
- 라우트: `/admin`
- 구성:
- `app/stores/dashboard.ts` 신규 추가
- KPI 카드, 리드 추이, 진행중 프로젝트 목록을 스토어로 이동
- `admin/index.vue``storeToRefs(useDashboardStore())` 연동
## 2026-03-04
- 스타일: 관리자 전체 컬러 톤 강화
- 타입: UI polish
- 라우트: `/admin/*`
- 구성:
- 사이드바/네비게이션에 그라데이션 및 포인트 색상(시안/인디고) 적용
- 메인 영역 배경에 라이트 누출형 radial 컬러 레이어 적용
- 대시보드/프로젝트 페이지의 헤더, 검색, 필터, 카드, 버튼에 컬러 그라데이션 추가
- 비고: “너무 칙칙한데 컬러 좀 넣어줘” 요청 반영
## 2026-03-04
- 페이지: `/admin/pages`
- 타입: 라우팅 구조 보정
- 라우트: `/admin/pages`
- 구성:
- 페이지 목록 파일을 `frontend/app/pages/admin/pages.vue`에서 `frontend/app/pages/admin/pages/index.vue`로 이동
- 하위 경로인 `/admin/pages/:id/builder` 라우트 충돌 가능성 해소
## 2026-03-04
- 페이지: `/admin/pages/[id]/builder`
- 타입: 빌더 기능 확장
- 라우트: `/admin/pages/:id/builder`
- 구성:
- 블록 타입을 `html`, `image`로 단일화
- 이미지 파일 업로드 시 업로드 즉시 `이미지` 블록 생성
- 이미지 URL로 블록 생성 기능 추가
- 블록 순서 이동(위/아래) 및 삭제 유지
- 헤더 설정 구간 추가: 페이지 제목, 메타 설명/키워드, 파비콘, head 추가코드, body script
- 저장 버튼에서 메타 + 블록을 조합한 최종 HTML 생성 및 클립보드 복사 영역 제공
## 2026-03-04
- 페이지: `/admin/pages/[id]/builder`
- 타입: 컴파일 오류 대응 리팩터링
- 라우트: `/admin/pages/:id/builder`
- 구성:
- `Invalid end tag` 원인 분리를 위해 빌더 컴포넌트를 전체 재작성
- `script` 태그 문자열 조합을 안전 분할(`'<' + 'script>'` / `'</' + 'script>'`) 방식으로 정리
- 핵심 편집/미리보기/블록 추가/정렬/삭제/삭제/클립보드 복사 흐름 유지
- 기존 템플릿/스크립트 충돌 의심 소지를 줄이는 형태로 재구성
## 2026-03-04
- 페이지: `/admin/pages/[id]/builder`
- 타입: UI/UX 조정
- 라우트: `/admin/pages/:id/builder`
- 구성:
- 헤더 제목/본문 문구/버튼 문구 입력 영역 제거(요청 반영)
- 최종 생성 HTML에서 기본 문구 블록 제거, 블록 기반 렌더링 중심으로 정리
- 이미지 업로드에 `multiple` 적용 및 드래그앤드롭 지원 추가
- 드롭/선택된 이미지들을 한 번에 최대 10개까지 등록하도록 처리
## 2026-03-04
- 페이지: `/admin/pages/[id]/builder`
- 타입: 업로드 UX 축소
- 라우트: `/admin/pages/:id/builder`
- 구성:
- 로컬 업로드 라벨/이미지 URL 입력 UI 제거
- 이미지 업로드를 드래그앤드롭 박스 1개와 내부 파일 입력으로만 처리
- 별도 로컬/URL 선택 패널 UI 제거 후 업로드 영역 단일화
## 2026-03-04
- 페이지: `/admin/pages/[id]/builder`
- 타입: 미리보기 정합성
- 라우트: `/admin/pages/:id/builder`
- 구성:
- 미리보기 패널이 `space-y` 래핑 때문에 생기던 블록 간 간격을 제거
- 실제 최종 랜딩 렌더(body) 문자열과 동일한 DOM 기준으로 미리보기 렌더링 적용
## 2026-03-04
- 페이지: `/admin/pages/[id]/builder`
- 타입: 블록 구성 변경
- 라우트: `/admin/pages/:id/builder`
- 구성:
- 폼 블록/카톡 싱크 버튼 블록 생성 버튼을 제거
- footer HTML 입력 필드 추가 (헤더/메타/바디스크립트 설정과 함께 저장/미리보기에 반영)
## 2026-03-04
- 페이지: `/admin/pages/[id]/builder`
- 타입: 미리보기 UX
- 라우트: `/admin/pages/:id/builder`
- 구성:
- 실제 랜딩 생성 데이터는 유지한 상태로, 미리보기 전용 이미지 렌더 방식을 분리
- 미리보기에서만 이미지 최대 너비/높이 제한을 적용해 썸네일처럼 작게 표시
## 2026-03-04
- 페이지: `/admin/pages/[id]/builder`
- 타입: 이미지 블록 목록 UX
- 라우트: `/admin/pages/:id/builder`
- 구성:
- 이미지 블록 미리보기에서 둥근 모서리 제거(`border-radius:0`)
- 이미지 블록 목록에서 blob URL 텍스트 제거
- 이미지 블록 목록 항목 좌측에 썸네일 이미지 미리보기 표시
## 2026-03-04
- 페이지: `/admin/pages/[id]/builder`
- 타입: 블록 종류 확장
- 라우트: `/admin/pages/:id/builder`
- 구성:
- `폼 블록` 추가 기능(기본 폼 HTML 생성)
- `카카오 싱크 버튼 블록` 추가 기능(카카오 버튼 샘플 HTML 생성)
- `html 블록` 옆에 두 액션 버튼 배치(폼/카톡 싱크)
## 2026-03-04
- 페이지: `/admin/pages/[id]/builder`
- 타입: 이미지 업로드 정책 변경
- 라우트: `/admin/pages/:id/builder`
- 구성:
- 이미지 업로드 최대 장수 제한 제거
- 드롭/선택한 모든 이미지 파일을 일괄 등록
- UI 문구에서 “최대 10장” 표현 제거
## 2026-03-04
- 페이지: `/admin/pages/[id]/variants`
- 타입: 변형(variant) 관리 페이지
- 라우트: `/admin/pages/:id/variants`
- 구성:
- Pinia 스토어 `frontend/app/stores/variants.ts` 신규 추가
- 페이지별 변형 목록/생성/삭제/활성-비활성 토글 기능
- 페이지 목록(`/admin/pages`) 카드에 “변형 관리” 바로가기 추가
- 프로젝트 카드의 “변형 관리” 버튼을 페이지별 변형 페이지로 연결
- 변형 메트릭(총 변형 수, 누적 리드, 총 트래픽 비율), 변형명/설명/비율/리드 수 UI 구성
- 비고:
- 페이지별 변형 개수는 `variants` 스토어 기준으로 실시간 계산되어 표시