Commit graph

406 commits

Author SHA1 Message Date
7786a4a5c5 style(admin-schedule): 날짜미정 연/월 선택을 CustomSelect로 교체
네이티브 select 대신 공통 커스텀 드롭다운 사용 (앱 스타일 통일).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-16 22:14:33 +09:00
71b678a90b fix(admin-schedule): 공용폼 토글 정렬·멤버 필터·날짜미정 연월 드롭다운
- 날짜미정 토글을 검증된 패턴(relative w-11 + absolute translate-x-5)으로
  교체해 상하/좌우 여백 균일화
- 멤버 목록을 현재 활동 멤버만(is_former 제외)으로 필터
- 날짜미정일 때 달력 대신 연/월 드롭다운으로 입력(YYYY-MM-01 저장)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-16 22:10:44 +09:00
72c65021fb feat(admin-schedule): 공용 일정 폼 정비 (컴백·팬사인회·기타)
ScheduleForm을 지원 필드(제목·날짜·시간·멤버)만으로 재작성 +
컴백에 "날짜 미정(월만)" 토글 추가, JSON으로 /admin/schedules 저장.
카테고리 선택은 컴백·팬사인회·기타만 노출(전용 폼 카테고리·생일·기념일
제외). DB에 저장 못 하던 범위·장소·설명·링크·이미지 필드 제거.
form 라우팅: 컴백/팬사인회/기타→공용폼, 티켓팅 등→준비 중 안내.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-16 22:03:50 +09:00
ad20149c88 feat(admin-schedule): 일정 추가 카테고리 선택에서 생일·기념일 제외
생일/기념일은 멤버 생일·데뷔일에서 자동 계산되는 카테고리라 수동 추가
대상이 아님. 카테고리 선택 목록과 기본 선택값에서 제외.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-16 21:40:19 +09:00
d1ee28e308 refactor(festival-bot): active_months 기능 제거
축제봇이 대학+일반 행사를 통합 수집하게 되면서 연중 실행이 필요해
활성 월 제한 기능 제거. 스케줄러 게이트/라우트/유틸/DB 컬럼/다이얼로그
월 선택 UI/'대기 중' 상태 표시 모두 정리. 동기화 간격만 유지.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-12 14:02:24 +09:00
734fc59bb2 fix(pc): 스크롤바 clickScroll을 'instant'로 — 커서 클릭점 어긋남에 둔감하게
사용자 환경에서 커서가 가리키는 지점과 실제 클릭 좌표가 수 px 어긋나
(maplestory에서도 동일 확인), 세로 8px 핸들을 조준해도 클릭이 핸들 밖
트랙에 떨어져 드래그가 간헐적으로 안 잡히던 문제. 'instant' 모드는
스크롤바 띠(14px) 어디를 눌러도 핸들이 그 위치로 즉시 점프하고 그대로
드래그가 이어져 정밀 조준이 불필요. ClickScrollPlugin은 불필요해져 제거.
헤드리스로 트랙 press→점프→연속 드래그 검증 완료.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-10 19:43:46 +09:00
3fef42aa6c fix(pc): OverlayScrollbars defer 제거 (간헐적 드래그 무반응)
defer는 초기화를 idle 콜백으로 미루고 그 사이를 CSS로 가리는데, 이때
스크롤바가 보이고 호버 색도 바뀌지만 드래그 리스너는 아직 없는 구간이
생김(React StrictMode 재마운트와 레이스 가능). 핸들을 잡아도 간헐적으로
안 끌리던 원인으로 추정. maplestory와 동일하게 동기 초기화로 변경.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-10 19:35:23 +09:00
6595d55532 fix(pc): 가로 스크롤바 잡기 어려운 문제 개선
핸들이 7px로 얇고 트랙 클릭(clickScroll)이 기본 꺼져 있어, 핸들을
2~3px 빗나가게 클릭하면 아무 반응이 없어 드래그가 안 되는 것처럼
느껴지던 문제. 스크롤바 14px/핸들 8px로 키우고 ClickScrollPlugin 등록 +
clickScroll 활성화로 트랙 클릭 시에도 스크롤되도록 변경.
헤드리스 브라우저로 핸들 드래그·트랙 클릭 동작 검증 완료.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-10 19:26:55 +09:00
e5f9ee70ea fix(pc): 헤더를 가로 스크롤 영역에 포함 (1440 미만 줄바꿈 해결)
min-width를 main 콘텐츠로 옮기면서 헤더만 뷰포트 너비가 돼 메뉴가
줄바꿈되던 문제 수정. 헤더+본문을 하나의 OS 컨테이너(min-w-1440)로 묶어
1440 미만이면 헤더까지 함께 가로 스크롤되고, 헤더는 sticky top-0으로
세로 스크롤 시 고정. 일정 페이지는 가로 스크롤만(세로는 내부 처리).
공개/관리자 레이아웃 동일 적용.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-10 19:17:00 +09:00
9dc2667741 feat(youtube-bot): 예정 일정 생성 주기(몇 주 뒤) 옵션 추가
기존엔 '다음 주 요일'만 가능해 격주 콘텐츠(한화 이단장 등)에 못 썼는데,
weeksAhead(1~4주)를 추가해 N주 뒤 날짜로 예정 일정을 생성. getNextWeekday에
weeksAhead 반영, auto_schedule_config JSON에 필드 추가, 다이얼로그에 생성 주기
드롭다운 추가. DB/라우트 변경 없음.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-08 21:34:46 +09:00
f9f2b03403 style(x-bot): 텍스트 필터 칩 검정 배경 흰 글씨로 변경 2026-06-07 18:38:20 +09:00
8f79ea4ee4 style(x-bot): 다이얼로그 색상을 X 브랜드(검정)로 변경
하늘색(sky, 구 트위터 색)을 X 현재 브랜드인 검정 계열로 교체
(토글/버튼/포커스/태그/로더). 헤더의 검정 X 아이콘과 통일.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-07 18:37:09 +09:00
3d5f1d8a66 fix(youtube-bot): 토글 knob 위치를 X봇과 동일하게 (상하좌우 여백 균일)
knob을 mt-0.5 margin 방식 대신 absolute top-0.5 left-0.5로 위치 지정,
트랙에 relative 추가. 위아래가 잘려 보이던 문제 해결, 4개 토글 모두
X봇 다이얼로그와 동일한 비율로 통일.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-07 18:35:30 +09:00
468bf1f3a7 fix(youtube-bot): 토글 스위치 위치 버그 + 방향 통일
translate-x-5.5(유효하지 않은 Tailwind 클래스)로 예정 일정/고정 멤버
토글의 knob이 움직이지 않고 색만 바뀌던 문제 수정. 모든 토글을
translate-x-5(오른쪽=활성화)로 통일.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-07 18:31:06 +09:00
7d58d19737 feat(youtube-bot): 예정 일정에 고정 멤버 포함 옵션 추가
예정 일정 자동 생성 시 봇의 고정 멤버(default_member_ids)를 함께
추가하는 옵션(auto_schedule_config.includeDefaultMembers). 워크돌처럼
멤버가 고정인 채널의 다음 주 예정 일정에 멤버가 자동으로 붙음.
DB/라우트 변경 없이 auto_schedule_config JSON에 플래그 추가 +
관리자 다이얼로그에 토글.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-07 18:12:26 +09:00
805e1b5ec9 style(pc): 페이지 스크롤바 핸들 불투명 단색(primary)으로 변경 2026-06-07 17:29:04 +09:00
ec1c413ba8 style(pc): 페이지 스크롤바 핸들 끝을 둥글게 (os-handle-border-radius) 2026-06-07 17:28:32 +09:00
5aca8d97d1 feat(pc): 페이지 스크롤바를 OverlayScrollbars로 교체
#root의 min-width(1440)를 스크롤 컨테이너(main) 내부 콘텐츠로 옮기고
main에 OverlayScrollbars 적용. 1440 미만으로 줄여도 세로 스크롤바가
뷰포트 끝에 항상 보이고 가로 스크롤이 생김(maplestory 방식). 헤더 고정
모델 유지, 일정 페이지는 기존 내부 스크롤 유지. 공개/관리자 레이아웃 동일 적용.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-07 17:23:24 +09:00
93d7737bb0 chore(frontend): overlayscrollbars 의존성 추가 2026-06-07 17:19:28 +09:00
1b330872f5 perf(schedule): 카드 onClick 안정화로 React.memo 복구
카드가 onClick(schedule)을 호출하도록 변경(기존 호출부는 인자 무시라
호환), 페이지는 useCallback 안정 핸들러를 전달. 매 렌더 새 인라인
함수로 memo가 깨져 필터/스크롤마다 전체 카드가 리렌더되던 문제 해결.
검색 결과 가상화 카드는 범위에서 제외(이미 최적화됨).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-07 16:19:33 +09:00
067618d792 perf(mobile-schedule): selectedDate 참조 안정화
storedSelectedDate가 없을 때 매 렌더 new Date()가 생성돼 다수
useMemo/useEffect가 재실행되고 날짜 스트립이 반복 scrollIntoView되던
문제를, useMemo로 참조를 안정화(값 의미는 동일).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-07 16:14:06 +09:00
6b66445295 refactor(frontend): 죽은 API/훅 제거
- createSchedule/updateSchedule (백엔드 라우트 없음, 미사용) 삭제
- useMemberDetail/getMemberByName (미정의 함수 호출, 미사용) 삭제
- 불필요해진 fetchFormData import 정리

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-07 15:38:19 +09:00
3ba27c0100 style(festival-bot): 봇 관리 페이지 축제 섹션 색상 amber로 변경
typeConfig.festival 색상을 emerald → amber로 변경해 다이얼로그·축제
카테고리 색감과 통일.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 23:06:07 +09:00
de6e56047c style(festival-bot): 다이얼로그 색상 축제 카테고리 톤(amber)으로 변경
초록(emerald) → amber 계열로 변경해 행사/축제 색감과 통일.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 23:04:38 +09:00
543371db23 feat(festival-bot): 비활성 월일 때 '대기 중' 상태 표시
봇 목록 API에 active_months 노출. 봇이 켜져 있어도 현재 달이 활성
월이 아니면 카드 상태를 초록 '실행 중' 대신 amber '대기 중'으로 표시.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 23:04:38 +09:00
2af3af9345 feat(festival-bot): 다이얼로그에 활성 월 선택 UI
축제 봇 추가/수정 다이얼로그에 1~12월 토글 그리드 + 전체 선택/해제
추가. 신규 봇은 전체 월(항상 실행) 기본. 전체 선택은 active_months
null로 저장.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 22:58:13 +09:00
39a6225897 feat(schedule-mobile): 날짜 미정 일정 렌더링 (B안)
모바일 일정 페이지에 date_precision='month' 일정을 점선 "N월 중"
카드(UndatedScheduleListCard)로 표시. 선택 날짜와 무관하게 해당
달이면 확정 일정 아래 "날짜 미정" 구분선과 함께 배치.
캘린더/날짜 점은 1일에 찍지 않도록 PC·모바일 dot 목록에서 제외.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-02 20:27:07 +09:00
39aadf50e6 feat(schedule-pc): 날짜 미정 일정 렌더링 (B안)
date_precision='month' 일정을 점선 "N월 중" 카드(UndatedScheduleCard)로
표시. 선택 날짜와 무관하게 해당 월이면 확정 일정 아래에 배치하고
사이에 "날짜 미정" 구분선 추가. 카운트에도 포함.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-02 20:10:26 +09:00
01cf1cfe9a fix(mobile-schedule): 카테고리 칩 자동 숨김 제거
스크롤 방향 감지 자동 숨김이 sticky 바의 transform 전환과
충돌해 리스트 상단에서 위로 스크롤 시 떨림 발생.
항상 보이는 단순 sticky 칩 바로 변경.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-01 15:04:45 +09:00
f6ba4c8183 feat(mobile-members): 매거진 풀블리드 스티키 스택 디자인
- 멤버를 화면 폭 전체 화보 카드로 (한글명 + 생일/나이 + 인스타)
- 스티키 스택: 스크롤 시 다음 카드가 이전 카드를 덮으며 흐려짐/축소
- 스크롤 멈추면 가장 가까운 카드를 상단에 자석처럼 스냅
- 마지막 카드도 상단까지 올라오도록 동적 하단 여유 공간

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-01 14:47:37 +09:00
9b2e4e190d feat(mobile-schedule): 카테고리 필터 추가 + 리스트 카드 플랫화
- 일정 리스트 위에 카테고리 필터 칩 추가 (해당 달 전체 카테고리)
- 스크롤 방향 감지 자동 숨김 (내리면 숨고 올리면 보임), 상단 여백 일관
- 카테고리 선택 시 일정 목록 + 날짜 점 필터링 (공개 PC와 store 공유)
- 일정 리스트 카드: 그림자 제거, 1.5px 테두리로 플랫하게

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-01 14:10:16 +09:00
381461c25e fix(event): 모바일 축제 포스터 클릭 시 라이트박스로 열기
새 창(target=_blank) → MobileLightbox로 변경 (메인/추가 포스터 모두).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-01 13:48:57 +09:00
1a50f93d65 feat(event): 축제 상세 페이지 디자인 개편
- 골드 그라데이션 단일 히어로로 통합 (타입/학교/제목/날짜/장소/멤버/링크)
- 장소는 히어로에서 클릭 → 지도 다이얼로그(PC 모달/모바일 바텀시트)
- 칩(타입·학교·멤버·링크)을 흰 배경 + 앰버 글자로, 텍스트 그림자 추가
- 모바일: 포스터를 카드와 분리해 크게 표시 + 스크롤 패럴랙스/페이드

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-01 13:46:20 +09:00
c0ac18060d fix(admin-schedule): 카테고리 필터를 공개 페이지와 통일
- categoryCounts를 선택 날짜와 무관하게 해당 달 전체 기준으로 변경
- 달력 점도 카테고리 필터 반영

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-01 12:54:47 +09:00
70fb6527fe fix(event): 학교 축제 상세 날짜 옆 배지를 학교명 → 축제 타입으로
학교명은 이미 제목에 포함되어 중복이므로 '대학 축제' 타입 표시로 변경.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-01 12:50:32 +09:00
2ddc16d532 feat(concert): 콘서트 상세 페이지 추가 (몰입형 디자인)
기존 DefaultSection으로 빈약하게 표시되던 콘서트를 전용 상세 페이지로.

