제품명·헤더 로고 이미지 통일, 덱 이름 변경·조회 수 제거, 썸네일 홀드 미리보기를 누르는 동안만 표시하도록 수정하고 Tailwind CSS를 재빌드했다. Co-authored-by: Cursor <cursoragent@cursor.com>
19 KiB
19 KiB
업데이트 이력
2026-06-22 / v4.0.0 — 덱 카드 조회 수 제거
수행 작업
deckHistory.html,preset.html: 카드 메타에서 조회 수 표시 제거 (저장일·작성자만 유지)
2026-06-22 / v4.0.0 — 제품명 UNIARE·로고 이미지
수행 작업
- 표시 제품명
UADECK→ UNIARE (페이지 title, i18n, 관리자, 연동 문서) - 상단 헤더 텍스트 로고 →
images/assets/uniare-h48.png이미지 로고 - 이미지 다운로드 파일명 접두사
uadeck_→uniare_ - 내부 호환 유지:
UaDeckApi,uadeck_token,uadeck.db,UADECK_API_BASE등
2026-06-22 / v4.0.0 — Tailwind CSS 재빌드
수행 작업
package.json:npm run build:css스크립트 추가style/output.css재생성 —sm:px-6등 HTML에 추가됐으나 빌드에 없던 클래스 반영cardList.html,result.html:px-4 sm:px-6유지 (클래스 우회 제거)
2026-06-22 / v4.0.0 — 레이아웃·덱 이름 변경
수행 작업
- 헤더
v4.0.0표시 제거 (로그인 페이지 하단 푸터에만 작게 표시) deckHistory.html: 더보기 메뉴에 이름 변경 추가 (PUT /decks/:code)cardList.html,result.html: 콘텐츠·헤더 최대 너비1400px→ 1280px (max-w-7xl) 통일profile.css: 프로필 본문max-width: 42rem제거 → 내 덱·공개 덱과 동일한app-main너비
2026-06-22 / v4.0.0 — Docker 서비스명 uniare-* 통일
수행 작업
docker-compose.prod.yml: 서비스/컨테이너/이미지/볼륨 이름을uadeck-*에서uniare-*로 변경docker-compose.yml: API 서비스/컨테이너/볼륨 이름을uniare-*로 변경nginx/default.conf: 내부 API 프록시 대상uadeck-api→uniare-api반영nginx/uadeck.conf: API 프록시 대상 컨테이너 이름을uniare-api로 갱신docs/deploy.md: 운영 명령 및 컨테이너 확인 예시 이름을uniare-*기준으로 갱신
메모
- API DB 파일명(
uadeck.db)과 API 경로(/api/v1/*)는 호환성을 위해 유지했다.
2026-06-19 / v4.0.0 — 덱 썸네일 미리보기·저장 크기 통일
수행 작업
deckHistory.html:deck-preview-hold.js연동 — 내 덱 썸네일도 클릭·길게 눌러 확대preset.html: 썸네일 위「클릭·길게 눌러…」안내 문구 제거 (홀드 기능 유지)result.html: 저장용 미리보기를 다운로드와 동일한 1200px 기준으로 정규화 (normalizePreviewForSave)- 저장 시 HQ 옵션 무시 (
highQuality: false) 후 너비 1200px로 스케일 - 기존 960px 축소만 하던
compressPreviewForSave제거 → 크기 제각각이던 원인 해소
- 저장 시 HQ 옵션 무시 (
style/deck-history.css: 미사용.deck-card-preview-hint제거
참고
- 이미 저장된 덱 썸네일은 예전 크기 그대로이며, Preview에서 다시 저장하면 1200px로 갱신됨
2026-06-19 / v4.0.0 — 덱 저장 413 수정
원인
localhost:8080요청은 Nginx(client_max_body_size 2m)를 거침- 덱 저장 시 미리보기 PNG(base64)가 JSON에 포함되어 2MB 초과 → 413 Request Entity Too Large
수행 작업
nginx/default.conf:client_max_body_size2m → 25m (API location 포함)api/src/index.js: JSON limit 20mb, 413 전용 오류 메시지script/api.js: 413 사용자 안내 문구result.html: 저장용 미리보기 최대 너비 960px 리사이즈
적용
npm stop && npm start
2026-06-19 / v4.0.0 — 공개 덱 미리보기 수정
수행 작업
deck-preview-hold.js: mouseleave 즉시 닫힘 버그 수정, 길게 누르는 동안만 확대 (짧은 클릭 고정 제거)안내 문구:「클릭·길게 눌러 크게 보기」→ 이후 제거됨
2026-06-19 / v4.0.0 — 프로필 덱 저장 설정 UI
수행 작업
- 덱 저장 설정: 설명 문단 제거 →
?툴팁, 설정 패널·토글 ON/OFF 표시·즉시 저장 안내 메시지 - 토글 클릭 시 API/localStorage 동기화는 기존
deck-prefs.js유지
2026-06-19 / v4.0.0 — 메인 프로필 i18n·페이지 도움말
수행 작업
index.html:page-i18n.js로드, 언어 전환 시UaPageI18n+UaDeckAuth.refresh()로 프로필 드롭다운 재번역script/page-help.js: 제목 옆?버튼 클릭 시 설명 툴팁deckHistory.html,preset.html,profile.html: 상단 설명<p>제거 →?도움말 버튼style/app-shell.css:.page-title-row,.page-help-btn,.page-help-tooltip
2026-06-19 / v4.0.0 — 덱 즐겨찾기·공개 덱 미리보기
수행 작업
script/deck-favorites.js: share_code 기준 즐겨찾기 (localStorage)script/deck-preview-hold.js: 썸네일 길게 누르기 확대 미리보기deckHistory.html: 카드 하단 즐겨찾기 버튼, 툴바「즐겨찾기」필터preset.html: 카드 클릭 이동 제거 → 홀드 미리보기 + 하단「즐겨찾기」「불러오기」버튼style/deck-history.css: 즐겨찾기·홀드 오버레이 스타일- i18n:
deckFavorite,deckFavoriteFilter,deckHoldPreviewHint
메모
- 즐겨찾기는 브라우저 localStorage에 저장 (기기·브라우저별). 추후 계정 동기화 API 확장 가능.
2026-06-19 / v4.0.0 — AdSense·i18n 보완
수행 작업
- Google AdSense 우측 슬롯(
4260332296) 삽입:deckHistory.html,preset.html,profile.html#ad-sidebar script/ads.js:ins.adsbygoogle초기화 헬퍼script/page-i18n.js:data-i18n/data-i18n-html/data-i18n-placeholder+UaPageI18n.t()헬퍼script/auth-header.js: 드롭다운 메뉴 3개국어(ko/en/ja)login.html,signup.html,profile.html,deckHistory.html,preset.html정적 문구 i18n 연결cardList.html:← 홈버튼homeNav키 적용result.html: 저장 모달·로딩 확인·홈 버튼 기존applyTranslationsToUI유지,page-i18n으로 헤더 메뉴 번역deckHistory.html/preset.html: 목록·버튼·확인 대화상자 동적 문구 i18ni18n/translations.{ko,en,ja}.json: auth·덱 관리·프로필·공개 덱 관련 키 추가
확인
?lang=en또는?lang=ja로 각 페이지 문구 전환 확인- AdSense는 로컬/비승인 도메인에서는 빈 슬롯으로 보일 수 있음
2026-06-19 / v4.0.0
수행 작업
- v4.0.0 회원·덱 API·공유 시스템 1차 구현
api/Express + SQLite 백엔드 (인증, 덱 CRUD, 관리자 API)docker-compose.yml,.env.example,nginx/uadeck.conf추가- 프론트:
script/api.js,script/auth-header.js,style/auth-header.css - 신규 페이지:
login.html,signup.html,deckHistory.html,preset.html,admin.html index.htmlv4.0.0 + 프로필 헤더cardList.html:?cards=제거,?d=API 로드, 저장·공유 버튼result.html: localStorage 기반, 프로필 헤더docs/spec.md§9 API·DB 명세 반영
배포 방법
.env.example을.env로 복사 후JWT_SECRET,ADMIN_EMAIL,ADMIN_PASSWORD설정docker compose up -d --build- 리버스 프록시에
nginx/uadeck.conf규칙 적용 (/api/,/d/)
메모
- 비회원도 저장·공유 가능 (30일 만료). 회원은 영구 저장.
- 외부 연동:
GET /api/v1/decks/:shareCode, 클라이언트integrations/uadeck-deck-client.js
2026-06-19 / v4.0.0 덱 저장 UX
수행 작업
-
cardList.html저장·공유 버튼 제거 -
result.html하단 Back 제거 →「내 덱에 저장」「공유」버튼 추가 -
저장·공유 시 Preview 이미지 PNG 함께 API 저장 (
preview_image) -
덱 이름: 입력값 없으면
시리즈명 YYYY-MM-DD -
deckHistory.html미리보기 썸네일 표시 -
로그아웃 시 메인(
/)으로 이동 -
seedAdmin:ADMIN_EMAIL로 먼저 가입한 경우 역할을admin으로 승격 (기존에는 INSERT 실패로 관리자 미생성) -
auth-header.js: 프로필 메뉴 열 때/auth/me로 role 재동기화 (관리자 메뉴 미표시 수정) -
관리자 API: JWT role 대신 DB role 확인 (
createRequireAdmin) -
npm start/npm stop/npm run logs로컬 실행 명령 정리 (package.json) -
관리자 덱 관리 썸네일, 회원 모달 개편 (아바타·비밀번호 분리 모달)
-
본인 계정 역할/비활성 변경 서버·UI 차단, 표시 이름 필드 제거 (사용자명 사용)
2026-06-19 / v4.0.0 — 공개 덱·관리자 UI
수행 작업
- 메타 덱: 관리자 프리셋 등록 폐기 → 사용자
is_public공개 덱이/preset.html(공개 덱)에 노출 - 내 덱 저장 기본 비공개, 공유 시 공개, 내 덱 관리에서 공개/비공개 전환
- 덱 이름 기본값:
YYYYMMDD_HHMMSS(시리즈명 제외) admin.html레이아웃 개편 (style/admin.css), 프리셋 등록 탭 제거preset.html카드 그리드 + 필터 UI
2026-06-19 / v4.0.0 — 프로필·아바타
수행 작업
- 썸네일(프로필 사진) 미적용 원인: JPEG 등을
.png로 그대로 저장해 브라우저 표시 실패 → 업로드 전canvas로 PNG 변환 (script/image-utils.js) profile.html신규: 일반 사용자가 이메일·사용자명·아바타·비밀번호 변경 (PUT /auth/me,POST /auth/me/password)- 헤더 드롭다운에「내 프로필」추가 (
script/auth-header.js) - 아바타 URL에
updatedAt쿼리로 캐시 무효화 (저장 후 즉시 반영) admin.html아바타 업로드도 동일 PNG 변환 적용script/api.js:updateProfile,changePassword추가docs/spec.md인증 API 엔드포인트 보강
확인 방법
npm stop && npm start로 API 재시작 (auth 라우트 변경 반영)- http://localhost:8080/profile.html 에서 사진 업로드 →「프로필 저장」
- 헤더 썸네일 클릭 →「내 프로필」메뉴 확인
후속
- 헤더 프로필 버튼: 로그인 시 아바타 옆 사용자명 표시 (
auth-header.js,auth-header.css)
2026-06-19 / v4.0.0 — 덱 저장 UX·네비게이션
수행 작업
deckHistory.html:/d/코드경로 표시 제거 (링크 복사 버튼 유지)result.html하단 버튼:홈으로/이미지로 다운로드/내 덱으로 저장- 저장 시「모두에게 공개할까요?」모달 +「다음부터 물어보지 않기」토글
script/deck-prefs.js: 공개 기본값·프롬프트 스킵 (localStorage + API 동기화)users테이블:default_deck_public,skip_deck_public_prompt컬럼 추가profile.html: 덱 저장 설정 (기본 공개, 물어보기 on/off)- 뒤로가기 루프 수정:
result.html편집 복귀 시history.back(),cardList← 홈 버튼
확인
- API 변경 반영:
npm stop && npm start(또는docker compose up -d --build)
2026-06-19 / v4.0.0 — 레이아웃 통일·광고 공간
수행 작업
style/app-shell.css추가: 헤더·본문80rem(1280px, indexmax-w-7xl과 동일)deckHistory.html,preset.html,profile.html공통 셸 적용 (페이지 이동 시 헤더 너비 점프 제거)- 데스크톱: 본문 좌측 + 우측 300px 광고 레일(
app-ad-rail), 모바일: 상단 리더보드 슬롯 - 프로필 폼은 콘텐츠 영역 내
max-width: 42rem유지 auth-pages.css,admin.css너비도 80rem으로 통일
후속 UI
result.html저장 모달 토글: Tailwindtranslate-x-6미빌드 → 전용.save-deck-switchCSSresult.html하단 버튼 비율: 홈 0.5 · 다운로드 0.5 · 내 덱 저장 2result.html덱 저장: 브라우저 alert 제거 → 로딩 모달 완료 메시지 후 홈 이동signup.html: 비밀번호 확인 필드, 가입 후 홈(/) 이동cardList.html: 동일 카드 번호(패러랠 포함) 수량 공유 시 +/- 버튼 UI 동기화
2026-06-19 / v4.0.0 — 덱 썸네일 수정
수행 작업
- Preview 캡처 시 카드 이미지 로드 대기 +
cacheBust추가 (result.html) - 캡처 실패해도 덱 저장은 진행, 안내 메시지 표시
deckHistory.html:UaDeckApi.resolveMediaUrl()로 미리보기 URL 보정 (Live Server 등)- 이미지 로드 실패 시 플레이스홀더 표시
- Docker 미리보기 저장 경로를
./api/data/previews호스트 바인드 마운트로 변경 - API
getPreviewUrl: DBpreview_image컬럼도 참고
2026-06-19 / v4.0.0 UI — 내 덱 관리
수행 작업
deckHistory.html카드 그리드 레이아웃으로 개편 (미리보기 이미지 상단 배치)style/deck-history.css추가: 상단 여백, 툴바, 카드 그리드 전용 스타일- 시리즈별 필터 드롭다운 + 덱 이름·시리즈 검색 입력 추가
- Tailwind 미빌드 클래스 의존 제거
2026-06-19 / v4.0.0 UI — result 하단 버튼
수행 작업
result.html하단「내 덱에 저장」「공유」버튼이style/output.css에 없는 Tailwind 클래스(bg-slate-700,bg-emerald-600)로 인해 보이지 않던 문제 수정- 페이지 내
<style>에.result-footer-*,.result-btn-*전용 스타일 추가 (인증 페이지와 동일한 패턴)
2026-06-19 / v4.0.0 UI — 인증 페이지
수행 작업
style/auth-pages.css추가: 폼 최대 너비 28rem, 상단 여백, index와 동일한 그라데이션·폰트login.html,signup.html레이아웃 개선 (Tailwind 미빌드 클래스 의존 제거)
2026-06-19 / v4.0.0 배포·연동 보강
수행 작업
docker-compose.prod.yml: Nginx + API 풀스택 (정적 파일 볼륨 마운트, 재빌드 불필요)nginx/default.conf,docs/deploy.mdNAS 배포 가이드integrations/uadeck-deck-client.js옆 프로젝트용 클라이언트docs/api-integration.mdAPI 연동 문서admin.html프리셋 등록 탭 추가
2026-06-19 / v4.0.0
수행 작업
- v4 회원·덱 API·공유 방식 설계를 확정했다.
- URL 쿼리(
?cards=) 기반 공유는 폐기하고, 공유 코드 +GET /api/v1/decks/:shareCodeAPI로 전환하기로 했다. - 개인 덱은 저장마다 고유
share_code, 메타 덱·프리셋은 내용 해시 기반 고정 코드를 사용한다. - DB 스키마 초안(
users,decks)과 API 엔드포인트 목록을docs/spec.md§9에 반영했다. - 의사결정 내용을
docs/history.md에 기록했다.
메모
- 구현은 이 설계를 기준으로 진행한다. 실제 코드·Docker·화면 작업은 다음 단계다.
- 옆 프로젝트는 API 계약만 맞추면 되며, 레거시 쿼리 호환은 필요 없다.
2026-04-19 / v3.1.0
수행 작업
datas/ua51.js를 추가해ua51시리즈 데이터를 등록했다.images/ua51/에나 혼자만 레벨업카드 이미지 자산을 반영했다.images/ua49/에 누락되어 있던마도정병의 슬레이브병렬 카드 이미지를 보강했다.i18n/translations.ko.json,i18n/translations.ja.json,i18n/translations.en.json에ua51시리즈명을 추가했다.index.html과docs/spec.md의 버전 표기를v3.1.0으로 통일했다.- 다음 작업자가 동일한 기준으로 이어받을 수 있도록
docs/codex-handoff.md를 작성했다.
메모
- 이번 릴리즈는 신규 시리즈(
ua51) 반영과 누락 자산 보강이 핵심이다. - 배포 전에는
datas/<series>.js,images/<series>/,i18n/translations.*.json세 축이 모두 맞물렸는지 반드시 함께 확인해야 한다. - 이미지 자산은 계속
Git LFS대상으로 유지한다.
2026-03-30 / docs-bootstrap-1
수행 작업
- 프로젝트 루트의
.ai-rules.md와.cursorrules를 검토하여 문서 운영 규칙을 확인했다. - 부재하던
docs/디렉터리를 생성하고 문서 기본 세트(update.md,todo.md,spec.md,convention.md,history.md,map.md)를 초기 구축했다. - 정적 사이트 구조를 기준으로 주요 페이지(
index.html,cardList.html,result.html)와 보조 스크립트(script/navigation.js,i18n/i18n.js)의 역할을 문서화했다. - 카드 데이터셋 구조(
datas/*.js)와 이미지 경로 규칙(images/<seriesKey>/<fileName>)을 정리했다. - 이미지 저장소 현황을 점검했다.
- 점검 결과:
images/디렉터리 약1.7G, 이미지 파일 약9,370개, 데이터 파일52개. - 대용량 이미지 자산 관리를 위한
Git LFS도입 검토 사항과 주의점을 문서에 반영했다.
메모
- 현재 저장소에는
docs/가 없었기 때문에 이번 작업은 문서 체계 초기 세팅 성격이 강하다. Git LFS는 신규 이미지 유입 관리에는 유효하지만, 저장소 자체를 즉시 가볍게 만들지는 않으므로 히스토리 정리 전략을 별도 검토해야 한다.
2026-03-30 / lfs-migration-1
수행 작업
images/**전체를Git LFS대상으로 관리하기 위해.gitattributes를 추가했다.- 기존 저장소 용량 절감을 목표로
Git LFS히스토리 마이그레이션을 수행하는 방향으로 결정했다. - 현재 변경분을 포함한 뒤 전체 히스토리를 재작성하고 강제 푸시하는 절차를 진행한다.
메모
- 이번 작업은 단순 추적 설정이 아니라 과거 커밋까지 다시 쓰는 작업이므로 커밋 해시가 변경된다.
- 원격 반영 시 일반 푸시가 아닌
force-with-lease가 필요하다. - 마이그레이션 체크아웃 이후
ua27의 추가 이미지와 데이터 보완분이 확인되어 최종 반영 대상에 포함했다.
2026-03-30 / repo-reset-1
수행 작업
- 저장소 용량을 근본적으로 단순화하기 위해 현재 로컬 작업본을 기준으로 새 루트 커밋 하나만 남기는 방향으로 전환했다.
- 기존 Git 히스토리는 원격
main에서는 제거하고, 로컬 백업 브랜치로만 보존하는 방식으로 진행한다. images/**는 계속Git LFS대상으로 유지한다.- 새 시작 버전은
v3.0.0으로 정하고, 기존1.x,2.x버전 이력은 새 원격 기준에서 계승하지 않기로 했다.
메모
- 이 작업 후 원격 저장소는 사실상 "현재 스냅샷 기반 새 저장소"처럼 동작한다.
- 과거 커밋 이력, 기존 태그, 옛 해시는 원격 기준으로 더 이상 사용하지 않게 된다.
2026-03-30 / v3.0.1
수행 작업
- 일부 시리즈 데이터의 잘못된 이미지 경로를 실제 파일명 기준으로 수정했다.
ua04,ua30,ua37,ua38,ua45의imgSrc오기입을 정정했다.ua44에서 더 이상 사용하지 않는 주석 처리된UAPR/EVA-AP01,UAPR/EVA-AP02항목을 제거했다.- 누락되어 있던 이미지 파일
images/ua08/UAPB_BLC-AP01.png,images/ua09/UAPR_BTR-AP03.png를 반영했다.
메모
- 이번 반영은 카드 데이터와 실제 이미지 파일 간의 불일치를 줄이는 목적이다.
- 버전 태그 체계는
v3.x기준으로 이어간다.