Files
zellyy-finance/reports/dashboard.html
hansoo 8343b25439 feat: Stage 2 TypeScript 타입 안전성 개선 - any 타입 83개 → 62개 대폭 감소
 주요 개선사항:
- any 타입 83개에서 62개로 21개 수정 (25% 감소)
- 모든 ESLint 에러 11개 → 0개 완전 해결
- 타입 안전성 대폭 향상으로 런타임 오류 가능성 감소

🔧 수정된 파일들:
• PWADebug.tsx - 사용하지 않는 import들에 _ prefix 추가
• categoryUtils.ts - 불필요한 any 캐스트 제거
• TransactionsHeader.tsx - BudgetData 인터페이스 정의
• storageUtils.ts - generic 타입과 unknown 타입 적용
• 각종 error handler들 - Error | {message?: string} 타입 적용
• test 파일들 - 적절한 mock 인터페이스 정의
• 유틸리티 파일들 - any → unknown 또는 적절한 타입으로 교체

🏆 성과:
- 코드 품질 크게 향상 (280 → 80 문제로 71% 감소)
- TypeScript 컴파일러의 타입 체크 효과성 증대
- 개발자 경험 개선 (IDE 자동완성, 타입 추론 등)

🧹 추가 정리:
- ESLint no-console/no-alert 경고 해결
- Prettier 포맷팅 적용으로 코드 스타일 통일

🎯 다음 단계: 남은 62개 any 타입 계속 개선 예정

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-14 10:08:51 +09:00

298 lines
8.5 KiB
HTML

