커밋 그래프
51 커밋
작성자 SHA1 메시지 날짜
kjs그리고Claude Fable 5 8ef59a8215 채팅 UI 개편: 한 줄 티커 + 우측 사이드패널 채팅창
- 티커: 반투명 검은 가로 박스, 새 채팅을 한 줄씩 7초간 순차 표시,
  길면 말줄임(…) 처리. 접속 이후 도착한 메시지만 흘림
- 💬 버튼 → 기존 메뉴와 같은 우측 사이드패널로 전체 채팅창
  (히스토리 스크롤 + 말풍선 + 입력창, 내 메시지는 오른쪽 초록)
- SSE 연결은 chatClient 싱글톤(useSyncExternalStore)으로 티커·패널 공유
- 1:1 친구 채팅 로드맵을 docs/GAME_DESIGN.md 12절에 기록

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-14 16:47:10 +09:00
kjs그리고Claude Fable 5 6696e6bd54 채팅: 토큰 검증을 도배 제한보다 먼저 수행
미인증 요청이 남의 닉네임 전송 쿨다운을 소모해 정당한 유저를
429로 막을 수 있던 순서 결함 수정.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-14 16:40:39 +09:00
kjs그리고Claude Fable 5 ad157bc4fe 실시간 마을 채팅 티커
- 오른쪽 상단에 한 줄씩 뜨는 반투명 채팅, 20초 후 페이드아웃 (최대 6줄)
- 💬 버튼으로 입력창 토글, Enter 전송 / ESC 닫기
- SSE 스트림(/api/chat/stream): 접속 즉시 연결, 최근 20개 백로그는 비동기 전송,
  25초 하트비트로 프록시 유휴 타임아웃 방지
- 전송(/api/chat/send): 닉네임+토큰 검증(사칭 방지), 1.5초 도배 제한, 120자 제한
- chat_messages 테이블 자동 생성, 인프로세스 EventEmitter 브로드캐스트 (단일 컨테이너)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-14 16:38:25 +09:00
kjs그리고Claude Fable 5 7ae93bee91 밸런스: 건물 적재 한도 150 → 400
고레벨 고양이 3마리 편성 시 150은 1~2분 만에 가득 차 생산이 멈추고
상시 수거 노동이 됐음. 400이면 최대 편성 기준 ~10분 여유가 생기고
오프라인 복귀 시 수거 보상도 의미 있는 양이 됨.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-14 11:48:42 +09:00
kjs그리고Claude Fable 5 eb950dd7af 마을 복구 보안: 비밀 암호 도입
- 새 마을 생성 시 닉네임과 함께 비밀 암호(2~16자) 필수 지정
- 복구 API: GET → POST 전환, 닉네임+암호 일치 시에만 세이브·토큰 반환
- 서버에는 salt+SHA-256 해시만 저장 (timingSafeEqual 비교)
- 암호 도입 전 마을은 최초 복구 시 사용한 암호를 그대로 등록(claim)
- 오프라인 시작 시 암호를 로컬 보관 → 자동 재등록에 포함

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-14 11:44:14 +09:00
kjs그리고Claude Fable 5 1b438d392a 소프트락 감사: 재추첨 장터 해금 + 진행 불가 위험 3건 수정
- 입양 재추첨 버튼: 장터 완공 전까지 숨김 (완공 후 해금)
- 부엌 있는데 요리 가능 고양이가 없으면 입양 후보에 요리 적성 보장
- 서버 접속 불가 시에도 닉네임 결정 가능 (오프라인 시작 → 이후 자동 재등록)
- 저장 403(미등록 닉네임) 시 재등록 후 재시도
- 파업 중 굶주림 행복도 하락 제외 + 자연 회복 +2/분 (전원 파업 데드락 방지)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-14 11:25:59 +09:00
kjs그리고Claude Fable 5 ad6dbdbe97 튜토리얼 졸업 시 정착 지원금 냥코인 200 (경제 소프트락 수정)
- 장터(회관 Lv2 건설) 전까지 코인 수입이 없어 3마리째 입양(100코인)이
  불가능하던 문제 — 부엌 인력을 못 뽑아 굶는 소프트락
