diff --git a/docs/history.md b/docs/history.md index 1d818f7..87bc9b5 100644 --- a/docs/history.md +++ b/docs/history.md @@ -1,5 +1,10 @@ # 의사결정 이력 +## 2026-03-30 v1.2.6 +- 홈, 게임 허브, 내 티어표, 즐겨찾기처럼 카드 중심 화면은 한 번에 같은 카드 문법으로 맞춰야 전체 앱이 하나의 제품처럼 보이므로, 목록 화면을 우선 통일하기로 했다. +- 홈 화면은 단순 게임 버튼 모음보다 상태 카드와 CTA가 있는 라이브러리 대시보드 쪽이 피그마 톤에 더 가깝다고 판단했다. +- 게임 허브와 개인 목록도 썸네일/작성자/메타의 비중이 비슷하므로, 화면마다 다른 카드 구조를 유지하기보다 동일한 정보 계층을 반복하는 편이 더 읽기 쉽다고 정리했다. + ## 2026-03-30 v1.2.5 - 관리자 화면도 에디터와 마찬가지로 공통 우측 패널보다 전용 로컬 운영 패널이 더 중요하므로, `/admin` 역시 화면 내부 `320px` 패널을 사용하는 포커스 화면으로 정리하기로 결정했다. - 관리자 기능은 탭, 검색, 필터, 빠른 액션이 본문에 섞이면 밀도가 너무 높아지므로, 우측 패널에는 제어 요소를 모으고 중앙에는 실제 관리 대상 목록과 상세만 남기는 편이 낫다고 판단했다. diff --git a/docs/map.md b/docs/map.md index e370c81..8dfe31e 100644 --- a/docs/map.md +++ b/docs/map.md @@ -2,12 +2,12 @@ ## `/` - 화면 파일: `frontend/src/views/HomeView.vue` -- 역할: 게임 목록 표시, 게임 카드 클릭 이동, `직접 티어표 만들기` 진입 +- 역할: 상단 상태/CTA가 있는 라이브러리 대시보드, 게임 카드 클릭 이동, `직접 티어표 만들기` 진입 - 연동 API: `GET /api/games` ## `/games/:gameId` - 화면 파일: `frontend/src/views/GameHubView.vue` -- 역할: 선택한 게임 정보 표시, 공개 티어표 목록 표시, 제목/작성자 검색, 티어표별 상단 썸네일/작성자 표시, 즐겨찾기 토글, 새 티어표 작성 진입 +- 역할: 선택한 게임 정보 표시, 상단 통계/생성 CTA, 공개 티어표 목록 표시, 제목/작성자 검색, 티어표별 상단 썸네일/작성자 표시, 즐겨찾기 상태 표시, 새 티어표 작성 진입 - 연동 API: `GET /api/games/:gameId`, `GET /api/tierlists/public`, `POST /api/tierlists/:id/favorite`, `DELETE /api/tierlists/:id/favorite` ## `/editor/:gameId/new`, `/editor/:gameId/:tierListId` @@ -22,12 +22,12 @@ ## `/me` - 화면 파일: `frontend/src/views/MyTierListsView.vue` -- 역할: 내 티어표 목록 조회, 상단 썸네일 카드 표시, 편집 화면으로 이동, 작성자 본인 티어표 삭제 +- 역할: 내 티어표 목록 조회, 라이브러리 카드형 썸네일 표시, 편집 화면으로 이동, 작성자 본인 티어표 삭제 - 연동 API: `GET /api/tierlists/me`, `DELETE /api/tierlists/:id` ## `/favorites` - 화면 파일: `frontend/src/views/FavoriteTierListsView.vue` -- 역할: 즐겨찾기한 티어표 목록 조회, 검색/정렬, 편집 화면 이동, 즐겨찾기 해제 +- 역할: 즐겨찾기한 티어표 목록 조회, 검색/정렬, 라이브러리 카드형 표시, 편집 화면 이동, 즐겨찾기 상태 확인 - 연동 API: `GET /api/tierlists/favorites/me`, `DELETE /api/tierlists/:id/favorite` ## `/admin` diff --git a/docs/spec.md b/docs/spec.md index 3855616..d81cbe9 100644 --- a/docs/spec.md +++ b/docs/spec.md @@ -27,6 +27,7 @@ - 사용자 요약, 빠른 검색 버튼, 주요 라우트 내비게이션, 즐겨찾기 성격의 빠른 링크, 관리자 진입 버튼을 배치한다. - 중앙 워크스페이스 - 현재 라우트의 핵심 콘텐츠를 렌더링하는 영역이며, 홈/목록 계열 화면은 카드형 대시보드 레이아웃을 우선 적용한다. + - 홈, 게임 허브, 내 티어표, 즐겨찾기 화면은 같은 카드 문법(상단 16:9 썸네일, 제목, 작성자/보조 메타, 하단 상태 영역)을 공유하도록 정리한다. - 우측 패널 - 현재 화면 문맥에 맞는 설명, 빠른 액션, 계정 상태 같은 보조 정보를 배치한다. - 에디터/관리자 세부 옵션은 후속 단계에서 이 패널로 점진 이관한다. diff --git a/docs/todo.md b/docs/todo.md index 183bde5..81520b2 100644 --- a/docs/todo.md +++ b/docs/todo.md @@ -2,6 +2,7 @@ ## 즉시 확인 필요 - 피그마 기반 리디자인은 현재 공통 셸과 카드 목록 화면, 포커스 화면 안정화까지만 반영된 상태이므로, 에디터/관리자 우측 옵션 패널을 시안 구조에 맞게 실제 기능 패널로 이관하는 작업이 남아 있다. +- 홈/게임 허브/내 티어표/즐겨찾기 카드 문법은 어느 정도 통일됐지만, 아직 실제 SVG 아이콘, 미세 간격, hover/selection 상태 같은 디테일은 더 다듬을 필요가 있다. - 공통 우측 패널의 토글과 독립 컬럼 구조는 반영되었지만, 현재는 안내 카드 중심이므로 실제 화면별 기능 컨트롤을 이 패널로 옮기는 작업이 남아 있다. - 티어표 편집 화면과 관리자 화면 모두 로컬 우측 패널 구조로 옮겼지만, 아직 세부 카드 밀도와 아이콘/모션 디테일은 피그마 시안 수준으로 더 다듬을 필요가 있다. - 머티리얼 아이콘 SVG는 아직 임시 문자/배지 스타일로 대체된 부분이 있으므로, 최종 아이콘 에셋을 받아 반영하는 작업이 필요하다. diff --git a/docs/update.md b/docs/update.md index f6d99a2..1250ef0 100644 --- a/docs/update.md +++ b/docs/update.md @@ -1,5 +1,10 @@ # 업데이트 로그 +## 2026-03-30 v1.2.6 +- **목록형 화면 카드 문법 통일**: 홈, 게임 허브, 내 티어표, 즐겨찾기 화면의 카드형 목록을 동일한 썸네일/제목/작성자/메타 구조로 정리해 대시보드 톤을 맞춤 +- **홈 화면 대시보드 재정렬**: 메인 게임 라이브러리 화면에 상단 상태 카드와 CTA를 추가하고, 게임 카드는 `16:9` 썸네일 + ID 메타를 갖는 라이브러리 카드 형태로 재배치 +- **게임 허브 헤더/검색 정리**: 게임 허브는 상단 통계와 생성 버튼, 보조 설명을 포함한 헤더로 재구성하고, 공개 티어표 카드도 같은 카드 밀도로 재정리 + ## 2026-03-30 v1.2.5 - **관리자 로컬 우측 패널 이관**: 관리자 화면도 공통 우측 패널 대신 화면 내부의 `320px` 전용 운영 패널을 사용하도록 정리하고, 탭·검색·필터·빠른 액션을 우측으로 이동 - **관리 화면 본문 집중도 개선**: 중앙 영역은 상단 고정 게임 순서, 선택된 게임 상세, 커스텀 아이템 카드, 템플릿 요청/전체 티어표, 회원 카드 같은 실제 관리 대상만 남기고 빈 상태 안내도 별도 패널로 정리 diff --git a/frontend/src/views/FavoriteTierListsView.vue b/frontend/src/views/FavoriteTierListsView.vue index 28fbddc..f3b6b9e 100644 --- a/frontend/src/views/FavoriteTierListsView.vue +++ b/frontend/src/views/FavoriteTierListsView.vue @@ -62,6 +62,7 @@ onMounted(loadFavorites)
+
Collection

