Commit graph

66 commits

Author SHA1 Message Date
2b24bfe0a7 일정 상세 페이지에서 콘서트 섹션 제거
- PC: ConcertSection.jsx, KakaoMap.jsx 삭제
- 모바일: ConcertSection, KakaoMap 컴포넌트 제거
- CATEGORY_ID에서 콘서트 관련 상수 제거

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 13:02:22 +09:00
9eb49929c7 YouTube 섹션 스타일 개선 및 문서 업데이트
- PC/모바일 YouTube 상세 페이지 그림자 감소, 배경색 조정
- 모바일 YouTube 섹션을 카드에서 배경 스타일로 변경
- 문서 업데이트: 완료된 마이그레이션 작업 반영, 누락된 API 추가

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 12:57:25 +09:00
bdd5b90870 YouTube 상세 페이지 API 응답 구조 변경 대응
- 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>
2026-01-21 12:24:14 +09:00
beabcc094f 라이트박스 닫기 시 이전 페이지로 이동하는 버그 수정
- ref를 사용해 히스토리 push 상태 추적
- X 버튼 클릭 시 히스토리가 push된 경우에만 history.back() 호출
- 하드웨어 백버튼과 X 버튼 닫기 동작 분리

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 12:17:24 +09:00
e1a07f4849 X 날짜 포맷팅을 dayjs 기반 유틸리티로 통합
- formatXDateTime 함수를 utils/date.js로 이동
- PC/모바일 XSection에서 공통 유틸리티 사용
- 사용하지 않는 closeLightbox 변수 제거

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 12:10:08 +09:00
67e9992cf1 라이트박스 뒤로가기 버튼 처리 추가
- PC/모바일 앨범 상세, 갤러리 페이지에 뒤로가기 처리
- PC/모바일 X 일정 상세 페이지에 뒤로가기 처리
- 라이트박스 열릴 때 history.pushState 호출
- popstate 이벤트로 라이트박스 닫기

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 12:05:36 +09:00
d8055c00e5 X 일정 상세 페이지에 이미지 라이트박스 추가
- PC/모바일 XSection에 라이트박스 기능 추가
- 이미지 클릭 시 전체 화면으로 보기
- 좌우 화살표로 이미지 탐색
- 인디케이터로 현재 이미지 위치 표시

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 11:59:23 +09:00
f797736f8e Revert "달력에서 카테고리 필터 적용"
This reverts commit 0c278597c0.
2026-01-21 11:54:12 +09:00
0c278597c0 달력에서 카테고리 필터 적용
- PC/모바일 일정 페이지 달력의 점에 카테고리 필터 적용
- 선택된 카테고리의 일정만 달력에 점으로 표시

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 11:50:13 +09:00
1d17c83568 X 일정 상세 페이지 개선
- 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>
2026-01-21 11:41:39 +09:00
f780e91f14 feat: 메인 페이지 일정 API 및 디자인 개선
- 백엔드에 startDate 파라미터 지원 추가 (다가오는 일정 조회)
- handleUpcomingSchedules 함수 구현
- 메인 페이지 일정 카드 디자인을 일정 페이지와 동일하게 변경
- 멤버 표시 로직 API 응답에 맞게 수정 (PC/모바일)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 17:27:31 +09:00
8e15cd6d2c refactor: UI 개선 및 날짜 제한 수정
- 멤버 페이지에서 포지션 영역 제거 (PC/모바일)
- 모바일 일정 페이지 멤버 표시 로직 API 응답에 맞게 수정
- 데이트픽커 연도 제한 2025 → 2017로 변경
- 2017년 1월에서 이전 달 버튼 비활성화

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 16:17:54 +09:00
4a4a163abe feat: YouTube 일정 수정 폼 구현
- 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>
2026-01-20 14:06:02 +09:00
1a9fa54981 fix: 생일 표시 버그 수정 및 데이트픽커 개선
- 생일이 생년 이전 년도에 표시되는 버그 수정
- 페이지 진입 애니메이션 추가 (사전 관리, 일정 추가)
- 데이트픽커 12년 단위 이동으로 변경
- 년도 선택 시 월 선택 화면 전환 제거
- 시작 년도 2025년 고정, 이전 이동 비활성화
- PC/모바일 일정 페이지, 관리자 페이지 모두 적용

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 16:41:34 +09:00
d4697ad996 refactor: 일정 API source 객체 구조 변경
- source_name, source_url → source: { name, url } 형태로 변경
- YouTube: schedule_youtube에서 video_id로 URL 생성
- X: schedule_x에서 post_id로 URL 생성
- 프론트엔드 전체 파일 source 객체 형태로 수정
- 문서 업데이트 (api.md, architecture.md, migration.md 등)
- tracks → album_tracks 테이블명 변경 반영

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 21:50:04 +09:00
abe9687cc8 feat: Meilisearch 검색 기능 및 개발환경 통합
- Meilisearch 기반 일정 검색 API 구현
- 멤버 별명으로 검색 지원 (하냥 → 송하영)
- 영문 자판 → 한글 변환 검색 지원
- 검색 응답 구조 개선 (category 객체, datetime 통합, members 배열)
- 개발/배포 환경 Dockerfile 통합 (주석 전환 방식)
- docker-compose.yml 단일 파일로 통합

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 18:53:57 +09:00
b89255780e refactor: 일정 API 응답 형식에 맞게 프론트엔드 수정
- API 응답(날짜별 그룹화)을 플랫 배열로 변환하는 로직 추가
- 별도 카테고리 API 호출 제거, 일정 데이터에서 카테고리 추출
- PC/모바일 Schedule.jsx, AdminSchedule.jsx 수정

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 17:52:15 +09:00
51030e3aba fix: X 카테고리 페이지 브레드크럼/카드 정렬 일치
- X 카테고리 브레드크럼에 max-w-2xl mx-auto 적용
- 카드와 동일한 너비로 중앙 정렬
2026-01-16 11:02:23 +09:00
40e1f957c7 refactor: ScheduleDetail 컴포넌트 카테고리별 파일 분리
- schedule-sections 폴더 생성
- YoutubeSection, XSection, ConcertSection, DefaultSection 분리
- KakaoMap, utils.js 공통 모듈 분리
- 메인 ScheduleDetail.jsx 1010줄 → 175줄로 간소화
2026-01-16 10:55:40 +09:00
28e48614ce refactor: 콘서트 상세 페이지 UI 개선
- 히어로 섹션 배경을 포스터 확대 + 블러 효과로 변경
- 회차 선택을 드롭다운 형태로 변경 및 디자인 개선
- 드롭다운 열릴 때 선택된 항목 자동 스크롤
- 장소 카드 디자인 정리 (MapPin 아이콘 사용)
- 지도 높이 2배로 증가 (h-64 → h-[32rem])
- 길찾기 버튼 색상 분기 (카카오맵: #0079f4, 구글맵: #4285F4)
- 글래스모피즘 효과 제거
2026-01-16 02:15:32 +09:00
b023e08750 fix: 일정 상세 화면 UI 개선
PC/모바일 웹:
- 콘서트 선택된 일정 텍스트 볼드체 제거
- 모바일 콘서트 헤더 장소 표시 제거
- 모바일 콘서트 포스터 여백 제거

Flutter 앱:
- lucide_icons 사용하여 웹과 동일한 아이콘 적용
- 콘서트 헤더 장소 제거 및 포스터 여백 제거
- 콘서트 선택된 일정 볼드체 제거
- 지도 플레이스홀더 추가 (탭시 카카오맵 이동)
- 길찾기 버튼 색상 blue-500으로 변경
- 유튜브 섹션: 숏츠 둥근 테두리, 버튼 제거, 유튜브 아이콘으로 교체
- X 섹션: 웹과 동일한 디자인 (프로필, @username, 인증배지, X로고 버튼)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-15 21:39:29 +09:00
7d96407bfe 모바일 콘서트 섹션 개선 및 달력 일정 점 표시 수정
- 콘서트 UI 최적화: 포스터 썸네일화, 공연 일정 세로 배치
- 카카오맵 SDK 연동으로 실제 지도 표시
- 회차 변경 시 keepPreviousData로 부드러운 전환
- 달력 다른 달 이동 시 일정 점 표시 (비동기 조회)
- PC 콘서트 섹션 그림자 통일 (shadow-lg shadow-black/5)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-15 21:20:27 +09:00
6275f0f92a feat: 생일 기능 추가 및 일정 페이지 개선
- 생일 카드 컴포넌트 추가 (PC/모바일)
- 생일 폭죽(confetti) 애니메이션 적용 (하루에 한 번)
- 생일 상세 페이지 추가 (/birthday/멤버이름/년도)
- 관리자 일정 페이지에 생일 표시 (수정/삭제 버튼 숨김)
- 일정 상세 페이지 404 에러 UI 개선
- 일정 상세 페이지 불필요한 재시도 방지 (retry: false)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-15 20:09:26 +09:00
611a20a8f0 feat: 콘서트 상세 페이지 개선
- 같은 제목의 콘서트 일정을 모아서 회차별로 표시
- 현재 보고 있는 회차 강조 표시
- 카카오맵 SDK 키 수정 및 에러 처리 개선
- 길찾기 버튼 추가
- 회차 전환 시 부드러운 데이터 로딩 (keepPreviousData)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-15 17:05:33 +09:00
79f3816cec feat: 콘서트 카테고리 상세 페이지 추가
- KakaoMap 컴포넌트: 위도/경도 기반 지도 표시 기능
- ConcertSection: 포스터 이미지, 날짜 범위, 장소 정보 표시
- 위치 좌표가 없는 경우(해외) 장소명만 표시
- 백엔드 API에 이미지 정보 포함

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-15 15:23:40 +09:00
edf6b60b4a refactor: 일정 페이지 상태 관리를 zustand store로 변경
- Schedule.jsx에서 useState 대신 useScheduleStore 사용
- 상세 페이지 이동 후에도 선택한 날짜/카테고리/검색어 유지
- X 상세 페이지 UI 개선 (X 아이콘 제거, 날짜 형식 변경)
- X 프로필 URL 디코딩 로직 수정

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-15 15:19:44 +09:00
4f0cf724d0 feat: X 카테고리 상세 페이지 및 프로필 캐싱 기능 추가
- X 봇에서 Nitter 프로필 정보(이름, 아바타) 추출 및 Redis 캐싱
- X 프로필 조회 API 추가 (/api/schedules/x-profile/:username)
- X 상세 페이지 UI 구현 (트위터 카드 스타일)
- X 카테고리 클릭 시 상세 페이지로 이동하도록 변경

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-15 14:51:59 +09:00
c94849d42a feat(frontend): PC 일정 상세 페이지 추가
- 유튜브 카테고리 상세 페이지 구현 (영상 임베드 + 정보)
- 숏츠/일반 영상 레이아웃 분리
- 브레드크럼 네비게이션 적용

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-15 14:42:34 +09:00
94fc7b4c7f feat(frontend): PC/모바일 404 페이지 추가
- PC/모바일 각각 사이트 스타일에 맞는 404 페이지 생성
- framer-motion 애니메이션 적용
- PC Layout 수정으로 푸터 하단 고정
- 모바일은 100dvh로 스크롤 없이 전체 화면 사용

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-15 09:57:28 +09:00
300fe18a8d Flutter 앱: 컨셉포토 갤러리, UI 개선, 앱 이름 변경
- 컨셉포토 전체보기 화면 추가 (2열 Masonry 레이아웃)
- ConceptPhoto 모델에 width, height, members, concept 필드 추가
- 앨범 상세/갤러리 화면 스크롤 시 툴바 색상 고정
- 멤버 인디케이터 중앙 정렬 수정
- 티저 포토 → 티저 이미지로 명칭 변경
- 뒤로가기 두 번 종료 기능 제거
- 앱 이름 fromis9 → fromis_9로 변경

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 13:02:40 +09:00
255839a598 비디오 티저 썸네일 추출 기능 추가
- DB: album_teasers 테이블에 video_url 컬럼 추가
- 백엔드: 비디오 업로드 시 ffmpeg로 썸네일 추출 후 WebP 저장
- 백엔드: video_url에 MP4 URL 저장, 썸네일은 기존 URL 필드 사용
- 프론트엔드: 썸네일 이미지 표시, 클릭 시 video_url로 재생
- Flutter 앱: Teaser 모델에 videoUrl 필드 추가 및 비디오 재생 수정
- Docker: ffmpeg 설치 추가 (Dockerfile, docker-compose.dev.yml)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 11:59:58 +09:00
67cd6813a2 PC 곡 상세: TITLE 배지를 노래 제목 옆으로 이동 2026-01-12 18:39:23 +09:00
0232edc10a PC 곡 상세: 수록곡 섹션 디자인 개선 (현재 곡 강조, 재생시간, 음악 아이콘) 2026-01-12 18:35:06 +09:00
6fbad62cdc PC 곡 상세: 수록곡 타이틀 표시 T → TITLE로 변경 2026-01-12 18:31:36 +09:00
ae4bdfaae3 PC 곡 상세: 너비를 앨범 상세와 동일하게 변경 (max-w-7xl) 2026-01-12 18:27:37 +09:00
5bd8d50022 PC 곡 상세: 중복 앨범아트 제거, 클릭 이벤트 제거 2026-01-12 18:10:26 +09:00
a73658854b PC 곡 상세: 디자인 정리 (뮤비 embed, 크레딧 줄바꿈, 가사 스크롤) 2026-01-12 18:05:29 +09:00
61b8bf4815 PC 곡 상세: 프리미엄 디자인 적용 2026-01-12 18:00:41 +09:00
b18183a9f9 웹: PC 곡 상세 화면 구현 (TrackDetail 페이지) 2026-01-12 17:50:48 +09:00
dc65858d6b 웹: AlbumDetail, AlbumGallery 페이지 useQuery로 리팩토링 2026-01-12 17:44:28 +09:00
381196820d PC 홈: 멤버보기 버튼 제거, 앨범 섹션 추가 2026-01-12 15:57:36 +09:00
d999872517 웹: Schedule 페이지 일정/카테고리 로딩 useQuery로 리팩토링 2026-01-12 15:51:27 +09:00
990d360520 웹: useEffect를 useQuery로 리팩토링 (PC/모바일 공개 페이지) 2026-01-12 15:46:34 +09:00
79a3501ef1 feat(Album): PC 타이틀곡 텍스트 제거 + 모바일 상세 UI 개선
- PC: 앨범 상세에서 '타이틀곡: OOO' 텍스트 제거
- 모바일: 앨범 상세 UI 전면 개선
  - 티저 포토 섹션 추가
  - 수록곡 리스트 스타일 개선 (트랙번호, TITLE 뱃지)
  - 컨셉 포토 6장 프리뷰 + 전체보기 링크
  - 라이트박스 (다운로드, 이전/다음 네비게이션)
- 앨범 API에서 folder_name 반환 추가
2026-01-11 22:04:08 +09:00
9c2ff7458d feat(Search): Admin Schedule 추천 검색어 연동 + 빈 상태 드롭다운 숨김 2026-01-11 21:39:23 +09:00
727b05f0f5 feat(Search): Redis 기반 bi-gram 추천 검색어 시스템 구현
- MariaDB 테이블 추가 (search_queries, word_pairs)
- Redis 컨테이너 추가 (Sorted Set 캐싱)
- 백엔드 suggestions 서비스 및 API 구현
- 검색 실행 시 검색어 저장 (bi-gram 학습)
- PC Schedule 프론트엔드 연동 완료
2026-01-11 21:33:55 +09:00
3d2a6555f8 fix(Schedule): 무한 스크롤 중복 요청 방지
- inView가 false→true로 변경될 때만 fetchNextPage 실행
- prevInViewRef를 사용하여 이전 상태 추적
- PC 일정, Admin 일정 페이지 모두 적용
2026-01-11 19:06:52 +09:00
90f5a9a90a feat(Schedule): 검색어 추천 UI 프로토타입 구현
- PC/Admin 스케줄 페이지에 검색어 추천 드롭다운 추가
- 3영역 검색창 레이아웃 (뒤로가기 / 입력 / 검색 버튼)
- 방향키로 추천 검색어 선택 시 입력창 반영 (유튜브 스타일)
- 외부 클릭 시 드롭다운 닫기
- 검색 모드 진입 시 기존 카테고리 유지
- 검색 모드 종료 시 스크롤 위치 초기화
- 전환 애니메이션 개선 (scale + opacity)
2026-01-11 15:58:20 +09:00
1d86c6b841 Admin 페이지에 AdminLayout 적용하여 헤더 고정 + 본문 스크롤 구조 구현
- AdminLayout.jsx 컴포넌트 생성 (헤더 고정 + overflow-y-auto)
- AdminDashboard, AdminMembers, AdminMemberEdit에 적용
- AdminAlbums, AdminAlbumForm, AdminAlbumPhotos에 적용
- AdminScheduleCategory, AdminScheduleBots, AdminScheduleForm에 적용
- AdminSchedule은 내부 스크롤 처리로 자동 감지하여 제외
2026-01-11 12:12:46 +09:00
233b76355e refactor: 일정 페이지 레이아웃을 일정 관리 페이지와 동일하게 수정
- 화면 고정 레이아웃으로 변경 (h-[calc(100vh-64px)] overflow-hidden)
- grid grid-cols-3 레이아웃으로 변경
- 왼쪽 달력/카테고리 영역 고정, 오른쪽 일정 목록만 스크롤
- Layout.jsx에서 일정 페이지 Footer 숨김 처리
2026-01-11 11:26:17 +09:00