- 작별 단계 진입 시 촌장 냥이가 🪙200 지급 + 작별 대사에 안내
- 이미 튜토리얼을 마친 기존 마을도 접속 시 1회 소급 지급 (중복 방지 플래그)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-14 11:11:44 +09:00
kjs그리고Claude Fable 5 fc882c9dff 유령 닉네임 복구 가능하게 수정 (마을 불러오기 실패 원인)
- 등록만 되고 세이브가 저장된 적 없는(data NULL) 닉네임은
  중복 체크에서 사용 가능으로, 재등록 시 새 토큰으로 재선점
- 불러오기 실패 시 "서버에 닿지 않아" 대신 "그 이름의 마을은 없는걸?"

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-14 10:51:51 +09:00
kjs그리고Claude Fable 5 d5ce9be5f4 닉네임 타이틀·마을 불러오기·동기화 비교 버그 수정
- HUD 타이틀: 닉네임 설정 시 "{닉네임}의 마을 · 회관 LvN"
- 닉네임 모달에 "마을 불러오기" 모드: 기존 마을 이름 입력 →
  1초 디바운스로 존재 확인("마을을 찾았어!") → 서버 세이브 복원
  (/api/village/recover — 토큰 포함 반환, 비밀코드 보호는 추후)
- pull 비교 버그 수정: 오프라인 정산이 로컬 updatedAt을 항상 현재로
  만들어 다른 기기 세이브를 절대 못 받던 문제 → 디스크에서 읽은
  시점(loadedUpdatedAt) 기준으로 비교
- 모달 UX: Enter로 결정(한글 조합 중 제외), IME 간섭 제거(trim 시점 이동),
  모드 전환 시 자동 재체크

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-14 10:44:50 +09:00
kjs그리고Claude Fable 5 5dd74babe8 Phase D: 닉네임 기반 DB 세이브 동기화
- villages 테이블(pg-jskim): nickname PK + 보호 토큰 + JSONB 세이브
- API: /api/village/check(중복)·register(선점)·save(토큰 검증 업서트)·load
- 닉네임 모달: 촌장 냥이 인사 직후 게임 차단, 입력 멈춘 1초 후 자동
  중복 체크(디바운스), 사용 가능할 때만 결정 버튼 활성화
  한글·영문·숫자 2~12자 검증, 서버 불가 시 로컬 시작 후 재시도
- 동기화: 30초마다 자동 push + 종료 시 push, 부팅 시 서버가 더 최신이면
  교체(replaceState → 마이그레이션·오프라인 정산 재수행)
- 기존 세이브도 닉네임 미설정이면 모달 표시

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-14 10:36:22 +09:00
kjs그리고Claude Fable 5 401db0cb9e 이모지 전면 이미지화: 건물 4종·자연 소품 9종·아이콘 12종
- build2.png → 고양이 집·햇볕 데크·장터·창고 일러스트 적용
- nature.png → 나무 3종(보드=소나무, 외곽=3종 순환)·데이지·튤립·밀·
  버섯·바위·꽃덤불 — 캔버스 나무/장식 이모지 제거
- icons.png → 생선·목재·돌·구이·발바닥 코인·망치·땀·접시·잠·화남·팬·하트
  판자 배지(아이콘+숫자), 말풍선(생산·식사·수면·파업·회수), HUD pill 적용
- 캔버스 이모지 렌더링이 브라우저/OS 폰트에 따라 깨지던 문제 해결
- 원본 3장 assets-src 보관, 이모지는 이미지 로드 실패 시 폴백으로 유지

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-14 10:08:30 +09:00
kjs그리고Claude Fable 5 3cbad820a3 행복도 시스템 해금제: 회관 Lv3 + 햇볕 데크 설치 시 개방 (소프트락 수정)
- 해금 전: 행복도 증감·파업 로직 완전 비활성, 속도 배율 중립, UI에서 💗 숨김
  → 초반에 행복도를 올릴 수단이 없어 파업 소프트락에 걸리던 문제 해결
