# 개발 할 일 ## 기반 작업 - [x] Vue 3와 Vite 프로젝트 생성 - [x] Tailwind CSS 설정 - [x] Docker 정적 배포 기반 작성 - [x] 개발·배포·AI 작업 문서 작성 - [ ] ESLint와 Prettier 규칙 확정 - [x] Vue Router 설치와 대기실·게임 화면 분리 - [x] Pinia 설치와 방 상태 구조 생성 - [ ] 테스트 도구 도입 범위 결정 - [ ] `GameBoard.vue`의 영역 상태와 조작 로직을 composable·store로 분리 ## 1단계: 덱 불러오기와 로컬 플레이 - [x] 기존 덱 쿼리 파서 작성 - [x] 외부 입력 기본 검증 작성 - [x] 대기실 덱 URL 등록과 50장 기본 규칙 검증 - [x] NAS 카드 이미지 읽기 전용 공유 경로 구성 - [x] 카드 이미지 원본 환경변수를 프런트엔드 코드에 연결 - [x] 덱 데이터 기반 카드 인스턴스 생성 - [x] 표준 플레이 보드 배경과 카드 크기 기준 정의 - [x] 좌우 플레이어 정보 패널 자리 정의 - [ ] 플레이 보드 드롭 영역 좌표 정의 - [x] 덱 셔플과 1장 드로우 - [x] 단일 카드 정규화 좌표 드래그 이동 - [x] 여러 카드 드래그와 겹침 순서 처리 - [x] 단일 카드 앞면·뒷면 전환 - [x] 단일 카드 탭·언탭 - [x] 카드 더블클릭 탭·언탭 - [x] 카드 우클릭 조작 메뉴 - [x] `F` 키 전체화면 전환 - [x] 덱·손패·필드·무덤 기본 이동 - [x] 덱 위 N장 공개와 개별 정리 - [x] 첫 손패 7장과 1회 멀리건 - [x] 라이프 7장 세팅 - [x] 선후공별 AP와 턴 시작 드로우 - [x] 턴 시작 일괄 언탭과 카드별 제외 잠금 - [ ] 로컬 상태 초기화 ## 2단계: 온라인 2인 세션 - [x] Node.js 실시간 서버 구성 - [x] Socket.IO 연결 - [x] 방 만들기와 방 코드 참가 - [x] 방 만들기·참가 대기실 UI - [x] 방 만들기·참가 서버 동기화 - [x] 플레이어 좌석 할당 - [x] 게임 카드 플레이어 소유권 기반 상태 제출 - [x] 상대 카드 직접 조작 차단 - [x] 상대 손패·덱 카드 식별 정보 비공개 - [x] 공개 카드 이동·탭·뒤집기·영역 상태 동기화 - [x] 서버 무작위 선후공과 현재 차례 동기화 - [ ] 카드 조작 이벤트별 세부 서버 검증 - [x] 덱 인스턴스 순서와 셔플의 서버 권위 처리 - [x] 서버 권위 드로우·여러 장 공개·라이프 배치 - [x] 60초 유예 기반 같은 좌석 재접속 - [x] 브라우저 저장소 기반 내 비공개 덱·손패 상태 재접속 복구 - [x] 진행 중 게임의 대기실·첫 화면 접근 시 자동 복귀 - [x] 방 나가기와 새 방 만들기 복구 동선 - [ ] 전체 게임 상태 스냅샷 복구 - [x] 명시적인 방 종료 시 플레이어별 로컬 스냅샷 자동 삭제 - [x] 연결 종료 시 방 참가자 정리 - [x] NAS WebSocket 프록시 배포 - [ ] 비어 있지 않은 방의 유휴 만료 처리 ## 3단계: 안정화 - [ ] 모바일·태블릿 Pointer Events 검증 - [x] 선택 카드 맨 위 레이어 이동 - [x] 여러 카드 겹침 순서 조작 UX 검증 - [ ] 잘못된 덱 입력 오류 화면 - [ ] 이미지 로딩 실패 폴백 - [ ] 접근성 키보드 조작 범위 검토 - [ ] 서버 재시작 시 방 종료 안내 - [x] 공개 카드 상태 리비전으로 오래된 제출 무시 - [ ] 비공개 덱 조작 중 중복 클릭 잠금 - [ ] Redis 또는 상태 저장 필요성 검토 ## 확인이 필요한 정책 - [x] 표준 플레이매트 자산 확정 - [ ] 카드 뒷면 이미지 확정 - [ ] 한 방의 최대 플레이어와 관전자 정책 - [ ] 방 유지 시간 - [ ] 사용하지 않는 방 자동 삭제 시간 - [ ] 덱 빌더와 시뮬레이터 사이의 최종 전달 형식