"use client" import Header from '@/components/Header' import Footer from '@/components/Footer' import { useState, useEffect } from 'react' import { SiClaude } from 'react-icons/si' import Link from 'next/link' import { Line, BarChart, Bar, PieChart, Pie, Cell, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer, Area, AreaChart, ComposedChart, } from 'recharts' interface ModelBreakdown { modelName: string inputTokens: number outputTokens: number cacheCreationTokens: number cacheReadTokens: number cost: number } interface DailyData { date: string inputTokens: number outputTokens: number cacheCreationTokens: number cacheReadTokens: number totalTokens: number totalCost: number modelsUsed: string[] modelBreakdowns: ModelBreakdown[] } interface CCData { daily: DailyData[] totals: { inputTokens: number outputTokens: number cacheCreationTokens: number cacheReadTokens: number totalCost: number totalTokens: number } } const COLORS = ['#c15f3c', '#b1ada1', '#f4f3ee', '#c15f3c', '#b1ada1', '#f4f3ee'] export default function AI() { const [data, setData] = useState(null) const [loading, setLoading] = useState(true) const [error, setError] = useState(null) const [selectedMetric, setSelectedMetric] = useState<'cost' | 'tokens'>('cost') useEffect(() => { fetch('/data/cc.json') .then(res => { if (!res.ok) throw new Error('Failed to fetch data') return res.json() }) .then(data => { setData(data) setLoading(false) }) .catch(err => { setError(err.message) setLoading(false) }) }, []) if (loading) { return (
← Back to AI

Claude Code Usage

How much I use Claude Code!

Total Cost

Total Tokens

Days Active

Avg Daily Cost

Daily Usage Trend

Model Usage Distribution

Token Type Breakdown

Daily Token Composition

Recent Sessions

{[...Array(5)].map((_, index) => ( ))}
Date Models Used Total Tokens Cost
) } if (error || !data) { return (
Error loading data: {error}
) } const modelUsageData = data.daily.reduce((acc, day) => { day.modelBreakdowns.forEach(model => { const existing = acc.find(m => m.name === model.modelName) if (existing) { existing.value += model.cost } else { acc.push({ name: model.modelName, value: model.cost }) } }) return acc }, [] as { name: string; value: number }[]) .sort((a, b) => b.value - a.value) const tokenTypeData = [ { name: 'Input', value: data.totals.inputTokens }, { name: 'Output', value: data.totals.outputTokens }, { name: 'Cache Creation', value: data.totals.cacheCreationTokens }, { name: 'Cache Read', value: data.totals.cacheReadTokens }, ] const dailyTrendData = data.daily.map(day => ({ date: new Date(day.date + 'T00:00:00').toLocaleDateString('en-US', { month: 'short', day: 'numeric' }), cost: day.totalCost, tokens: day.totalTokens / 1000000, inputTokens: day.inputTokens / 1000, outputTokens: day.outputTokens / 1000, cacheTokens: (day.cacheCreationTokens + day.cacheReadTokens) / 1000000, })) const formatCurrency = (value: number) => `$${value.toFixed(2)}` const formatTokens = (value: number) => `${value.toFixed(1)}M` return (
← Back to AI

Claude Code Usage

How much I use Claude Code!

Total Cost

${data.totals.totalCost.toFixed(2)}

Total Tokens

{(data.totals.totalTokens / 1000000).toFixed(1)}M

Days Active

{data.daily.length}

Avg Daily Cost

${(data.totals.totalCost / data.daily.length).toFixed(2)}

Daily Usage Trend

selectedMetric === 'cost' ? formatCurrency(value) : formatTokens(value)} />

Model Usage Distribution

{modelUsageData.map((entry, index) => ( ))} formatCurrency(value)} labelStyle={{ color: '#fff' }} itemStyle={{ color: '#fff' }} />
{modelUsageData.map((model, index) => { const percentage = ((model.value / data.totals.totalCost) * 100).toFixed(1) return (
{model.name}
{percentage}% ${model.value.toFixed(2)}
) })}
Total Models Used {modelUsageData.length}
Most Used {modelUsageData[0]?.name}

Token Type Breakdown

`${(value / 1000000).toFixed(0)}M`} /> `${(value / 1000000).toFixed(2)}M tokens`} />

Daily Token Composition

`${value}K`} /> `${value.toFixed(1)}K tokens`} />

Recent Sessions

{data.daily.slice(-5).reverse().map((day, index) => ( ))}
Date Models Used Total Tokens Cost
{new Date(day.date + 'T00:00:00').toLocaleDateString()} {day.modelsUsed.join(', ')} {(day.totalTokens / 1000000).toFixed(2)}M ${day.totalCost.toFixed(2)}
) }