feat: v3.1 대시보드 추가 (React + FastAPI)
Media Engine Control Panel — 6탭 웹 대시보드 [백엔드] FastAPI (dashboard/backend/) - server.py: 포트 8080, CORS, React SPA 서빙 - api_overview.py: KPI 카드 + 파이프라인 상태 + 활동 로그 - api_content.py: 칸반 보드 + 승인/거부 + 수동 트리거 - api_analytics.py: 방문자 추이 + 플랫폼/코너별 성과 - api_novels.py: 소설 목록/생성/에피소드 관리 - api_settings.py: engine.json CRUD - api_connections.py: AI 서비스 연결 관리 + 키 저장 - api_tools.py: 기능별 AI 도구 선택 - api_cost.py: 구독 현황 + API 사용량 추적 - api_logs.py: 시스템 로그 필터/검색 [프론트엔드] React + Vite + Tailwind + Recharts (dashboard/frontend/) - Overview: KPI 카드 + 파이프라인 + 코너별 바차트 + 활동 로그 - Content: 4열 칸반 보드 + 상세 모달 + 승인/거부 - Analytics: LineChart 방문자 추이 + 플랫폼별 성과 - Novel: 소설 목록 + 에피소드 테이블 + 새 소설 생성 폼 - Settings: 5개 서브탭 (AI연결/도구선택/배포채널/품질/비용관리) - Logs: 필터/검색 시스템 로그 뷰어 [디자인] CNN 다크+골드 테마 - 배경 #0a0a0d + 액센트 #c8a84e - 모바일 반응형 (Tailscale 외부 접속 대응) [실행] - dashboard/start.bat 더블클릭 → http://localhost:8080 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
/* CNN 다크 + 골드 테마 */
|
||||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
|
||||
:root {
|
||||
--bg: #0a0a0d;
|
||||
--card: #111116;
|
||||
--border: #222228;
|
||||
--text: #e0e0d8;
|
||||
--subtext: #888880;
|
||||
--accent: #c8a84e;
|
||||
--success: #3a7d5c;
|
||||
--warning: #c8a84e;
|
||||
--error: #bf3a3a;
|
||||
--info: #4a5abf;
|
||||
}
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
html, body, #root {
|
||||
height: 100%;
|
||||
background-color: var(--bg);
|
||||
color: var(--text);
|
||||
font-family: 'Noto Sans KR', 'Apple SD Gothic Neo', -apple-system, sans-serif;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
}
|
||||
|
||||
/* 스크롤바 */
|
||||
::-webkit-scrollbar {
|
||||
width: 6px;
|
||||
height: 6px;
|
||||
}
|
||||
::-webkit-scrollbar-track {
|
||||
background: var(--bg);
|
||||
}
|
||||
::-webkit-scrollbar-thumb {
|
||||
background: var(--border);
|
||||
border-radius: 3px;
|
||||
}
|
||||
::-webkit-scrollbar-thumb:hover {
|
||||
background: var(--subtext);
|
||||
}
|
||||
|
||||
/* 골드 액센트 버튼 */
|
||||
.btn-accent {
|
||||
background-color: var(--accent);
|
||||
color: #0a0a0d;
|
||||
font-weight: 600;
|
||||
padding: 0.5rem 1rem;
|
||||
border-radius: 0.375rem;
|
||||
transition: opacity 0.2s;
|
||||
}
|
||||
.btn-accent:hover {
|
||||
opacity: 0.85;
|
||||
}
|
||||
|
||||
/* 카드 기본 */
|
||||
.card {
|
||||
background-color: var(--card);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 0.5rem;
|
||||
}
|
||||
|
||||
/* 태그 */
|
||||
.tag {
|
||||
font-size: 0.7rem;
|
||||
padding: 0.15rem 0.5rem;
|
||||
border-radius: 9999px;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
/* 상태 뱃지 */
|
||||
.badge-done { background: #1a3d2c; color: #4ade80; }
|
||||
.badge-running { background: #1a2a4d; color: #60a5fa; }
|
||||
.badge-waiting { background: #1a1a22; color: #888880; }
|
||||
.badge-error { background: #3d1a1a; color: #f87171; }
|
||||
|
||||
/* 칸반 드래그 영역 */
|
||||
.kanban-col {
|
||||
min-height: 400px;
|
||||
}
|
||||
|
||||
/* 로그 레벨 */
|
||||
.log-error { color: #f87171; }
|
||||
.log-warning { color: #fbbf24; }
|
||||
.log-info { color: #60a5fa; }
|
||||
.log-debug { color: #888880; }
|
||||
Reference in New Issue
Block a user