- 해금 조건 달성 시 촌장 냥이가 재등장해 행복도 시스템 안내 (1회)
- 해금 순간 전원 행복도 80으로 초기화
- 기존 세이브 마이그레이션: 조건 미충족이면 파업 해제 + 행복도 리셋,
  이미 충족한 마을은 안내 생략
- 햇볕 데크 설명에 해금 역할 명시

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-14 09:49:29 +09:00
kjs그리고Claude Fable 5 ec71624a29 Phase C: 냥코인 경제 — 장터·창고 상한·입양 비용·즉시 완공
- 냥코인(🪙) 재화 + HUD 표시, 복덩이 패시브 실효과(일하는 중 평균 100초당 1)
- 장터 건물(목재 120, 회관 Lv2): 판매 품목 선택 → 분당 5개 자동 판매
  가격: 생선 1·목재 2·돌 3·구이 4·훈제 10 — 가공할수록 이득
- 창고 상한: 자원별 기본 500, 창고 건물(+500)로 확장. 가득 차면 회수 차단
  (부분 회수·"창고 가득" 피드백), 건물 적재도 150 한도로 생산 정지
- 입양 비용: 3마리째부터 100+(n-2)×50, 모달에 비용 표시. 재추첨 🎲 30코인
- 즉시 완공: 건설 중 패널에서 남은 10초당 1코인
- 요리 판매는 부엌 선반에서 차감 — "먹일까 팔까" 선택 완성

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-14 09:42:29 +09:00
kjs그리고Claude Fable 5 9a534b0f06 마을 초기화 기능 제거
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 18:21:18 +09:00
kjs그리고Claude Fable 5 8138284d7e 튜토리얼 페이스 개선: 촌장 냥이가 건설 자원 지원
- 단계 진입 시 자동 지급: 벌목장(생선 30)·부엌(목재 60)·회관 증축(목재 100+생선 80)
- 회관 단계에선 '특훈'으로 최고 레벨 친구를 Lv3으로 — 대기 없이 증축 가능
- 대사에 지원 멘트 반영 ("내가 미리 준비해뒀어!", "마을 발전 기금에서 내가 쏠게")

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 18:19:50 +09:00
kjs그리고Claude Fable 5 dd49dd8c6d 마을 초기화 버튼 (회관 패널)
- engine.reset(): 세이브 삭제 + 새 게임 상태로 즉시 전환 (튜토리얼부터)
- 회관 패널 하단에 확인 창 포함 초기화 버튼
- 콘솔에서 localStorage만 지우면 5초 자동 저장이 되살리는 문제의 정식 해법

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 18:12:05 +09:00
kjs그리고Claude Fable 5 a4c6764731 튜토리얼 하이라이트: 눌러야 할 곳을 노란 점선 펄스로 안내
- DOM 버튼: 입양·상점·구매(부두/벌목장/부엌)·배치·증축하기·입양 선택
  버튼에 점선 아웃라인이 커졌다 작아졌다 (tut-pulse 애니메이션)
- 캔버스 건물: 부두·벌목장·회관 풋프린트 둘레에 행진하는 점선 다이아몬드
  (크기 펄스 + 골드 글로우)
- 단계·패널 상태에 따라 타깃 자동 전환 (상점 열면 구매 버튼으로,
  건물 패널 열면 배치 버튼으로 이동)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 18:06:12 +09:00
kjs그리고Claude Fable 5 6225403290 튜토리얼: 촌장 냥이가 안내하는 10단계 온보딩
- 새 게임: 회관만 있는 빈 마을(고양이 0·자원 0)에서 시작
- 촌장 냥이(코숏 스프라이트) + 말풍선 가이드 오버레이 (진행도 n/10, 태스크 칩)
- 라인: 인사 → 첫 입양 → 부두 건설(무료·강물 위)·배치 → 둘째 입양 →
  벌목장 건설(생선 30)·배치 → 부엌 건설(목재 60) → 회관 Lv2 증축 → 작별
