diff --git a/docs/history.md b/docs/history.md index b39c644..208cd95 100644 --- a/docs/history.md +++ b/docs/history.md @@ -1,5 +1,10 @@ # 의사결정 이력 +## 2026-03-30 v1.2.24 +- `내 티어표` 헤더의 저장 개수 stat은 정보 가치보다 시각 잡음이 더 크다고 보고, 제목/설명 중심 헤더로 단순화하는 편이 낫다고 정리했다. +- 게임 선택 카드는 티어표 카드와 달리 템플릿 선택 진입점이므로, 썸네일까지 반복하기보다 제목과 ID만 간결하게 보여주는 편이 더 적합하다고 판단했다. +- 좌우 하단 액션 버튼은 푸터 블록 안에 있더라도 화면 바닥에 너무 붙으면 무거워 보이므로, 추가 하단 여백을 두어 숨을 쉬게 하는 편이 낫다고 정리했다. + ## 2026-03-30 v1.2.23 - 홈 화면의 게임 카드도 다른 목록 카드와 같은 밀도를 따라가야 하므로, 메인 라이브러리 역시 데스크톱 기본 4열을 기준으로 두는 편이 더 일관되다고 정리했다. - 게임 허브에서 새 티어표 만들기 버튼이 본문과 우측 패널에 동시에 있으면 역할이 겹치므로, 생성 CTA는 우측 사이드 하나만 남기는 편이 맞다고 판단했다. diff --git a/docs/map.md b/docs/map.md index 8348eea..1b8a18a 100644 --- a/docs/map.md +++ b/docs/map.md @@ -2,7 +2,7 @@ ## `/` - 화면 파일: `frontend/src/views/HomeView.vue` -- 역할: 데스크톱 기본 4열 게임 카드 라이브러리 대시보드, 게임 카드 클릭 이동, `직접 티어표 만들기` 진입 +- 역할: 데스크톱 기본 4열 게임 카드 라이브러리 대시보드, 썸네일 없이 `게임명 + 작은 ID` 메타만 보이는 템플릿 선택 카드, 게임 카드 클릭 이동, `직접 티어표 만들기` 진입 - 연동 API: `GET /api/games` ## `/games/:gameId` @@ -48,7 +48,7 @@ ## 공통 레이아웃 - 앱 셸 파일: `frontend/src/App.vue` - 역할: 좌측 내비게이션, 중앙 워크스페이스, 우측 컨텍스트 패널로 구성된 공통 앱 셸 렌더링, 로그인 상태 반영, 최근 즐겨찾기 바로가기와 전역 검색 입력, 관리자 메뉴 노출 제어, 실제 SVG 에셋과 선형 SVG 아이콘이 혼합된 레일 UI, 전역 우측 상단 토스트 렌더링 -- 세부: 좌측 패널은 `248px` 기준 폭을 사용하되 축소 시 아이콘 중심의 좁은 레일로 전환하고, 우측 패널은 `320px` 기준 폭을 사용한다. 세 컬럼 모두 상단에 높이 `56px`의 헤더 블록을 유지한다. 중앙 헤더에는 고정 브랜드 `Tier Maker by zenn`이 표시되고, 우측 패널 토글은 닫혀 있을 때 중앙 헤더, 열려 있을 때 우측 헤더에 아이콘만 표시된다. 좌우 레일의 주요 액션은 각각 하단 `56px` 푸터 영역에 배치된다. +- 세부: 좌측 패널은 `248px` 기준 폭을 사용하되 축소 시 아이콘 중심의 좁은 레일로 전환하고, 우측 패널은 `320px` 기준 폭을 사용한다. 세 컬럼 모두 상단에 높이 `56px`의 헤더 블록을 유지한다. 중앙 헤더에는 고정 브랜드 `Tier Maker by zenn`이 표시되고, 우측 패널 토글은 닫혀 있을 때 중앙 헤더, 열려 있을 때 우측 헤더에 아이콘만 표시된다. 좌우 레일의 주요 액션은 각각 하단 `56px` 푸터 영역 아래 추가 여백을 둔 상태로 배치된다. ## 백엔드 진입점 - 서버 엔트리: `backend/index.js` diff --git a/docs/spec.md b/docs/spec.md index 282debc..9976453 100644 --- a/docs/spec.md +++ b/docs/spec.md @@ -35,6 +35,7 @@ - 현재 라우트의 핵심 콘텐츠를 렌더링하는 영역이며, 홈/목록 계열 화면은 카드형 대시보드 레이아웃을 우선 적용한다. - 공통 `workspaceBody`는 별도 외곽 카드 테두리 없이 셸 여백만 제공하고, 실제 카드/패널 레이어는 각 화면 내부에서만 구성한다. - 홈, 게임 허브, 내 티어표, 즐겨찾기, 검색 결과 화면은 같은 카드 문법(상단 16:9 썸네일, `제목+좋아요` 1행, `작성자+최종 수정일` 1행)을 공유하며, 데스크톱 기준 기본 4열 카드 그리드를 사용한다. + - 단, 홈 게임 선택 카드는 템플릿 선택용이므로 썸네일 없이 `게임명 + 작은 ID` 메타만 표시하는 간결한 카드형으로 유지한다. - 목록 계열 화면의 상단 도구 영역은 통계 카드와 액션 버튼을 공통 높이/반경으로 맞춰, 같은 라이브러리 대시보드로 읽히도록 정리한다. - 우측 패널 - 현재 화면 문맥에 맞는 설명, 빠른 액션, 계정 상태 같은 보조 정보를 배치한다. @@ -42,6 +43,7 @@ - 공통 토글 버튼은 패널이 닫혀 있을 때 중앙 헤더, 열려 있을 때 우측 헤더에 각각 아이콘만 표시하는 방식으로 동작한다. - 오른쪽 패널 토글은 열기/닫기 모두 `dock_to_left`, 왼쪽 패널 토글은 `dock_to_right` 아이콘으로 통일한다. - 좌우 레일의 주요 CTA는 스크롤되는 본문과 분리된 하단 `56px` 액션 영역에 배치한다. + - 하단 액션은 화면 바닥에 바로 붙지 않도록 추가 하단 여백을 둔다. - 홈 화면 기준 우측 패널은 임시 정보 카드 여러 개보다 핵심 CTA 하나만 남겨, 시안처럼 단순한 보조 레일 역할을 우선 유지한다. - 티어표 편집 화면 - 공통 우측 패널 대신 전용 로컬 편집 패널을 사용한다. diff --git a/docs/todo.md b/docs/todo.md index af5c5a7..0a9d814 100644 --- a/docs/todo.md +++ b/docs/todo.md @@ -16,6 +16,7 @@ - 좌측 레일은 최근 즐겨찾기와 전역 검색까지 붙었으므로, 다음 단계는 검색 자동완성이나 즐겨찾기 썸네일 품질 같은 디테일을 더 다듬는 작업이다. - 좌측 레일 축소형은 반영했으므로, 다음 단계는 축소 상태에서 관리자/로그인 진입점과 hover 툴팁 같은 보조 UX를 더 다듬는 작업이다. - 좌우 하단 액션 영역은 분리했으므로, 다음 단계는 축소된 왼쪽 레일에서도 관리자/로그인 버튼을 아이콘형으로 어떻게 유지할지 검토할 수 있다. +- 홈 게임 카드 메타는 간소화했으므로, 이후 필요하면 게임 썸네일은 상세 허브나 우측 패널처럼 더 맥락이 분명한 위치에만 쓰는 방향을 검토할 수 있다. - 카드 목록은 4열 기준과 메타 줄 구성까지 통일했으므로, 다음 단계는 필터 상태 배지나 hover·selection 강조 같은 상호작용 디테일을 더 다듬는 작업이다. - 검색 결과 화면은 좌측 전역 검색 입력만 쓰도록 정리됐으므로, 다음 단계는 결과 필터/정렬 여부를 검토하는 식으로 확장하면 된다. - 공통 3단 셸 구조는 고정했지만, 관리자/에디터 우측 패널 내부에 아직 바디에 남아 있는 제어 요소를 더 옮겨야 한다. diff --git a/docs/update.md b/docs/update.md index f7362f4..c7f362b 100644 --- a/docs/update.md +++ b/docs/update.md @@ -1,5 +1,10 @@ # 업데이트 로그 +## 2026-03-30 v1.2.24 +- **내 티어표 상단 stat 제거**: `내 티어표` 화면 헤더 오른쪽의 저장 개수 stat 카드를 제거해 제목/설명만 남도록 단순화 +- **홈 게임 카드 메타 단순화**: 게임 선택 카드에서 썸네일과 점형 메타를 제거하고, 한글 게임 제목과 아래 작은 ID만 보이는 형태로 정리 +- **좌우 하단 액션 여백 보정**: 왼쪽 로그인/관리자 버튼과 오른쪽 빠른 액션 버튼은 바닥에 바로 붙지 않도록 하단에 추가 여백을 확보 + ## 2026-03-30 v1.2.23 - **홈 게임 카드 4열 정리**: 메인 게임 목록 화면도 카드형 레이아웃에서 데스크톱 기준 기본 4열로 보이도록 그리드를 조정 - **게임 허브 중복 생성 CTA 제거**: 게임 선택 화면 본문 상단의 `새로운 티어표 만들기` 버튼을 제거하고, 우측 사이드 하단 CTA만 유지하도록 정리 diff --git a/frontend/src/App.vue b/frontend/src/App.vue index d61b48c..e9817fa 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -787,6 +787,7 @@ watch( .leftRail__bottom { justify-content: stretch; + margin-bottom: 56px; } .adminButton { @@ -885,6 +886,10 @@ watch( width: 100%; } +.rightRail__bottom { + margin-bottom: 56px; +} + .rightRailAction__button { width: 100%; padding: 12px 14px; diff --git a/frontend/src/views/HomeView.vue b/frontend/src/views/HomeView.vue index 3c8d339..e87d23f 100644 --- a/frontend/src/views/HomeView.vue +++ b/frontend/src/views/HomeView.vue @@ -2,11 +2,8 @@ import { computed, onMounted, ref } from 'vue' import { useRouter } from 'vue-router' import { api } from '../lib/api' -import { toApiUrl } from '../lib/runtime' -import { useAuthStore } from '../stores/auth' const router = useRouter() -const auth = useAuthStore() const items = ref([]) const error = ref('') @@ -24,20 +21,6 @@ onMounted(async () => { function goGame(gameId) { router.push(`/games/${gameId}`) } - -function goFreeform() { - if (!auth.user) { - router.push('/login?redirect=/editor/freeform/new') - return - } - router.push('/editor/freeform/new') -} - -function thumbUrl(g) { - if (!g.thumbnailSrc) return '' - return toApiUrl(g.thumbnailSrc) -} -