+ {/* Back */}
+
+
+ {t('analytics.backToResults')}
+
+
+ {/* Header */}
+
+
+
+ Scan Analytics
+
+
+ Freshness trends and grade distribution across your scans
+
+
+
+ {/* Time range filter */}
+
+ {([
+ { key: '7d', label: t('analytics.days7') },
+ { key: '30d', label: t('analytics.days30') },
+ { key: 'all', label: t('analytics.allTime') },
+ ] as const).map(opt => (
+
+ ))}
+
+
+
+ {/* Summary stats */}
+
+
+
+ {t('analytics.totalScans')}
+
+
+ {totalScans}
+
+
+
+
+ {t('analytics.avgFreshness')}
+
+
+ {avgScore}
+
+
+
+
+ {t('analytics.freshRate')}
+
+
+ {freshRate}%
+
+
+
+
+ {totalScans === 0 ? (
+
+
+
+ {t('analytics.runAScan')}
+
+
+ ) : (
+
+ {/* Grade Distribution Pie Chart */}
+
+
+
+
+ {t('analytics.gradeDistribution')}
+
+
+
+
+ `${name} ${(percent * 100).toFixed(0)}%`}
+ >
+ {gradeData.map((entry, idx) => (
+ |
+ ))}
+
+
+
+
+
+
+
+ {/* Scan Volume Bar Chart */}
+
+
+
+
+ {t('analytics.scanVolume')}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {/* Freshness Over Time — full width */}
+
+
+
+
+ {t('analytics.freshnessTrend')}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ )}
+