- 조건 충족 시 자동 진행, 인사·작별은 버튼. 완료 후 자유 운영(step 99)
- 부두·벌목장을 상점 구매 건물로 이동 (기존 세이브는 "보유 중"+튜토리얼 생략)
- 튜토리얼 입양 후보는 필요 적성(낚시→벌목) 보장

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 17:58:58 +09:00
kjs그리고Claude Fable 5 a90d9b217f 꾸미기 시스템: 바닥 장식 타일 9종 (deco.png)
- deco 시트 9분할 (흙마당·바위 터·돌바닥·나무 데크·자갈길·그루터기 쉼터·
  꽃잔디·돌광장·나무길), 원본은 assets-src 보관
- 상점에 🌿 꾸미기 섹션 (3열 그리드, 여러 개 배치 가능)
- 구매 → 배치 모드: 연속 배치 지원 (클릭마다 비용 차감, ESC로 종료),
  같은 타일 재배치 시 교체, 건물·나무·물 타일 차단
- 정사각 탑뷰 아트를 아핀 변환으로 아이소 다이아몬드에 매핑해 바닥에 밀착
- 배치된 장식 클릭 → 패널에서 🗑 치우기 (건물 히트가 우선)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 17:44:47 +09:00
kjs그리고Claude Fable 5 1ff8d0b8ca Phase B: 체력·강제 휴식·행복도·파업·고양이 집·햇볕 데크·오프라인 정산
- 체력(energy): 작업 중 분당 -2(튼튼함 -30%), 소진 시 강제 휴식 —
  배치 해제 후 수면 포즈로 회복(분당 +20, 고양이 집 +30), 완충 시 자동 복귀
- 행복도: 포만 80↑ +1/분, 굶주림 -4/분, 고양이 집 부족 -2/분(바닥 25),
  휴식 +3/분, 햇볕 데크 회복 1.5배, 인기쟁이 동료 버프
  효과: 80↑ 속도 +10%, 50 미만 -30%, 20 미만 파업(배치 해제·재배치 불가)
- 파업: 💢 배회, 행복도 40 회복 시 이전 일터로 자동 복귀
- 새 패시브: 낙천적(-40%)·까다로움(+50%)·인기쟁이 / 튼튼함·일중독 실효과화
- 새 건물: 고양이 집(정원 4, 목재100+돌20)·햇볕 데크(목재120+돌40) —
  배치 없는 패시브 건물(전용 패널), 회관 Lv3 해금, 이모지 렌더(일러스트 대기)
- 오프라인 정산: 최대 8시간을 60초 단위 시뮬레이션, 복귀 시 토스트
- UI: 고양이 카드에 체력(⚡)·행복도(💗) 바, 휴식/파업 상태 표시
- 뷰: 휴식 시 고양이 집으로 이동 후 수면 포즈+💤, 파업 시 💢

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 16:20:37 +09:00
kjs그리고Claude Fable 5 c50e12400b 건설 시간 시스템: 배치 후 공사장 표시 → 시간 경과 시 완공
- BuildDef.buildTime 추가 (부엌 60초, 채석장 120초), 상점에 ⏱ 표시
- 배치 확정 시 constructionUntil 타임스탬프 설정 (오프라인에도 진행)
- 건설 중: 공사장 일러스트 + 🔨 카운트다운 판자 배지 + "건설 중" 라벨,
  생산·배치 불가, 회관 증축 요건에도 미인정
- 패널: 공사장 이미지 + 진행 바 + 남은 시간 표시
- 완공 시 tick에서 자동 전환

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 16:08:28 +09:00
kjs그리고Claude Fable 5 1f858352a0 보드 확장 15×15 + 건물 풋프린트 + 부두 물 위 배치
- 보드 11×11 → 15×15, 강을 동쪽 2열로 확장 (흐름·반짝임도 2열)
- 건물 풋프린트: 회관 3×3, 부두·벌목장·채석장·부엌 2×2 (pos=좌상단 앵커)
  렌더·클릭 영역·작업 위치(반경)·산책 충돌 전부 풋프린트 기반
