- types.ts: swagger 기준 타입 전면 교체 (DashboardKpi, DailyStat, HourlyStat, PlatformStat, TopMessage, DashboardData)
- DashboardPage.tsx: map 함수 4개 수정 (mapCards, mapChart, mapMessages, mapPlatform) + hasData 조건 개선
- ServiceDetailPage.tsx: KPI 필드명 변경 (total_sent→total_send, success_rate→계산식)
- DashboardFilter.tsx: 서비스 드롭다운 제거 (전체 서비스 통합 현황만 표시)
- dashboard.api.ts: 미사용 fetchServiceList/ServiceOption 제거
Closes#33
- 플랫폼 관리 API 연동 (FCM/APNs 인증서 등록/삭제)
- 서비스 상세 통계 카드 대시보드 KPI API 연결
- 통계 서브텍스트 전일 대비 변동 데이터 연결 (변동 없음 표시 포함)
- ServiceHeaderCard/ServiceEditPage optional chaining 버그 수정
- 날짜 표기 YYYY-MM-DD 형식 통일
- 페이지네이션 totalCount 필드명 수정 및 패딩 정렬
- 서비스 등록 완료 모달 UI 통일 및 문구 수정
Closes#31
- 대시보드 API 타입 정의 (DashboardRequest, DashboardData 등)
- API 함수 생성 (fetchDashboard, fetchServiceList)
- DashboardFilter 서비스 드롭다운 API 연동 (하드코딩 제거)
- DashboardPage 랜덤 더미 데이터 → API 호출로 전환
- 에러/빈 데이터 오버레이 분리 (API 에러 vs 조회 결과 없음)
Closes#29
- 알림 상세 슬라이드 패널 (NotificationSlidePanel) 신규 생성
- 헤더 알림 드롭다운에서 클릭 시 알림 페이지 이동 + 패널 자동 오픈
- 프로필 수정 필수값 검증: useShake + 인라인 에러 메시지 패턴 적용
- 사이드바 프로필 아이콘 클릭 시 마이페이지 이동
- 사이드바 메뉴 그룹 경로 변경 시 자동 접힘 처리
- 대시보드, 마이페이지 UI 개선
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- TagCard 컴포넌트 구현 (태그 정보 표시, 수정/삭제 기능)
- TagAddModal 컴포넌트 구현 (태그 등록 폼)
- TagDeleteModal 컴포넌트 구현 (삭제 확인 다이얼로그)
- TagManagePage 구현 (서비스별 탭 필터링 + 9건 단위 페이지네이션)
- 서비스 탭 오버플로우 시 가로 스크롤 처리 (scrollbar-hide 유틸 추가)
- 목 데이터 10건 구성
Closes#25
- 발송 통계 페이지 (StatisticsPage): 4개 통계 카드, 월간 추이 라인 차트, 플랫폼별 도넛 차트, 시간대별 바 차트, 최근 이력 테이블, 오픈율 Top5
- 발송 이력 페이지 (StatisticsHistoryPage): 검색/서비스/상태/날짜 필터, 발송 이력 테이블, 행 클릭 슬라이드 패널 (발송 상세), 페이지네이션
- 타입 정의 + 목 데이터 15건 (types.ts)
- 브레드크럼 그룹 라벨 처리 (발송 관리 > 발송 통계/발송 이력)
- 날짜 필터 기본값: 오늘 기준 1달 전 ~ 오늘
- 대시보드와 카드/차트 스타일 통일
- 메시지 목록 연동: 슬라이드 패널에서 messageId 쿼리 파라미터로 이동
Closes#23
- 타입 + 상수 + 목 데이터 정의 (DeviceSummary, 10건)
- Device ID / Push Token 토글 팝오버 셀 구현 (SecretToggleCell)
- 슬라이드 패널 상세 + 삭제 확인 모달 구현 (DeviceSlidePanel)
- 목록 페이지 구현 (필터 4개 + 8컬럼 테이블 + 스켈레톤 + 페이지네이션)
- PlatformBadge 아이콘 전용으로 수정
- FilterDropdown 드롭다운 옵션 중앙 정렬
Closes#21
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 메시지 타입 정의 + 목 데이터 10건 (types.ts)
- iOS/Android 푸시 알림 프리뷰 컴포넌트 (MessagePreview)
- 슬라이드 패널 상세 보기 + 삭제 기능 (MessageSlidePanel)
- 메시지 목록 페이지: 필터(ID/제목 검색, 서비스), 테이블, 페이지네이션
- 메시지 작성 페이지: 12-col 그리드 폼 + 실시간 프리뷰, 필수 검증, 저장 모달
Closes#19
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 서비스 목록 페이지 (검색/필터/페이지네이션, 행 클릭 → 상세)
- 서비스 상세 페이지 (헤더카드/통계/플랫폼 관리 모달)
- 서비스 등록 페이지 (서비스명/플랫폼 선택/설명/관련링크)
- 서비스 수정 페이지 (상태 토글/메타정보/저장 확인 모달)
- 공통 훅 추출 (useShake, useBreadcrumbBack)
- 브레드크럼 동적 경로 지원 (/services/:id, /services/:id/edit)
- 인증 페이지 useShake 공통 훅 리팩터링
Closes#14
- 조회 클릭 시 전체 필터 비활성화 (날짜/드롭다운/초기화/조회)
- 각 위젯 로딩 오버레이 및 스켈레톤 추가
- 조회 완료 시 랜덤 Mock 데이터로 갱신
- 공통 컴포넌트(FilterDropdown, DateRangeInput, FilterResetButton)에 disabled prop 추가
- StatsCards 뱃지 아이콘 크기 및 중앙 정렬 개선
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 회원가입 API 연동 (POST /v1/in/auth/signup)
- 로그인 API 연동 (POST /v1/in/auth/login, next_action 분기)
- 이메일 인증 API 연동 (POST /v1/in/auth/email/verify, /resend)
- API 타입 swagger 스펙에 맞게 수정 (ApiResponse, auth types)
- User 타입 백엔드 AdminInfo 기반으로 변경
- authStore localStorage 영속화 (새로고침 시 인증 유지)
- Vite dev 프록시 설정 (/v1 → devspms)
Closes#7
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- LoginPage: react-hook-form + zod 유효성검사, 비밀번호 토글, shake 애니메이션,
로그인 성공/실패 처리, 성공 오버레이
- SignupPage: 이메일/비밀번호/이름/전화번호 실시간 검증, 전화번호 자동 하이픈,
약관 동의 체크박스, 인증 메일 전송 모달, 이용약관/개인정보 모달
- VerifyEmailPage: 6자리 코드 입력(자동 포커스/붙여넣기), 인증 성공/실패,
재전송 60초 쿨다운, 인증 완료 모달 + 홈 이동 오버레이
- ResetPasswordModal: 비밀번호 재설정 이메일 발송, sonner 토스트
- AuthLayout: flex 기반 풋터 위치 수정 (콘텐츠 중앙 + 풋터 하단)
- 라우터: verify-email 가드 추가 (인증 완료 시 홈 리다이렉트)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Vite 기본 템플릿 정리 및 index.html 수정
- guideline.html 기반 디자인 토큰 적용 (index.css)
- Feature-based 폴더 구조 (8개 feature 모듈)
- 18개 placeholder 페이지 + lazy loading 라우터
- 레이아웃 컴포넌트 (AppLayout, AppHeader, AppSidebar, AuthLayout)
- Zustand 스토어 (authStore, uiStore)
- API 계층 (Axios client, auth.api)
- 타입 정의, 유틸리티, 환경변수 설정
- ErrorBoundary, ProtectedRoute, PublicRoute
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>