백엔드:
- getScheduleDetail 콘서트 분기: 포스터/장소/세트리스트(곡별 멤버)/굿즈/다른 회차

프론트엔드:
- ConcertSection(PC) / MobileConcertSection(모바일) 신규
- 블러 포스터 히어로 + 회차 드롭다운 + 장소 지도 다이얼로그
- 세트리스트 펼치기/접기 애니메이션, 유닛/솔로만 멤버 태그
- 굿즈 masonry 갤러리(라이트박스), 회차 전환은 history replace
- 모바일은 세로 중앙형 전용 히어로 + 바텀시트
- Lightbox/MobileLightbox를 createPortal로 변경 (오버레이 전체화면 보장)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-31 23:20:48 +09:00
dd5ef48592 feat(schedule): 검색 결과 없음 UI 추가 및 빈 상태 위치 개선
- PC: 검색 모드에서 결과 0개일 때 아무것도 안 나오던 문제 수정
  (돋보기 아이콘 + 검색어 표시), 검색 중 로딩 구분
- 모바일: 검색/날짜별 빈 상태를 아이콘 포함 디자인으로 통일
- 빈 상태/로딩을 일정 영역 기준으로 배치
  (PC: 상단 30% 지점, 모바일: 중앙)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-31 22:15:10 +09:00