내 즐겨찾기

마음에 드는 티어표를 모아보고, 원하는 기준으로 정렬할 수 있어요.
@@ -78,23 +79,23 @@ onMounted(loadFavorites)
즐겨찾기한 티어표가 없어요.
-
- -
-
+
+
{{ tierList.gameName || tierList.gameId }}
{{ sortLabel }}: {{ fmt(sort === 'favorited' ? tierList.favoritedAt : tierList.updatedAt) }}
@@ -117,9 +118,15 @@ onMounted(loadFavorites) align-items: flex-end; flex-wrap: wrap; } +.head__eyebrow { + font-size: 11px; + letter-spacing: 0.12em; + text-transform: uppercase; + color: rgba(255, 255, 255, 0.42); +} .title { - margin: 0; - font-size: 30px; + margin: 4px 0 0; + font-size: 32px; color: rgba(255, 255, 255, 0.96); letter-spacing: -0.04em; } @@ -157,15 +164,16 @@ onMounted(loadFavorites) grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 18px; } -.row { - border-radius: 14px; +.boardCard { + border-radius: 18px; border: 1px solid rgba(255, 255, 255, 0.16); background: rgba(62, 62, 62, 0.82); overflow: hidden; display: grid; gap: 10px; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04); } -.row__body { +.boardCard__body { border: 0; background: transparent; color: inherit; @@ -175,60 +183,67 @@ onMounted(loadFavorites) display: grid; gap: 10px; } -.row__thumbWrap { +.boardCard__thumbWrap { width: 100%; aspect-ratio: 16 / 9; background: #555; + display: grid; + place-items: center; } -.row__thumb, -.row__thumbPlaceholder { +.boardCard__thumb, +.boardCard__thumbPlaceholder { width: 100%; height: 100%; display: block; } -.row__thumb { +.boardCard__thumb { object-fit: cover; } -.row__thumbPlaceholder { +.boardCard__thumbPlaceholder { background: #555; + display: grid; + place-items: center; + color: rgba(255, 255, 255, 0.4); + font-size: 13px; + font-weight: 700; } -.row__head { +.boardCard__head { padding: 14px 14px 0; display: grid; gap: 10px; } -.row__title { +.boardCard__title { font-weight: 800; font-size: 18px; } -.row__author { +.boardCard__author { display: inline-flex; align-items: center; gap: 8px; font-size: 13px; opacity: 0.86; } -.row__avatar { +.boardCard__avatar { width: 28px; height: 28px; border-radius: 999px; object-fit: cover; background: rgba(255, 255, 255, 0.08); } -.row__avatar--fallback { +.boardCard__avatar--fallback { display: grid; place-items: center; font-size: 12px; font-weight: 900; } -.row__foot { +.boardCard__foot { padding: 0 14px 14px; display: flex; gap: 12px; align-items: center; justify-content: space-between; } -.row__meta { +.boardCard__meta { display: grid; gap: 4px; opacity: 0.78; diff --git a/frontend/src/views/GameHubView.vue b/frontend/src/views/GameHubView.vue index 4bb3efb..dcd5d3d 100644 --- a/frontend/src/views/GameHubView.vue +++ b/frontend/src/views/GameHubView.vue @@ -77,13 +77,17 @@ function submitSearch() {