- 배치: canPlaceAt이 풋프린트 전 타일 검사 + 사각 겹침, 호버 시 풋프린트
  전체 하이라이트 + 실제 크기 고스트
- 부두: onWater 규칙(물 타일 위에만), 이미지 좌우 반전(강 방향)
- 보드 버전(v2) 마이그레이션: 기존 세이브 건물을 새 기본 위치로 재배치

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 16:01:32 +09:00
kjs그리고Claude Fable 5 256d367bcd 마을 회관 일러스트 적용 (village.png)
- 발바닥 문양 오두막 일러스트를 투명화(420px)해 회관에 적용
- 원본은 assets-src/buildings/village_hall.png 보관
- 회관 클릭 영역을 일러스트 크기에 맞게 확장

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 15:46:46 +09:00
kjs그리고Claude Fable 5 e19dab49f5 에셋 정리 + 원본 보관 + 건물 일러스트 적용
- 미사용 에셋 삭제: 구 오렌지 태비 4프레임(품종 시트로 대체), create-next-app svg
- assets-src/: AI 생성 원본(품종 시트 8장·잔디·강물·도구·건물 시트) 프로젝트로 이동
- build.png 슬라이스: 어두운 글로우 배경을 밝기 기반 플러드필로 제거 →
  부두(선착장+보트)·벌목장·채석장(광산)·부엌(모닥불) 4종
- 마을 캔버스·상점·패널 아이콘에 건물 일러스트 적용 (도구 아이콘은 폴백)
- 배치 고스트도 건물 일러스트, 히트 영역 확장, 삭제된 루트 프레임 404 폴백 제거

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 15:40:42 +09:00
kjs그리고Claude Fable 5 e5c58b3d6a 자연 친화 UI 전면 개편 (디자인 문서 기반)
- 폰트: Jua(제목·버튼)·Gowun Dodum(본문)·JetBrains Mono(숫자) next/font 적용
- 팔레트·공통 클래스: 우드/크림/잎사귀 토큰, wood-plank·wood-pill·nature-btn·
  amber-btn·panel-wood/paper·card-nature·chip-nature·bar-* (globals.css)
- HUD: 어두운 나무 바 + 매달린 판자 타이틀(로프) + 우드 자원 pill + 초록 입양 버튼
- 패널: 나무 프레임(나뭇결 텍스처) + 크림 종이 이중 구조 + 잎사귀 장식
- 카드: 비대칭 잎모양 모서리 + 초록 액센트 바, 연두 적성 칩, 초록/앰버 진행 바
- 입양 모달·상점·토스트·배치 힌트 모두 동일 스타일
- 캔버스: 건물 자원 배지를 나뭇결 판자+초록 글로우로, 라벨은 Jua+크림 외곽선

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 15:33:46 +09:00
kjs그리고Claude Fable 5 ecfccfbe70 건설 방식 개편: 상점 구매 + 자유 배치 (클래시 오브 클랜 방식)
- 건물 위치가 게임 상태(building.pos)로 이동, 구세이브 자동 마이그레이션
- 🛒 상점 패널: 건물 목록·비용·해금 조건, 구매 → 배치 모드 진입
- 배치 모드: 배치 가능 타일 하이라이트, 호버 타일 초록/빨강 + 고스트,
  클릭 확정(비용은 확정 시 차감), ESC/취소 버튼
- 배치 규칙: 물·나무·회관·기존 건물 차단, 부두는 물가 열 전용
- 기존 건물 📍 이동 기능 (건물 패널), 이동 시 배치된 고양이가 새 일터로 걸어감
- 공터(🚧) 방식 제거

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 15:21:44 +09:00
kjs그리고Claude Fable 5 9de2abfd85 Phase A: 채석장·돌 자원·회관 Lv3·부엌 증축·훈제 생선·적성 포인트
- 돌 자원 + 채석장(목재 120, 회관 Lv2 해금, 채굴 3슬롯)
- 건설 시스템 공통화 (BUILD_DEFS): 공터 표시·건설 패널 데이터 기반
- 부엌 Lv2 증축 (목재 150+돌 60): 선반 15, 회관 Lv3와 함께 훈제 생선 해금
- 회관 Lv3: 목재 250+돌 150, 채석장·부엌 Lv2·Lv5↑ 2마리 → 수용 8
  (Lv4는 목공소 대기 잠금 예고)