8b8b9a7f53 feat(x-schedule): 링크 미리보기(OG) 카드 추가 - 하이브리드
트윗의 외부 링크에 대해 미리보기 카드 표시.
- Nitter가 렌더링한 카드 우선 사용 (extractCard)
- Nitter 카드가 비어있으면 본문 URL로 OG 직접 추출 (og.js)
  - YouTube/Instagram 등 복구, HTML 엔티티 디코딩 포함
  - TikTok 등 봇 차단 사이트는 Nitter 카드로 커버
- schedule_x.card_data 컬럼 + getScheduleDetail 응답에 card 포함
- 가로 레이아웃 카드 (왼쪽 이미지 + 오른쪽 텍스트)
- CardImage: 이미지 로드 실패 시 fallback 아이콘 (인스타 CDN 만료 대비)
- 자체 영상/이미지가 있으면 OG 카드 숨김 (중복 방지)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-31 19:34:42 +09:00
d3d3c9cf75 feat(x-schedule): 트윗 네이티브 영상 썸네일 표시
Nitter는 영상 파일을 제공하지 않으므로 썸네일만 추출해 표시하고,
재생 시 원본 트윗으로 이동.

- scraper: extractVideoThumbnails 추가 (amplify_video_thumb 등)
- schedule_x.video_thumbnails 컬럼 + saveTweet 저장
- getScheduleDetail 응답에 videoThumbnails 포함
- PC/모바일 X 상세: 썸네일 + 재생버튼 + 'X에서 재생' 배지

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-31 19:02:29 +09:00
9e3bff9762 feat(schedule): 카테고리 필터 개선 및 달력 오늘 버튼 추가
- 카테고리 카운트를 선택 날짜와 무관하게 해당 달 전체 기준으로 변경
- 카테고리 섹션이 길어지면 카드 내부 스크롤 (평소엔 콘텐츠 크기 유지)
- 달력 하단에 오늘 날짜로 이동하는 버튼 추가
- 달력 하단 여백 24px → 20px

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-20 22:47:13 +09:00
51e8f17cc1 feat(schedule): 카테고리 선택 시 달력 점도 필터링
카테고리 필터가 일정 목록만 필터링하던 것을 달력 점에도 적용.
날짜 필터는 제외하여 달력은 한 달 전체 점을 유지.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-20 22:35:12 +09:00
d530822a68 feat(festival-bot): 대학 축제 크롤러 봇 구현 (3단계)
검색 페이지(memogipost)를 크롤링하여 프로미스나인 출연 대학 축제를
Gemini url_context로 추출, 행사 일정을 자동 생성하는 봇.

