diff --git a/app/(app)/insights/page.tsx b/app/(app)/insights/page.tsx index 77164d5..39244b7 100644 --- a/app/(app)/insights/page.tsx +++ b/app/(app)/insights/page.tsx @@ -7,6 +7,7 @@ import { getBurndownData } from '@/lib/insights/burndown' import { getSprintStatusBreakdown } from '@/lib/insights/sprint-status' import { getVerifyResultStats, getAlignmentTrend } from '@/lib/insights/verify-stats' import { getJobsPerDay } from '@/lib/insights/agent-throughput' +import { getTokenStats } from '@/lib/insights/token-stats' import { getVelocity } from '@/lib/insights/velocity' import { getBacklogHealth } from '@/lib/insights/backlog-health' import { SprintInfoStrip } from './components/sprint-info-strip' @@ -15,6 +16,7 @@ import { SprintStatusDonut } from './components/sprint-status-donut' import { PlanQualityCard } from './components/plan-quality' import { AlignmentTrend } from './components/alignment-trend' import { AgentThroughputCard } from './components/agent-throughput' +import { TokenUsageCard } from './components/token-usage' import { VelocityChart } from './components/velocity-chart' import { BacklogHealthCard } from './components/backlog-health' @@ -76,6 +78,11 @@ export default async function InsightsPage({ searchParams }: InsightsPageProps) getBacklogHealth(userId), ]) + const activeSprintId = activeSprints.find(s => s.product.id === filterProductId)?.id ?? '' + const tokenStats = await (activeSprints.length > 0 && filterProductId + ? getTokenStats(userId, activeSprintId) + : Promise.resolve({ kpi: { totalTokens: 0, totalCostUsd: 0, avgCostPerJob: 0, jobCount: 0 }, jobs: [] })) + // Date.now is an impure call but used once per request — safe in a Server Component. // eslint-disable-next-line react-hooks/purity const nowMs = Date.now() @@ -142,6 +149,12 @@ export default async function InsightsPage({ searchParams }: InsightsPageProps) /> + {/* Token usage */} +
+

Token gebruik

+ +
+ {/* Velocity */}

Velocity