- 적성 포인트: 3레벨마다 1 지급, 카드에서 원하는 적성에 투자 (품종 상한)
- 경험치 필요량 레벨×60 → ×90, 세이브 마이그레이션(stone·aptitudePoints)
- HUD 돌 칩, 자원 이모지/라벨 공통화

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 15:01:12 +09:00
kjs그리고Claude Fable 5 590cb98ca7 maine_coon walk2 좌우 반전 (걷기 프레임 방향 불일치로 인한 도리도리 수정)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 14:49:59 +09:00
kjs그리고Claude Fable 5 4f2d0d9d76 품종 스프라이트 8종 재생성본 적용 (다리 5개 문제 해결)
- 앉은 자세 idle·측면 뷰 걷기·단일 앞발 work·양발 숟가락 cook으로
  해부학 오류를 원천 차단한 재생성 시트로 전량 교체
- 걷기: 측면 보폭 교대 2프레임 복원 (200ms), 기울임 보정 제거

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 14:46:57 +09:00
kjs그리고Claude Fable 5 2d1ae603b4 배경을 잔디·강물로 전면 채움 (하늘색 여백 제거)
- 캔버스가 뷰포트를 픽셀 단위로 가득 채우고 월드 좌표계로 렌더
  (zoom = 보드 fit 배율, 보드는 월드 중앙 배치, 리사이즈 대응)
- 잔디 텍스처를 화면 전체에 커버, 격자 힌트는 플레이 보드에만 유지
- 강 스트립을 화면 밖까지 연장 (양방향 ±30타일) + 반짝임 오버레이 동일 적용
- 보드 밖 배경에 나무 16그루·꽃·바위 장식으로 숲 프레임 연출
- 클릭 좌표를 zoom 기반 월드 좌표로 변환

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 14:31:11 +09:00
kjs그리고Claude Fable 5 c50c266f2e UI 개편: 전체화면 마을 + 건물 클릭 패널
- 마을 캔버스가 뷰포트 전체를 채움 (ResizeObserver 스케일링)
- 상단 HUD: 회관·자원 칩 + 고양이 목록·입양 버튼 (반투명 오버레이)
- 건물 클릭 → 우측 플로팅 패널: 정보(적성·슬롯·속도·진행)·회수·
  배치 가능한 고양이 목록(예상 속도순, 현재 일터 표시)에서 배치/해제
- 회관 클릭 → 증축 요건 체크리스트 패널, 부엌 미건설 시 공터(🚧) 클릭 → 건설
- 고양이 전체 목록은 서랍 패널로 이동, 기존 그리드 섹션 제거
- 배지 클릭 빠른 회수는 유지, 메시지는 토스트로 표시

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 14:23:45 +09:00
kjs그리고Claude Fable 5 b2f5199bc8 게임 설계서 v1: 경제·건물 로드맵·체력/행복도·상점·마을 확장·기술 설계
확정 사항: 낮/밤 없음(항상 낮, 체력·행복도로 페이스 조절), 장기 구조는
마을 확장만(은퇴 없음), DB 세이브 동기화(Phase D), 프레스티지 폐기.
구현 로드맵 Phase A~E 정의.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 14:15:04 +09:00
kjs그리고Claude Fable 5 6334e578d3 이동 방향 반전 수정: 스프라이트 기본 방향(왼쪽)에 맞게 flip 조건 반전
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 14:02:09 +09:00
kjs그리고Claude Fable 5 e8c062d14f 품종별 스프라이트 8종 적용 (6포즈: 대기·걷기2·일·요리·잠)
- 시트 8장을 연결 성분 분석으로 슬라이스 (이미지에 새겨진 파일명 텍스트는
  면적 필터로 배제), 배경 플러드필 투명화, 256px 축소