백엔드:
- services/event.js: 이벤트 생성 로직 공유화 (upsertVenue, createEventSchedule, 카카오 검색)
- services/festival/: scraper(검색 페이지 크롤) + gemini(추출) + index(봇 플러그인)
- routes/admin/festival-bots.js: 축제 봇 CRUD API
- scheduler.js: festival 타입 지원, 시간 단위 cron(0 */H * * *) 변환
- 처리한 글 URL은 festival_crawl_log에 기록, 새 글 없으면 Gemini 미호출
- 학교명 부분일치 중복 감지, 활동 멤버 전체 자동 등록
- Gemini 503/500/429 재시도 로직

기타 수정:
- 행사 상세 페이지 관련 링크 줄바꿈 (truncate → break-all)
- 대학 축제 아이콘 변경 (GraduationCap → PartyPopper)
- docs/api.md, CLAUDE.md 환경변수 문서화

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-20 22:28:24 +09:00
3827a23d75 feat(festival-bot): 축제 봇 관리 UI 추가 (2단계)
- bot_festival, festival_crawl_log 테이블 SQL
- FestivalBotDialog: 봇 이름/크롤링 URL/동기화 간격(1~24시간) 입력
- 봇 관리 페이지에 '축제' 섹션 추가 (emerald, PartyPopper)
- BotCard: festival 타입 수정/삭제 버튼 표시
- API 클라이언트 함수 추가 (백엔드 라우트는 3단계)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-20 22:09:07 +09:00
2e459995c3 fix(event): 세부 타입 라벨 '학교 축제' → '대학 축제'
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-20 21:50:12 +09:00
bcc8555193 feat(youtube-bot): 제목에서 멤버 추출 옵션 추가
- bot_youtube에 extract_members_from_title 컬럼 추가 (기본값 0)
- services/youtube/index.js: 설명과 제목에서 각각 멤버 이름 검색, 합집합으로 중복 제거
- YouTubeBotDialog 고급 설정에 토글 추가 (설명 추출 토글 아래)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 18:50:02 +09:00
678e228bc5 feat(x-bot): 관리 YouTube 채널 영상 제외 옵션 추가
- bot_x에 exclude_managed_channels 컬럼 추가 (기본값 1, 기존 동작 유지)
- X 봇이 트윗에서 YouTube 링크를 추출할 때 이미 등록된 YouTube 봇 채널의 영상을 중복 추가할지 옵션으로 제어
- XBotDialog에 토글 추가 (extract_youtube 활성 시만 노출, 왼쪽 border로 하위 옵션 시각화)
- services/x/index.js processYoutubeLinks 시그니처에 옵션 파라미터 추가

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 18:45:45 +09:00
9e87549ca3 style(admin): 곡 검색 다이얼로그 선택 순서 번호 표시
- 체크 아이콘 대신 선택 순서(1, 2, 3...) 숫자 뱃지 표시
- 선택 해제 시 남은 곡 번호 자동 재계산
- 숫자 시각 중심 보정 (leading-none + translate-y)
- 순서는 이미 클릭 순서대로 세트리스트에 추가됨 (selectedTracks push 순서 유지)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 17:25:42 +09:00
18efd952c4 style(admin): 세트리스트 드래그앤드롭 재정렬 추가
- framer-motion의 Reorder를 사용해 세트리스트 곡 순서를 드래그로 변경 가능
- 카드 왼쪽에 GripVertical 핸들 영역 분리, 오른쪽에 기존 폼 필드
- 내부 input/버튼은 드래그 임계값 덕분에 자유롭게 조작 가능

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 17:22:14 +09:00
5472725e9c style(admin): 콘서트 굿즈 섹션 UI 개선 + 드래그앤드롭 재정렬
- 그리드 4열 레이아웃으로 전환해 카드 공백감 해소
- 세로 이미지 잘림 방지: aspect-[3/4] + object-contain + 회색 배경
- 호버 시 삭제 버튼 노출, 순서 뱃지 상시 표시
- 마지막 칸에 '+ 추가' 점선 타일 추가 (다중 업로드 가능)
- @dnd-kit 기반 드래그앤드롭 재정렬 도입 (DragOverlay, rectSortingStrategy)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 17:13:20 +09:00
2564e1ddef style(admin): 콘서트/예능 수정 폼 너비를 추가 폼과 통일
수정 폼이 화면 전체 너비를 쓰던 문제를 max-w-4xl 컨테이너로 감싸 추가 페이지와 동일하게 맞춤.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 17:04:17 +09:00