- 가로 flex → 세로 분리 (썸네일 카드 + 정보 카드)
- 썸네일: object-contain으로 원본 비율 유지, max-h 제한
- 기본 이미지: 카테고리 색상 배경 + Tv 아이콘
- 제목이 길어져도 레이아웃 깨지지 않음
- PC/모바일 모두 적용
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 썸네일 hover 효과 제거, 너비 w-44로 축소
- 다시보기 버튼: 멤버 칩과 같은 줄에 compact하게 배치 (회색 pill)
- 불필요한 border-t 구분선 제거
- 전체적으로 compact한 레이아웃
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 가로 전체 → 왼쪽 세로 포스터(w-52) + 오른쪽 콘텐츠 (flex 레이아웃)
- 세로 이미지가 잘리지 않도록 object-cover + 고정 너비
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 썸네일: aspect-video 비율, hover 시 확대 + 재생 버튼 오버레이
- 방송사 뱃지: 카테고리 색상 기반, 날짜와 한 줄로 배치
- 다시보기 버튼: 다크 pill 스타일, 유튜브면 Play 아이콘
- 전체 카드 레이아웃으로 통일
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 해시태그(#xxx): primary 색상 하이라이트, 클릭 시 x.com/hashtag/xxx로 이동
- URL: primary 색상 + 밑줄, 클릭 시 해당 URL로 이동
- 웹(모바일/PC), 앱 모두 적용
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
생일 당일 접속 시 폭죽과 함께 멤버 사진, HAPPY OOO DAY 제목,
날짜를 보여주는 축하 다이얼로그 표시. 데뷔 다이얼로그와 동일하게
localStorage로 하루 1회만 표시.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 로그 formatDateTime에서 UTC 메서드 사용하여 KST 이중 변환 방지
- 일반 일정 페이지 n개 일정 텍스트에 모드 전환 애니메이션 적용
- Vite HMR 오버레이 비활성화 (외부 봇 malformed URI 에러 방지)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- react-linkify 대신 커스텀 linkifyText 함수 사용
- bit.ly, t.co, youtu.be 등 단축 URL 도메인 지원
- PC, 모바일 양쪽 수정
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- YouTube API에서 채널 정보(배너 이미지) 조회 함수 추가
- 채널 정보 Redis 캐싱 (24시간)
- 일정 상세 API에 bannerUrl 필드 추가
- 예정 일정 placeholder에 배너 이미지 배경 표시
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- PC YoutubeSection에 예정 일정 placeholder UI 추가
- 예정 일정일 경우 "예정" 배지 표시
- 영상 준비 중 placeholder 컴포넌트 추가
- 예정 일정에도 channelName 반환하도록 API 수정
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- /birthday/:memberName/:year → /schedule/birthday-{year}-{nameEn}
- ScheduleDetail에서 특수 ID(birthday, debut, anniversary) 감지
- Birthday 컴포넌트가 props로 year, nameEn 받도록 변경
- 멤버 API가 영문명으로도 조회 가능하도록 수정
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- DebutCard 컴포넌트 추가 (PC/모바일)
- DebutCelebrationDialog 축하 다이얼로그 추가
- Fromis9Logo SVG 컴포넌트 추가
- 기념일 카테고리 추가 (ID: 9)
- 데뷔일(2018.01.24) 및 주년 일정 자동 생성
- 폭죽 효과 추가 (fireDebutConfetti)
- 카테고리 정보 DB에서 동적 조회하도록 개선
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- ScrollToTop: PC 레이아웃의 main 요소 스크롤 초기화 추가
- TrackDetail: key prop으로 트랙 변경 시 컴포넌트 리마운트
- TrackDetail: main 요소 스크롤 초기화 (PC는 main에서 스크롤)
- 수록곡 선택 시 Link 대신 button + navigate 사용
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- DB: music_video_url을 video_url로 변경, video_type 컬럼 추가
- 백엔드: insertTracks에서 video_url, video_type 처리
- 관리자: 영상 타입 선택 드롭다운 추가 (뮤직비디오/스페셜 영상)
- CustomSelect: {value, label} 객체 옵션 및 size prop 지원
- 트랙 상세: video_type에 따른 라벨 동적 표시
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- datetime 필드를 date와 time 필드로 분리하여 00:00 시간도 정상 표시되도록 수정
- 백엔드: formatSchedule, Meilisearch 검색 결과, 스키마 업데이트
- 프론트엔드: datetime 파싱 로직 제거, date/time 직접 사용
- 문서: API 응답 예시 업데이트
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- frontend 폴더를 새로 리팩토링된 frontend-temp로 교체
- docs/architecture.md: 현재 프로젝트 구조 반영
- docs/development.md: API 클라이언트 구조 업데이트
- docs/frontend-improvement.md 삭제 (완료된 개선 계획)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- schedules.js에 transformSchedule 함수 추가
- datetime → date, time 분리
- category 객체 → category_id, category_name, category_color 플랫화
- members 배열 → member_names 문자열 변환
- PC Schedule.jsx의 검색 로직을 searchSchedules 함수 사용으로 변경
- 중복 변환 로직 제거로 코드 간소화
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
수정:
- AdminSchedule.jsx 1306번 라인 멤버 처리 오류 수정
- getMemberList 헬퍼 함수 사용으로 통일
생일 우선 정렬:
- PC 공개 일정 페이지: filteredSchedules에 생일 우선 정렬 추가
- PC 관리 페이지: filteredSchedules에 생일 우선 정렬 추가
- 모바일 공개 페이지: groupedSchedules, selectedDateSchedules에 생일 우선 정렬 추가
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- getMemberList 헬퍼 함수 추가 (검색 결과/일반 데이터 모두 처리)
- 검색 결과의 members가 문자열 배열인 경우 처리
- AdminSchedule.jsx trim() 오류 수정
수정 파일:
- pc/public/Schedule.jsx
- pc/admin/AdminSchedule.jsx
- mobile/public/Schedule.jsx
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- src/utils/transaction.js: withTransaction 헬퍼 함수 추가
- src/schemas/: 도메인별 스키마 파일 분리 (common, album, schedule, admin, member, auth)
- 라우트에 JSON Schema 검증 및 Swagger 문서화 적용
- 트랜잭션 패턴을 withTransaction 헬퍼로 추상화
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- PC/모바일 YouTube 상세 페이지 그림자 감소, 배경색 조정
- 모바일 YouTube 섹션을 카드에서 배경 스타일로 변경
- 문서 업데이트: 완료된 마이그레이션 작업 반영, 누락된 API 추가
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- schedule.source.url → schedule.videoUrl
- schedule.source.name → schedule.channelName
- schedule.date/time → schedule.datetime
- videoId를 URL에서 추출 대신 API에서 직접 사용
- formatXDateTime 유틸리티 사용
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- ref를 사용해 히스토리 push 상태 추적
- X 버튼 클릭 시 히스토리가 push된 경우에만 history.back() 호출
- 하드웨어 백버튼과 X 버튼 닫기 동작 분리
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- formatXDateTime 함수를 utils/date.js로 이동
- PC/모바일 XSection에서 공통 유틸리티 사용
- 사용하지 않는 closeLightbox 변수 제거
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- PC/모바일 앨범 상세, 갤러리 페이지에 뒤로가기 처리
- PC/모바일 X 일정 상세 페이지에 뒤로가기 처리
- 라이트박스 열릴 때 history.pushState 호출
- popstate 이벤트로 라이트박스 닫기
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- API 응답 형식 변경 (category_id → category.id)
- X 일정에 content, imageUrls, postUrl, profile 필드 추가
- 본문 내 URL 자동 하이퍼링크 추가 (react-linkify)
- PC/모바일 ScheduleDetail에서 새 API 형식 사용
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- 백엔드에 startDate 파라미터 지원 추가 (다가오는 일정 조회)
- handleUpcomingSchedules 함수 구현
- 메인 페이지 일정 카드 디자인을 일정 페이지와 동일하게 변경
- 멤버 표시 로직 API 응답에 맞게 수정 (PC/모바일)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- 멤버 페이지에서 포지션 영역 제거 (PC/모바일)
- 모바일 일정 페이지 멤버 표시 로직 API 응답에 맞게 수정
- 데이트픽커 연도 제한 2025 → 2017로 변경
- 2017년 1월에서 이전 달 버튼 비활성화
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- YouTube 일정 수정 API (PUT /api/admin/youtube/schedule/:id)
- 멤버 선택, 영상 유형(video/shorts) 수정 기능
- 일정 API에 멤버 배열 추가 (5명 이상 시 "프로미스나인")
- 관리 페이지 React Query 캐싱 적용
- Shorts/Video 별 UI 레이아웃 분리
- React Query 사용 가이드 문서화
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>