- CAT_SPRITE_DIR 8품종 등록, catSprite 폴백 체인 (품종→work→기본)
- VillageView: src 키 지연 로드 캐시, 부엌 작업 시 cook(냄비 젓기) 포즈
- sleep 포즈는 낮/밤 시스템(3단계)용으로 준비됨

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 13:58:31 +09:00
kjs그리고Claude Fable 5 01cca9232c 입양 모달·고양이 카드에 실제 스프라이트 사용
- catSprite(breed, frame) 헬퍼 + CAT_SPRITE_DIR 품종별 폴더 매핑 준비
- 모달 후보는 idle 스프라이트(h-20), 카드 헤더는 미니 아바타(h-7)
- 품종 시트가 들어오면 CAT_SPRITE_DIR 등록만으로 확장

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 13:49:33 +09:00
kjs그리고Claude Fable 5 ef7f702402 입양 모달: 랜덤 후보 3마리 중 선택
- 입양하기 → 모달에 후보 3마리 (능력치·품종 희귀도·적성·패시브 전부 랜덤)
- 패시브 배지 마우스오버 시 상세 툴팁 (이름·긍정/부정/복합 구분·효과)
- PassiveBadge 컴포넌트로 통합, 고양이 카드에서도 동일 툴팁 사용
- 모달 밖 클릭/✕로 취소 가능

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 13:46:33 +09:00
kjs그리고Claude Fable 5 92ffa858c3 부엌 작업 버블을 🍳로 수정 (resource 없는 건물의 🪵 폴백 버그)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 13:40:55 +09:00
kjs그리고Claude Fable 5 59e337ab90 2단계: 부엌·요리·포만도·자동 식사·회관 증축
- 부엌 건설(목재 60), 요리 적성 배치, 물고기 구이(생선 2→구이 1, 포만도 +40)
- 레시피 해금 구조: 회관/부엌 레벨 조건 (훈제 생선은 회관 Lv3 예고)
- 포만도: 식욕×0.03/초 감소(소식가/대식가 반영), 배고프면 부엌에서 자동 식사
- 배고픔 페널티: 포만도 25 미만 0.7배, 0이면 0.3배
- 회관 증축 Lv2(목재100+생선80+Lv3 고양이) → 수용 5마리, Lv3은 채석장 대기
- UI: 증축 버튼·요건 표시, 부엌 카드(레시피·선반), 고양이 포만도 바
- 마을 뷰: 부엌 타일(냄비), 🍖 배지, 식사 🍽️ 버블, 재배치 시 이동 버그 수정

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 13:38:57 +09:00
kjs그리고Claude Fable 5 aa289c3616 걷기 애니메이션 개선: 프레임 교대 대신 총총 바운스 + 미세 기울임
두 걷기 프레임의 몸통 각도가 달라 교대 시 도리도리처럼 보이던 문제.
walk1 한 프레임에 hop 바운스와 ±3.4° 기울임으로 걷는 느낌을 냄.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 12:39:46 +09:00
kjs그리고Claude Fable 5 a9a47f9d7e 고양이 스프라이트 적용: 4프레임 (대기·걷기 2·일하기)
- cat_sprite.png 시트를 4프레임으로 슬라이스, 가장자리 플러드필로 배경 투명화
  (배 크림색 보존), 256px 축소 → public/assets/cats/
