--- // QualityMetrics.astro - Analytics display component for Starlight export interface Props { title?: string showDetailedBreakdown?: boolean maxItems?: number timeframe?: 'day' | 'week' | 'month' | 'all' } const { title = 'Conversion Quality Analytics', showDetailedBreakdown = true, maxItems = 10, timeframe = 'week', } = Astro.props // In a real implementation, this would fetch from an analytics API const metrics = { overview: { totalConversions: 127, averageQuality: 78, highQuality: 45, mediumQuality: 62, lowQuality: 20, qualityTrend: '+5%', }, breakdown: { titleGeneration: { score: 85, trend: '+3%' }, descriptionQuality: { score: 72, trend: '+8%' }, contentStructure: { score: 88, trend: '-2%' }, tagRelevance: { score: 67, trend: '+12%' }, metadataComplete: { score: 94, trend: '+1%' }, }, topIssues: [ { issue: 'Short descriptions', count: 23, impact: 'medium' }, { issue: 'Generic titles', count: 18, impact: 'high' }, { issue: 'Missing tags', count: 15, impact: 'low' }, { issue: 'Poor structure', count: 12, impact: 'high' }, { issue: 'No categories', count: 8, impact: 'medium' }, ], } ---

{title}

{metrics.overview.averageQuality}%
Average Quality
{metrics.overview.qualityTrend}
🟢
{metrics.overview.highQuality}
High Quality
{Math.round((metrics.overview.highQuality / metrics.overview.totalConversions) * 100)}% of total
🟡
{metrics.overview.mediumQuality}
Medium Quality
{Math.round((metrics.overview.mediumQuality / metrics.overview.totalConversions) * 100)}% of total
🔴
{metrics.overview.lowQuality}
Needs Review
{Math.round((metrics.overview.lowQuality / metrics.overview.totalConversions) * 100)}% of total
{showDetailedBreakdown && (

Quality Breakdown

{Object.entries(metrics.breakdown).map(([key, data]) => (
{key.replace(/([A-Z])/g, ' $1').replace(/^./, str => str.toUpperCase())} {data.trend}
{data.score}%
))}

Common Issues

{metrics.topIssues.slice(0, maxItems).map((issue) => (
{issue.issue}
{issue.count} files affected {issue.impact} impact
))}
)}

Quality Trends

High Quality
Medium Quality
Low Quality