- 카테고리 선택 UI를 최상단으로 이동
- YouTube 카테고리 전용 폼 추가 (URL 입력 → 자동 정보 조회)
- 폴더 구조 분리: pages/pc/admin/schedule/form/
- API 추가:
- GET /schedules/categories (카테고리 목록)
- DELETE /schedules/:id (일정 삭제)
- GET /admin/youtube/video-info (영상 정보 조회)
- POST /admin/youtube/schedule (YouTube 일정 저장)
- fetchApi에서 body 없는 요청 시 Content-Type 미설정
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- 형태소 분석기 사용자 사전 관리 페이지 추가
- 단어 추가/삭제/수정 시 즉시 저장 및 형태소 분석기 리로드
- 품사별 통계 및 필터링 기능
- 검색 기능 추가
백엔드:
- GET/PUT /api/schedules/suggestions/dict API 추가
- morpheme.js에 reloadMorpheme(), getUserDictPath() 함수 추가
프론트엔드:
- AdminScheduleDict.jsx 페이지 추가
- AdminSchedule.jsx에 사전 관리 버튼 추가
- 라우트 추가 (/admin/schedule/dict)
Co-Authored-By: Claude <noreply@anthropic.com>
- 생일 카드 컴포넌트 추가 (PC/모바일)
- 생일 폭죽(confetti) 애니메이션 적용 (하루에 한 번)
- 생일 상세 페이지 추가 (/birthday/멤버이름/년도)
- 관리자 일정 페이지에 생일 표시 (수정/삭제 버튼 숨김)
- 일정 상세 페이지 404 에러 UI 개선
- 일정 상세 페이지 불필요한 재시도 방지 (retry: false)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- PC/모바일 각각 사이트 스타일에 맞는 404 페이지 생성
- framer-motion 애니메이션 적용
- PC Layout 수정으로 푸터 하단 고정
- 모바일은 100dvh로 스크롤 없이 전체 화면 사용
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- 그리드 레이아웃에서 카드 스와이프 스타일로 변경
- 상단 썸네일 인디케이터 추가 (자동 스크롤, 클릭 이동)
- 멤버 페이지 헤더 그림자 제거 (noShadow prop)
- Swiper 라이브러리로 좌우 스와이프 구현
- 카드 그림자 및 레이아웃 최적화
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- api/schedules, albums, members → api/public/로 이동
- pages/pc/*.jsx → pages/pc/public/로 이동
- pages/mobile/*.jsx → pages/mobile/public/로 이동
- App.jsx 라우터 경로 수정
- 모든 public 페이지의 import 경로 수정
- index.css: 모바일 레이아웃 CSS 시스템 추가 (mobile-layout-container, mobile-content, mobile-toolbar)
- Layout.jsx: MobileLayout에서 레이아웃 및 body 스크롤 제어 통합
- 하단 네비게이션을 fixed에서 flex-shrink-0으로 변경
- 모바일 스크롤바 숨김 처리
- Home, Members, Album, Schedule 페이지 여백 정리
- 모바일 레이아웃 및 하단 네비게이션 추가
- 홈 페이지: 히어로, 멤버, 앨범(2개), 일정 섹션
- 멤버 페이지: 현재/전 멤버 분리, 상세 모달
- 앨범 페이지: 목록, 상세, 갤러리
- 일정 페이지: 캘린더 피커, 세로 스크롤 목록
- ScrollToTop 컴포넌트로 페이지 이동 시 스크롤 초기화
- PC 홈 일정 API startDate+limit 방식으로 변경
- YouTube 일정 봇 서비스 추가 (youtube-bot.js, youtube-scheduler.js)
- 공개 일정 API 라우터 추가 (schedules.js)
- 관리자 일정 봇 관리 페이지 추가 (AdminScheduleBots.jsx)
- 백엔드 의존성 업데이트
- 일정 카테고리 CRUD API 추가 (backend/routes/admin.js)
- AdminScheduleCategory 페이지 신규 추가
- 카테고리 추가/수정/삭제 기능
- 드래그 앤 드롭 정렬 (framer-motion Reorder)
- react-colorful 기반 커스텀 색상 선택기
- 중복 카테고리 체크
- AdminScheduleForm에 동적 카테고리 로드 기능 추가
- 삭제 다이얼로그 앨범 스타일로 통일 (AlertTriangle 아이콘, 경고 메시지)
- Toast 컴포넌트 exit 애니메이션 수정
- 토스트 3초 자동 닫힘 기능 추가
- AdminSchedule, AdminScheduleForm 페이지 추가
- 커스텀 타임피커 구현 (오전/오후 지원, 드래그/휠 스크롤)
- Lightbox 공통 컴포넌트 분리 (components/common/Lightbox.jsx)
- 이미지 드래그 앤 드롭 정렬 기능
- 이미지 삭제 확인 다이얼로그
- 이미지 추가 버튼 첫번째 위치 고정
- 일정 이미지 순서 번호 표시
- react-ios-time-picker 라이브러리 CSS 제거
- 멤버 수정 페이지 추가 (AdminMemberEdit.jsx)
- 커스텀 데이트픽커 적용 (앨범 폼과 동일)
- 활동 상태 버튼 토글 (활동 중/탈퇴)
- URL 라우터 멤버 이름 기반으로 변경 (/admin/members/:name/edit)
- 백엔드 멤버 조회/수정 API 추가 (이름 기반)
- 전 멤버 섹션 UI 개선 (배경 항상 표시, 포지션 제거)
- AdminAlbumPhotos 컴포넌트 추가 및 라우트 등록
- 드래그앤드롭 파일 업로드 (깜빡임 방지, 중복 파일 감지)
- 파일 순서 변경 (드래그 정렬 + 직접 입력)
- 사진 메타데이터 입력 (타입, 멤버 태깅, 컨셉명)
- 단체/솔로/유닛 선택에 따른 멤버 태깅 로직
- 삭제 확인 다이얼로그
- 페이지 전환 애니메이션
- 컨셉 포토 갤러리 페이지 추가 (AlbumGallery.jsx)
- react-photo-album 라이브러리로 Justified 레이아웃 구현
- 썸네일/원본 이미지 분리 (thumb_400, original 폴더)
- 라우터 변경: /discography → /album
- URL 형식 변경: ID 기반 → 앨범명 기반 (/album/하얀 그리움)
- 앨범명 기반 API 추가 (/api/albums/by-name/:name)
- 브레드크럼 스타일 네비게이션 적용
- 라이트박스 슬라이드 애니메이션 추가
- 점 형태 인디케이터로 변경
- BrowserRouter에 v7_startTransition, v7_relativeSplatPath 플래그 추가
- 콘솔 경고 메시지 제거
refactor: 앨범 유형 표시 분리 및 라이트박스 개선
- album_type (전체), album_type_short (짧은) 분리
- 앨범 목록에서 짧은 유형 표시
- 라이트박스 닫기 애니메이션 추가 (AnimatePresence)
- 배경 클릭 시 모달 닫힘 방지
- favicon 링크 추가
- 앨범 상세 페이지 (AlbumDetail.jsx) 신규 생성
- 앨범 목록에서 클릭 시 상세 페이지로 이동
- 소개글/트랙 리스트 2열 그리드 레이아웃
- 트랙 호버 효과 및 총 재생시간 표시
- 페이지 전환 fade 애니메이션 적용
- '디스코그래피' -> '앨범' 텍스트 변경
- albums 테이블 description 컬럼 추가
- 트랙 duration 데이터 입력