- 걷기 180ms 프레임 교대, 일할 때 work 포즈 + 바운스, 좌우 반전 지원
- 로드 전 이모지 폴백 유지

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 12:38:02 +09:00
kjs그리고Claude Fable 5 318c7a36b1 강물 텍스처 교체: 수면 전용 이미지 + 한 방향 흐름
- 순수 수면 텍스처로 교체 (900px JPEG, 137KB)
- 컨텍스트를 강 방향으로 회전 후 미러 타일링 스크롤 → 이음매 없는 단방향 흐름
- 상류(북동) → 하류(남서) 22px/초

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 12:34:14 +09:00
kjs그리고Claude Fable 5 881673b975 잔디 일러스트 텍스처 적용
- public/assets/grass.jpg (1200px JPEG 최적화)
- 잔디 타일 영역 클리핑 채움, 격자 힌트는 미세한 화이트 오버레이로 유지
- 로드 전 단색 폴백

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 12:27:50 +09:00
kjs그리고Claude Fable 5 ccf9052dc9 강물 일러스트 텍스처 적용
- public/assets/water.jpg (원본 2.7MB → 1200px JPEG 233KB 최적화)
- 물 타일 영역을 클리핑해 텍스처 채움, 강 방향 느린 드리프트 애니메이션
- 타일 반짝임은 은은한 화이트 오버레이로 유지, 로드 전 단색 폴백

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 12:25:39 +09:00
kjs그리고Claude Fable 5 b50a22c6b9 도구 일러스트 에셋 7종 추가 및 건물 아이콘 적용
- public/assets/tools/: 낚싯대·도끼·곡괭이·약초바구니·냄비·톱·빗 (적성 키 이름)
- 원본 파일명 axe/pickaxe가 서로 뒤바뀌어 있어 교정
- VillageView 건물 스프라이트를 일러스트로 교체 (로드 전 이모지 폴백)
- BuildingCard 헤더 아이콘도 일러스트 사용

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 12:20:38 +09:00
kjs그리고Claude Fable 5 348ca5ded7 쿼터뷰 마을 뷰 v1: 아이소메트릭 캔버스 + 고양이 이동·작업 애니메이션
- 11x11 아이소 타일 (잔디·물가·나무·장식), 회관/부두/벌목장 배치
- 고양이: 미배치 시 마을 배회, 배치 시 건물로 걸어가 작업(바운스+💦)
- 생산 말풍선, 건물 배지 클릭으로 산출물 회수
- 렌더 루프는 engine.peek() 라이브 참조 사용 (매 프레임 클론 회피)
- 컬러 이모지에 fillStyle 알파가 적용되는 문제 수정, 페이지 타이틀 변경

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 10:02:17 +09:00
kjs abb90ea1fb chore: 배포 재트리거 (Actions 이력 초기화 이후) 2026-08-12 19:13:11 +09:00
kjs그리고Claude Fable 5 f5ae61a879 고양이 마을 1단계: 개체 생성·배치·틱 생산·수동 회수
- 품종 8종·패시브·랜덤 개체 생성 (기획서 4.2, 5장)
- 부두/벌목장 배치, 적성 0 배치 불가, 적성 비선형 작업량 (4.4)
- rAF+델타 타임 엔진(모듈 싱글턴), UI 300ms 동기화 (기술 메모)
- 수동 회수(운반 수레 전), localStorage 저장(version 필드)
- 회관 Lv1 수용 3마리, 입양 버튼

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 17:44:59 +09:00
kjs그리고Claude Fable 5 c712a8b6e2 메인 페이지 기본 틀: 헤더·콘텐츠 카드·푸터 + DB 상태 표시
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 17:25:33 +09:00
kjs 03473faff0 기존 플레이스홀더 이력 병합 (내용은 현재 트리 유지) 2026-08-12 17:17:35 +09:00
kjs그리고Claude Fable 5 5dd265605f dev-pilots 표준 파이프라인 적용: deploy.yml + docker-compose (포트 3000)
- 공식 워크플로우(.gitea/workflows/deploy.yml) 그대로 사용 (repo secrets 주입)
- deploy/docker-compose.yml: Next.js 포트 3000으로 Traefik 라벨 변경
- 커스텀 배포 방식 제거

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 17:11:09 +09:00
kjs그리고Claude Fable 5 f695b583e4 프로젝트 기본 구성: Next.js + PostgreSQL + Gitea Actions 배포
- Next.js 15 (App Router, TypeScript, Tailwind), pg 커넥션 풀
- /api/health DB 헬스체크, standalone Dockerfile
- Gitea Actions: 빌드 → 컨테이너 교체 → Traefik(jskim.vexplor.com) 라우팅
- 로컬 개발용 SSH DB 터널 스크립트 (scripts/db-tunnel.sh)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 17:01:55 +09:00