1ff8d0b8ca4326b5f54ee1a3f9f88eb1d50ba0f1
- 체력(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>
jskim.vexplor.com
Next.js(App Router, TypeScript) + PostgreSQL 개인 프로젝트.
스택
- 프론트/백엔드: Next.js 15 (React 19, API Routes로 Node.js 백엔드 겸용)
- DB: PostgreSQL 17 — THREEDEV 서버(211.115.91.140)
pg-jskim컨테이너, DB/계정jskim - 배포: Gitea Actions → Harbor(
harbor.wace.me/dev-pilots/jskim) → Docker + Traefik(HTTPS,jskim.vexplor.com)
로컬 개발
DB가 방화벽 뒤에 있어 SSH 터널이 필요하다.
# 터미널 1: DB 터널 (localhost:5436 -> pg-jskim)
./scripts/db-tunnel.sh
# 터미널 2: 개발 서버
npm run dev
- 환경변수:
.env.local(gitignore 대상,.env.example참고) - DB 연결 확인: http://localhost:3000/api/health
배포
dev-pilots 교육 파이프라인을 그대로 사용한다. main 브랜치에 push하면
Gitea Actions(.gitea/workflows/deploy.yml)가 자동으로:
- Docker 이미지 빌드 → Harbor push (
harbor.wace.me/dev-pilots/jskim) deploy/docker-compose.yml로 컨테이너 교체 (web+pgnet네트워크, Traefik 라벨, 포트 3000)- Traefik이
jskim.vexplor.comHTTPS 라우팅
운영 DATABASE_URL과 Harbor 인증(HARBOR_USER/HARBOR_SECRET)은 저장소 Secrets로 이미 등록되어 있다.
구조
src/
app/ # App Router 페이지
api/health/ # DB 연결 헬스체크
lib/db.ts # pg Pool (DATABASE_URL 사용)
scripts/db-tunnel.sh
Dockerfile # standalone 빌드, node:20-alpine
deploy/docker-compose.yml # 배포 정의 (Traefik 라벨, 앱 포트)
.gitea/workflows/deploy.yml # CI/CD (dev-pilots 표준)
언어
TypeScript
96.1%
CSS
3%
Shell
0.3%
JavaScript
0.3%
Dockerfile
0.3%