<!doctype html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Linear Project Dashboard - Zellyy</title>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
background: #f5f5f5;
color: #333;
}
.container {
max-width: 1200px;
margin: 0 auto;
padding: 20px;
}
.header {
background: white;
padding: 30px;
border-radius: 8px;
margin-bottom: 20px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
.header h1 {
color: #2563eb;
margin-bottom: 10px;
}
.header .meta {
color: #666;
font-size: 14px;
}
.grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 20px;
margin-bottom: 30px;
}
.card {
background: white;
padding: 20px;
border-radius: 8px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
.card h3 {
color: #1f2937;
margin-bottom: 15px;
font-size: 18px;
}
.metric {
display: flex;
justify-content: space-between;
margin-bottom: 10px;
}
.metric-label {
color: #6b7280;
}
.metric-value {
font-weight: 600;
}
.chart-container {
height: 300px;
margin-top: 20px;
}
.progress-bar {
width: 100%;
height: 8px;
background: #e5e7eb;
border-radius: 4px;
overflow: hidden;
margin: 10px 0;
}
.progress-fill {
height: 100%;
background: #10b981;
transition: width 0.3s ease;
}
.status-good {
color: #10b981;
}
.status-warning {
color: #f59e0b;
}
.status-danger {
color: #ef4444;
}
.team-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 15px;
}
.team-card {
background: #f8fafc;
padding: 15px;
border-radius: 6px;
border-left: 4px solid #3b82f6;
}
.footer {
text-align: center;
color: #666;
font-size: 12px;
margin-top: 40px;
}
</style>
</head>
<body>
<div class="container">
<div class="header">
<h1>📊 Linear Project Dashboard</h1>
<div class="meta">
Organization: Zellyy | Period: 7d | Generated: 2025. 7. 13. 오후
9:41:45
</div>
</div>
<div class="grid">
<div class="card">
<h3>📋 Project Summary</h3>
<div class="metric">
<span class="metric-label">Total Issues</span>
<span class="metric-value">9</span>
</div>
<div class="metric">
<span class="metric-label">Completed Issues</span>
<span class="metric-value">1</span>
</div>
<div class="metric">
<span class="metric-label">Completion Rate</span>
<span class="metric-value status-danger">11.1%</span>
</div>
<div class="progress-bar">
<div class="progress-fill" style="width: 11.11111111111111%"></div>
</div>
<div class="metric">
<span class="metric-label">Avg Completion Time</span>
<span class="metric-value">0.7 days</span>
</div>
<div class="metric">
<span class="metric-label">Team Velocity</span>
<span class="metric-value">0.0 pts/cycle</span>
</div>
</div>
<div class="card">
<h3>🎯 Issue Metrics</h3>
<div class="metric">
<span class="metric-label">Total Issues</span>
<span class="metric-value">9</span>
</div>
<div class="metric">
<span class="metric-label">Completed</span>
<span class="metric-value status-good">1</span>
</div>
<div class="metric">
<span class="metric-label">In Progress</span>
<span class="metric-value status-warning">8</span>
</div>
<div class="metric">
<span class="metric-label">Backlog</span>
<span class="metric-value">0</span>
</div>
<div class="metric">
<span class="metric-label">Estimate Accuracy</span>
<span class="metric-value">0.0%</span>
</div>
</div>
<div class="card">
<h3>🚀 Project Metrics</h3>
<div class="metric">
<span class="metric-label">Total Projects</span>
<span class="metric-value">0</span>
</div>
<div class="metric">
<span class="metric-label">Active Projects</span>
<span class="metric-value">0</span>
</div>
<div class="metric">
<span class="metric-label">Completed Projects</span>
<span class="metric-value status-good">0</span>
</div>
<div class="metric">
<span class="metric-label">On Track</span>
<span class="metric-value status-good">0</span>
</div>
<div class="metric">
<span class="metric-label">Delayed</span>
<span class="metric-value status-danger">0</span>
</div>
<div class="metric">
<span class="metric-label">Health Score</span>
<span class="metric-value status-danger">0.0%</span>
</div>
</div>
<div class="card">
<h3>🔄 Cycle Metrics</h3>
<div class="metric">
<span class="metric-label">Active Cycles</span>
<span class="metric-value">0</span>
</div>
<div class="metric">
<span class="metric-label">Total Issues</span>
<span class="metric-value">0</span>
</div>
<div class="metric">
<span class="metric-label">Completed Issues</span>
<span class="metric-value status-good">0</span>
</div>
<div class="metric">
<span class="metric-label">Average Progress</span>
<span class="metric-value">0.0%</span>
</div>
<div class="metric">
<span class="metric-label">Velocity</span>
<span class="metric-value">0.0 pts/cycle</span>
</div>
</div>
</div>
<div class="card">
<h3>📈 Issue Status Distribution</h3>
<div class="chart-container">
<canvas id="issueStatusChart"></canvas>
</div>
</div>
<div class="card">
<h3>👥 Team Performance</h3>
<div class="team-grid">
<div class="team-card">
<h4>Zellyy (ZEL)</h4>
<div style="font-size: 12px; color: #666; margin: 5px 0">
1 members
</div>
<div class="metric">
<span class="metric-label">Issues</span>
<span class="metric-value">9</span>
</div>
<div class="metric">
<span class="metric-label">Completed</span>
<span class="metric-value status-good">1</span>
</div>
<div class="metric">
<span class="metric-label">Velocity</span>
<span class="metric-value">11.1%</span>
</div>
</div>
</div>
</div>
<div class="footer">
Generated by Linear Dashboard Generator | Data from Linear API | Report
Period: 7d
</div>
</div>
<script>
// Issue Status Chart
const ctx = document.getElementById("issueStatusChart").getContext("2d");
new Chart(ctx, {
type: "doughnut",
data: {
labels: ["Todo", "Done"],
datasets: [
{
data: [8, 1],
backgroundColor: [
"#10b981",
"#3b82f6",
"#f59e0b",
"#ef4444",
"#8b5cf6",
"#06b6d4",
],
},
],
},
options: {
responsive: true,
maintainAspectRatio: false,
plugins: {
legend: {
position: "bottom",
},
},
},
});
</script>
</body>
</html>