vibestats 1.4.2 → 1.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +13 -2
- package/dist/web/404.html +1 -1
- package/dist/web/activity.html +1 -1
- package/dist/web/activity.txt +1 -1
- package/dist/web/changelog.html +1 -1
- package/dist/web/changelog.txt +54 -53
- package/dist/web/compare/claude-code-vs-codex-cli-tracking.html +1 -1
- package/dist/web/compare/claude-code-vs-codex-cli-tracking.txt +1 -1
- package/dist/web/compare/daily-vs-monthly-ai-usage-reports.html +1 -1
- package/dist/web/compare/daily-vs-monthly-ai-usage-reports.txt +1 -1
- package/dist/web/compare/local-vs-cloud-ai-analytics.html +1 -1
- package/dist/web/compare/local-vs-cloud-ai-analytics.txt +1 -1
- package/dist/web/compare/manual-tracking-vs-vibestats.html +1 -1
- package/dist/web/compare/manual-tracking-vs-vibestats.txt +1 -1
- package/dist/web/compare/querystring-shares-vs-stored-share-pages.html +1 -1
- package/dist/web/compare/querystring-shares-vs-stored-share-pages.txt +1 -1
- package/dist/web/compare/session-breakdown-vs-model-breakdown.html +1 -1
- package/dist/web/compare/session-breakdown-vs-model-breakdown.txt +1 -1
- package/dist/web/compare/single-source-vs-combined-tracking.html +1 -1
- package/dist/web/compare/single-source-vs-combined-tracking.txt +1 -1
- package/dist/web/compare/terminal-table-vs-json-output.html +1 -1
- package/dist/web/compare/terminal-table-vs-json-output.txt +1 -1
- package/dist/web/compare/token-volume-vs-cost-estimation.html +1 -1
- package/dist/web/compare/token-volume-vs-cost-estimation.txt +1 -1
- package/dist/web/compare/wrapped-vs-activity-heatmap.html +1 -1
- package/dist/web/compare/wrapped-vs-activity-heatmap.txt +1 -1
- package/dist/web/compare.html +1 -1
- package/dist/web/compare.txt +1 -1
- package/dist/web/dashboard/activity.html +1 -1
- package/dist/web/dashboard/activity.txt +1 -1
- package/dist/web/dashboard/usage.html +1 -1
- package/dist/web/dashboard/usage.txt +1 -1
- package/dist/web/dashboard/wrapped.html +1 -1
- package/dist/web/dashboard/wrapped.txt +1 -1
- package/dist/web/dashboard.html +1 -1
- package/dist/web/dashboard.txt +1 -1
- package/dist/web/docs/commands.html +1 -1
- package/dist/web/docs/commands.txt +1 -1
- package/dist/web/docs.html +1 -1
- package/dist/web/docs.txt +1 -1
- package/dist/web/features/ai-coding-activity-heatmap.html +1 -1
- package/dist/web/features/ai-coding-activity-heatmap.txt +1 -1
- package/dist/web/features/ai-coding-wrapped.html +1 -1
- package/dist/web/features/ai-coding-wrapped.txt +1 -1
- package/dist/web/features/claude-code-stats.html +1 -1
- package/dist/web/features/claude-code-stats.txt +1 -1
- package/dist/web/features/claude-diagnostics.html +1 -1
- package/dist/web/features/claude-diagnostics.txt +1 -1
- package/dist/web/features/codex-cli-stats.html +1 -1
- package/dist/web/features/codex-cli-stats.txt +1 -1
- package/dist/web/features/combined-ai-coding-stats.html +1 -1
- package/dist/web/features/combined-ai-coding-stats.txt +1 -1
- package/dist/web/features/json-and-automation-exports.html +1 -1
- package/dist/web/features/json-and-automation-exports.txt +1 -1
- package/dist/web/features/model-breakdown.html +1 -1
- package/dist/web/features/model-breakdown.txt +1 -1
- package/dist/web/features/privacy-first-analytics.html +1 -1
- package/dist/web/features/privacy-first-analytics.txt +1 -1
- package/dist/web/features/session-breakdown.html +1 -1
- package/dist/web/features/session-breakdown.txt +1 -1
- package/dist/web/features/share-pages.html +1 -1
- package/dist/web/features/share-pages.txt +1 -1
- package/dist/web/features/token-and-cost-tracking.html +1 -1
- package/dist/web/features/token-and-cost-tracking.txt +1 -1
- package/dist/web/features.html +1 -1
- package/dist/web/features.txt +1 -1
- package/dist/web/guides/how-to-build-ai-activity-heatmap.html +1 -1
- package/dist/web/guides/how-to-build-ai-activity-heatmap.txt +1 -1
- package/dist/web/guides/how-to-compare-model-usage.html +1 -1
- package/dist/web/guides/how-to-compare-model-usage.txt +1 -1
- package/dist/web/guides/how-to-create-ai-coding-wrapped.html +1 -1
- package/dist/web/guides/how-to-create-ai-coding-wrapped.txt +1 -1
- package/dist/web/guides/how-to-measure-ai-token-costs.html +1 -1
- package/dist/web/guides/how-to-measure-ai-token-costs.txt +1 -1
- package/dist/web/guides/how-to-read-claude-diagnostics.html +1 -1
- package/dist/web/guides/how-to-read-claude-diagnostics.txt +1 -1
- package/dist/web/guides/how-to-share-ai-coding-stats.html +1 -1
- package/dist/web/guides/how-to-share-ai-coding-stats.txt +1 -1
- package/dist/web/guides/how-to-track-claude-code-usage.html +1 -1
- package/dist/web/guides/how-to-track-claude-code-usage.txt +1 -1
- package/dist/web/guides/how-to-track-codex-cli-usage.html +1 -1
- package/dist/web/guides/how-to-track-codex-cli-usage.txt +1 -1
- package/dist/web/guides.html +1 -1
- package/dist/web/guides.txt +1 -1
- package/dist/web/index.html +1 -1
- package/dist/web/index.txt +1 -1
- package/dist/web/sitemap.xml +46 -46
- package/dist/web/use-cases/ai-agencies.html +1 -1
- package/dist/web/use-cases/ai-agencies.txt +1 -1
- package/dist/web/use-cases/consultants.html +1 -1
- package/dist/web/use-cases/consultants.txt +1 -1
- package/dist/web/use-cases/engineering-managers.html +1 -1
- package/dist/web/use-cases/engineering-managers.txt +1 -1
- package/dist/web/use-cases/freelancers.html +1 -1
- package/dist/web/use-cases/freelancers.txt +1 -1
- package/dist/web/use-cases/indie-hackers.html +1 -1
- package/dist/web/use-cases/indie-hackers.txt +1 -1
- package/dist/web/use-cases/monthly-reporting.html +1 -1
- package/dist/web/use-cases/monthly-reporting.txt +1 -1
- package/dist/web/use-cases/open-source-maintainers.html +1 -1
- package/dist/web/use-cases/open-source-maintainers.txt +1 -1
- package/dist/web/use-cases/personal-retrospectives.html +1 -1
- package/dist/web/use-cases/personal-retrospectives.txt +1 -1
- package/dist/web/use-cases/researchers.html +1 -1
- package/dist/web/use-cases/researchers.txt +1 -1
- package/dist/web/use-cases/weekly-reviews.html +1 -1
- package/dist/web/use-cases/weekly-reviews.txt +1 -1
- package/dist/web/use-cases.html +1 -1
- package/dist/web/use-cases.txt +1 -1
- package/dist/web/wrapped.html +1 -1
- package/dist/web/wrapped.txt +1 -1
- package/package.json +7 -8
- /package/dist/web/_next/static/{3pcP-Y7gHe02EnmTXxc9b → bkF3quPLxz4vmu3191LYm}/_buildManifest.js +0 -0
- /package/dist/web/_next/static/{3pcP-Y7gHe02EnmTXxc9b → bkF3quPLxz4vmu3191LYm}/_ssgManifest.js +0 -0
package/dist/web/features.txt
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
4:I[3609,[],""]
|
|
5
5
|
9:I[2207,[],""]
|
|
6
6
|
:HL["/_next/static/css/335de1248158d380.css","style"]
|
|
7
|
-
5:T79b,{"@context":"https://schema.org","@type":"CollectionPage","name":"AI coding analytics features","description":"Explore vibestats feature pages for Claude Code stats, Codex CLI stats, wrapped summaries, activity heatmaps, cost tracking, and privacy-first AI coding analytics.","url":"https://vibestats.wolfai.dev/features","mainEntity":{"@type":"ItemList","itemListElement":[{"@type":"ListItem","position":1,"name":"Claude Code stats","url":"https://vibestats.wolfai.dev/features/claude-code-stats"},{"@type":"ListItem","position":2,"name":"Codex CLI stats","url":"https://vibestats.wolfai.dev/features/codex-cli-stats"},{"@type":"ListItem","position":3,"name":"Combined AI coding stats","url":"https://vibestats.wolfai.dev/features/combined-ai-coding-stats"},{"@type":"ListItem","position":4,"name":"AI coding wrapped","url":"https://vibestats.wolfai.dev/features/ai-coding-wrapped"},{"@type":"ListItem","position":5,"name":"AI coding activity heatmap","url":"https://vibestats.wolfai.dev/features/ai-coding-activity-heatmap"},{"@type":"ListItem","position":6,"name":"Token and cost tracking","url":"https://vibestats.wolfai.dev/features/token-and-cost-tracking"},{"@type":"ListItem","position":7,"name":"Model breakdown","url":"https://vibestats.wolfai.dev/features/model-breakdown"},{"@type":"ListItem","position":8,"name":"Session breakdown","url":"https://vibestats.wolfai.dev/features/session-breakdown"},{"@type":"ListItem","position":9,"name":"AI coding share pages","url":"https://vibestats.wolfai.dev/features/share-pages"},{"@type":"ListItem","position":10,"name":"Privacy-first analytics","url":"https://vibestats.wolfai.dev/features/privacy-first-analytics"},{"@type":"ListItem","position":11,"name":"Claude diagnostics","url":"https://vibestats.wolfai.dev/features/claude-diagnostics"},{"@type":"ListItem","position":12,"name":"JSON and automation exports","url":"https://vibestats.wolfai.dev/features/json-and-automation-exports"}]}}0:{"P":null,"b":"
|
|
7
|
+
5:T79b,{"@context":"https://schema.org","@type":"CollectionPage","name":"AI coding analytics features","description":"Explore vibestats feature pages for Claude Code stats, Codex CLI stats, wrapped summaries, activity heatmaps, cost tracking, and privacy-first AI coding analytics.","url":"https://vibestats.wolfai.dev/features","mainEntity":{"@type":"ItemList","itemListElement":[{"@type":"ListItem","position":1,"name":"Claude Code stats","url":"https://vibestats.wolfai.dev/features/claude-code-stats"},{"@type":"ListItem","position":2,"name":"Codex CLI stats","url":"https://vibestats.wolfai.dev/features/codex-cli-stats"},{"@type":"ListItem","position":3,"name":"Combined AI coding stats","url":"https://vibestats.wolfai.dev/features/combined-ai-coding-stats"},{"@type":"ListItem","position":4,"name":"AI coding wrapped","url":"https://vibestats.wolfai.dev/features/ai-coding-wrapped"},{"@type":"ListItem","position":5,"name":"AI coding activity heatmap","url":"https://vibestats.wolfai.dev/features/ai-coding-activity-heatmap"},{"@type":"ListItem","position":6,"name":"Token and cost tracking","url":"https://vibestats.wolfai.dev/features/token-and-cost-tracking"},{"@type":"ListItem","position":7,"name":"Model breakdown","url":"https://vibestats.wolfai.dev/features/model-breakdown"},{"@type":"ListItem","position":8,"name":"Session breakdown","url":"https://vibestats.wolfai.dev/features/session-breakdown"},{"@type":"ListItem","position":9,"name":"AI coding share pages","url":"https://vibestats.wolfai.dev/features/share-pages"},{"@type":"ListItem","position":10,"name":"Privacy-first analytics","url":"https://vibestats.wolfai.dev/features/privacy-first-analytics"},{"@type":"ListItem","position":11,"name":"Claude diagnostics","url":"https://vibestats.wolfai.dev/features/claude-diagnostics"},{"@type":"ListItem","position":12,"name":"JSON and automation exports","url":"https://vibestats.wolfai.dev/features/json-and-automation-exports"}]}}0:{"P":null,"b":"bkF3quPLxz4vmu3191LYm","p":"","c":["","features"],"i":false,"f":[[["",{"children":["features",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/335de1248158d380.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":[["$","head",null,{"children":[["$","$L2",null,{"id":"wolf-analytics-config","strategy":"beforeInteractive","children":"window.WOLF_ANALYTICS_CONFIG = {\"apiUrl\":\"https://analapi.wolfai.dev\",\"projectApiKey\":\"wa_rMSm5mgj44W_9LzMsKCwwAipAtxPynp1tn4PbxN_Oa8\",\"mode\":\"intl\",\"sourceApp\":\"vibestats\"};"}],["$","$L2",null,{"id":"wolf-analytics-script","src":"https://analytics.wolfai.dev/wolf-analytics.min.js","strategy":"beforeInteractive"}]]}],["$","body",null,{"className":"antialiased min-h-screen bg-background text-foreground","children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]]}],{"children":["features",["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","main",null,{"className":"min-h-screen bg-[radial-gradient(circle_at_top_left,_rgba(253,186,116,0.22),_transparent_35%),linear-gradient(180deg,#fff9f1_0%,#fff1de_100%)] px-4 py-8 text-slate-900 md:px-8 md:py-12","children":[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"$5"}}],"$L6"]}],null,"$L7"]}],{},null,false]},null,false]},null,false],"$L8",false]],"m":"$undefined","G":["$9",[]],"s":false,"S":true}
|
|
8
8
|
a:I[4816,["816","static/chunks/816-8960921093d57453.js","944","static/chunks/app/features/page-5d0587c1d5910e68.js"],""]
|
|
9
9
|
18:I[496,[],"OutletBoundary"]
|
|
10
10
|
1a:I[3737,[],"AsyncMetadataOutlet"]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><!--3pcP_Y7gHe02EnmTXxc9b--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/335de1248158d380.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-175b2f5685d7557b.js"/><script src="/_next/static/chunks/c476d598-9099ed8b975ae1d6.js" async=""></script><script src="/_next/static/chunks/498-74a3a367cb8442f0.js" async=""></script><script src="/_next/static/chunks/main-app-6619364ab1f13fb7.js" async=""></script><script src="/_next/static/chunks/app/layout-6ebd9b17af55ec02.js" async=""></script><script src="/_next/static/chunks/816-8960921093d57453.js" async=""></script><script src="/_next/static/chunks/app/guides/%5Bslug%5D/page-5d0587c1d5910e68.js" async=""></script><link rel="preload" href="https://analytics.wolfai.dev/wolf-analytics.min.js" as="script"/><title>How to build an AI activity heatmap | vibestats</title><meta name="description" content="A practical guide to generating a GitHub-style AI coding activity heatmap with vibestats."/><meta name="application-name" content="vibestats"/><meta name="keywords" content="vibestats,Claude Code stats,Codex CLI stats,AI coding stats,AI coding analytics,Claude Code wrapped,Codex usage tracker,developer analytics,how to build AI activity heatmap,Claude Code activity heatmap guide,Codex heatmap guide"/><link rel="canonical" href="https://vibestats.wolfai.dev/guides/how-to-build-ai-activity-heatmap"/><meta property="og:title" content="How to build an AI activity heatmap | vibestats"/><meta property="og:description" content="A practical guide to generating a GitHub-style AI coding activity heatmap with vibestats."/><meta property="og:url" content="https://vibestats.wolfai.dev/guides/how-to-build-ai-activity-heatmap"/><meta property="og:site_name" content="vibestats"/><meta property="og:locale" content="en_US"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary"/><meta name="twitter:title" content="How to build an AI activity heatmap | vibestats"/><meta name="twitter:description" content="A practical guide to generating a GitHub-style AI coding activity heatmap with vibestats."/><script>(self.__next_s=self.__next_s||[]).push([0,{"children":"window.WOLF_ANALYTICS_CONFIG = {\"apiUrl\":\"https://analapi.wolfai.dev\",\"projectApiKey\":\"wa_rMSm5mgj44W_9LzMsKCwwAipAtxPynp1tn4PbxN_Oa8\",\"mode\":\"intl\",\"sourceApp\":\"vibestats\"};","id":"wolf-analytics-config"}])</script><script>(self.__next_s=self.__next_s||[]).push(["https://analytics.wolfai.dev/wolf-analytics.min.js",{"id":"wolf-analytics-script"}])</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="antialiased min-h-screen bg-background text-foreground"><div hidden=""><!--$--><!--/$--></div><main class="min-h-screen bg-[radial-gradient(circle_at_top_left,_rgba(253,186,116,0.22),_transparent_35%),linear-gradient(180deg,#fff9f1_0%,#fff1de_100%)] px-4 py-8 text-slate-900 md:px-8 md:py-12"><script type="application/ld+json">[{"@context":"https://schema.org","@type":"WebPage","name":"How to build an AI activity heatmap","description":"A practical guide to generating a GitHub-style AI coding activity heatmap with vibestats.","url":"https://vibestats.wolfai.dev/guides/how-to-build-ai-activity-heatmap","isPartOf":{"@type":"WebSite","name":"vibestats","url":"https://vibestats.wolfai.dev/"}},{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"vibestats","item":"https://vibestats.wolfai.dev/"},{"@type":"ListItem","position":2,"name":"Guides","item":"https://vibestats.wolfai.dev/guides"},{"@type":"ListItem","position":3,"name":"How to build an AI activity heatmap","item":"https://vibestats.wolfai.dev/guides/how-to-build-ai-activity-heatmap"}]},{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"What is the fastest way to approach how to build an ai activity heatmap?","acceptedAnswer":{"@type":"Answer","text":"Start with the relevant command, verify the output locally, then decide whether you need a share page, a wrapped summary, or a heatmap for communication."}},{"@type":"Question","name":"Do I need to upload raw conversations for these guides?","acceptedAnswer":{"@type":"Answer","text":"No. vibestats works from local usage artifacts and only turns aggregate results into hosted pages when you explicitly publish them."}}]}]</script><div class="mx-auto max-w-7xl"><header class="rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)] overflow-hidden"><div class="flex flex-wrap items-center gap-3 text-sm text-slate-500"><a class="transition hover:text-orange-700" href="/">vibestats</a><span>/</span><a class="transition hover:text-orange-700" href="/guides">Guides</a><span>/</span><span class="text-slate-700">How to build an AI activity heatmap</span></div><p class="mt-5 text-[0.72rem] font-semibold uppercase tracking-[0.28em] text-slate-500">Guide</p><h1 class="mt-4 max-w-5xl font-[family-name:var(--font-display)] text-5xl leading-none text-slate-950 md:text-7xl">How to build an AI activity heatmap</h1><p class="mt-5 max-w-3xl text-base leading-7 text-slate-600 md:text-lg">A practical guide to generating a GitHub-style AI coding activity heatmap with vibestats.</p><div class="mt-6 grid gap-3 md:grid-cols-3"><div class="rounded-[1.3rem] border border-slate-200 bg-slate-50 px-4 py-4"><div class="text-[0.7rem] font-semibold uppercase tracking-[0.22em] text-slate-500">Intent</div><div class="mt-2 text-sm leading-6 text-slate-700">Guide</div></div><div class="rounded-[1.3rem] border border-slate-200 bg-slate-50 px-4 py-4"><div class="text-[0.7rem] font-semibold uppercase tracking-[0.22em] text-slate-500">Focus</div><div class="mt-2 text-sm leading-6 text-slate-700">How to build an AI activity heatmap is a practical workflow page for turning local AI coding usage into something readable and repeatable.</div></div><div class="rounded-[1.3rem] border border-slate-200 bg-slate-50 px-4 py-4"><div class="text-[0.7rem] font-semibold uppercase tracking-[0.22em] text-slate-500">Next step</div><div class="mt-2 text-sm leading-6 text-slate-700"><a class="text-slate-900 transition hover:text-orange-700" href="/docs/commands">Open the command reference</a></div></div></div></header><section class="mt-6 grid gap-4 lg:grid-cols-[0.8fr_1.2fr]"><article class="rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]"><p class="text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500">Highlights</p><ul class="mt-4 space-y-3 text-sm leading-7 text-slate-600"><li>Heatmaps are best for rhythm and consistency</li><li>Metric choice changes the story</li><li>Hosted pages are easier to reuse in updates</li></ul></article><article class="rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]"><p class="text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500">Relevant commands</p><div class="mt-4 grid gap-3"><code class="rounded-[1.2rem] bg-slate-100 px-4 py-4 text-sm text-slate-700">npx vibestats --activity</code><code class="rounded-[1.2rem] bg-slate-100 px-4 py-4 text-sm text-slate-700">npx vibestats --activity --metric sessions</code><code class="rounded-[1.2rem] bg-slate-100 px-4 py-4 text-sm text-slate-700">npx vibestats --activity --share --days 365</code></div></article></section><section class="mt-6"><div class="grid gap-4 md:grid-cols-3"><article class="rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]"><p class="text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500">Step <!-- -->1</p><h2 class="mt-3 text-2xl font-semibold text-slate-950">Generate the activity view</h2><p class="mt-4 text-sm leading-7 text-slate-600">Run `npx vibestats --activity` to create the heatmap from aggregate local usage.</p></article><article class="rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]"><p class="text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500">Step <!-- -->2</p><h2 class="mt-3 text-2xl font-semibold text-slate-950">Set the metric and window</h2><p class="mt-4 text-sm leading-7 text-slate-600">Adjust the metric or day window so the heatmap matches the question you are trying to answer.</p></article><article class="rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]"><p class="text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500">Step <!-- -->3</p><h2 class="mt-3 text-2xl font-semibold text-slate-950">Publish when the view is ready</h2><p class="mt-4 text-sm leading-7 text-slate-600">Use the share flow when you want a hosted page or image-friendly version of the result.</p></article></div></section><section class="mt-6 grid gap-4 md:grid-cols-2"><article class="rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]"><h2 class="font-[family-name:var(--font-display)] text-3xl leading-none text-slate-950">Why this guide exists</h2><p class="mt-4 text-sm leading-7 text-slate-600">Most AI coding reporting problems are not about one missing command. They are about choosing the right surface: daily usage, wrapped summaries, activity heatmaps, cost views, or shareable aggregate pages.</p></article><article class="rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]"><h2 class="font-[family-name:var(--font-display)] text-3xl leading-none text-slate-950">What to expect</h2><p class="mt-4 text-sm leading-7 text-slate-600">This guide stays focused on vibestats workflows and the pages already documented in the public command reference, so you can move from local data to a readable result quickly.</p></article></section><section class="mt-6 rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]"><p class="text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500">FAQ</p><div class="mt-4 grid gap-4 md:grid-cols-2"><article class="rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5"><h2 class="text-lg font-semibold text-slate-950">What is the fastest way to approach how to build an ai activity heatmap?</h2><p class="mt-3 text-sm leading-7 text-slate-600">Start with the relevant command, verify the output locally, then decide whether you need a share page, a wrapped summary, or a heatmap for communication.</p></article><article class="rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5"><h2 class="text-lg font-semibold text-slate-950">Do I need to upload raw conversations for these guides?</h2><p class="mt-3 text-sm leading-7 text-slate-600">No. vibestats works from local usage artifacts and only turns aggregate results into hosted pages when you explicitly publish them.</p></article></div></section><section class="mt-6 rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]"><div class="flex items-center justify-between gap-4"><div><p class="text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500">Related pages</p><h2 class="mt-3 font-[family-name:var(--font-display)] text-3xl leading-none text-slate-950">Continue by intent</h2></div><a class="text-sm font-medium text-slate-700 transition hover:text-orange-700" href="/guides">View all <!-- -->guides</a></div><div class="mt-5 grid gap-4 md:grid-cols-3"><a class="rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5 text-sm leading-7 text-slate-600 transition hover:border-orange-300 hover:bg-white" href="/features/ai-coding-activity-heatmap"><span class="block font-semibold text-slate-950">features ai-coding-activity-heatmap</span><span class="mt-2 block">Open the related vibestats page and continue the workflow from there.</span></a><a class="rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5 text-sm leading-7 text-slate-600 transition hover:border-orange-300 hover:bg-white" href="/use-cases/weekly-reviews"><span class="block font-semibold text-slate-950">use-cases weekly-reviews</span><span class="mt-2 block">Open the related vibestats page and continue the workflow from there.</span></a><a class="rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5 text-sm leading-7 text-slate-600 transition hover:border-orange-300 hover:bg-white" href="/features/share-pages"><span class="block font-semibold text-slate-950">features share-pages</span><span class="mt-2 block">Open the related vibestats page and continue the workflow from there.</span></a></div></section></div></main><!--$--><!--/$--><script src="/_next/static/chunks/webpack-175b2f5685d7557b.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[7437,[\"177\",\"static/chunks/app/layout-6ebd9b17af55ec02.js\"],\"\"]\n3:I[5965,[],\"\"]\n4:I[3609,[],\"\"]\n6:I[496,[],\"OutletBoundary\"]\n8:I[3737,[],\"AsyncMetadataOutlet\"]\na:I[496,[],\"ViewportBoundary\"]\nc:I[496,[],\"MetadataBoundary\"]\nd:\"$Sreact.suspense\"\nf:I[2207,[],\"\"]\n:HL[\"/_next/static/css/335de1248158d380.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"3pcP-Y7gHe02EnmTXxc9b\",\"p\":\"\",\"c\":[\"\",\"guides\",\"how-to-build-ai-activity-heatmap\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"guides\",{\"children\":[[\"slug\",\"how-to-build-ai-activity-heatmap\",\"d\"],{\"children\":[\"__PAGE__\",{}]}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/335de1248158d380.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"$L2\",null,{\"id\":\"wolf-analytics-config\",\"strategy\":\"beforeInteractive\",\"children\":\"window.WOLF_ANALYTICS_CONFIG = {\\\"apiUrl\\\":\\\"https://analapi.wolfai.dev\\\",\\\"projectApiKey\\\":\\\"wa_rMSm5mgj44W_9LzMsKCwwAipAtxPynp1tn4PbxN_Oa8\\\",\\\"mode\\\":\\\"intl\\\",\\\"sourceApp\\\":\\\"vibestats\\\"};\"}],[\"$\",\"$L2\",null,{\"id\":\"wolf-analytics-script\",\"src\":\"https://analytics.wolfai.dev/wolf-analytics.min.js\",\"strategy\":\"beforeInteractive\"}]]}],[\"$\",\"body\",null,{\"className\":\"antialiased min-h-screen bg-background text-foreground\",\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],{\"children\":[\"guides\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"slug\",\"how-to-build-ai-activity-heatmap\",\"d\"],[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[\"$L5\",null,[\"$\",\"$L6\",null,{\"children\":[\"$L7\",[\"$\",\"$L8\",null,{\"promise\":\"$@9\"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],null],[\"$\",\"$Lc\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$d\",null,{\"fallback\":null,\"children\":\"$Le\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$f\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"11:I[4816,[\"816\",\"static/chunks/816-8960921093d57453.js\",\"54\",\"static/chunks/app/guides/%5Bslug%5D/page-5d0587c1d5910e68.js\"],\"\"]\n10:T590,"])</script><script>self.__next_f.push([1,"[{\"@context\":\"https://schema.org\",\"@type\":\"WebPage\",\"name\":\"How to build an AI activity heatmap\",\"description\":\"A practical guide to generating a GitHub-style AI coding activity heatmap with vibestats.\",\"url\":\"https://vibestats.wolfai.dev/guides/how-to-build-ai-activity-heatmap\",\"isPartOf\":{\"@type\":\"WebSite\",\"name\":\"vibestats\",\"url\":\"https://vibestats.wolfai.dev/\"}},{\"@context\":\"https://schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"vibestats\",\"item\":\"https://vibestats.wolfai.dev/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Guides\",\"item\":\"https://vibestats.wolfai.dev/guides\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"How to build an AI activity heatmap\",\"item\":\"https://vibestats.wolfai.dev/guides/how-to-build-ai-activity-heatmap\"}]},{\"@context\":\"https://schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"What is the fastest way to approach how to build an ai activity heatmap?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Start with the relevant command, verify the output locally, then decide whether you need a share page, a wrapped summary, or a heatmap for communication.\"}},{\"@type\":\"Question\",\"name\":\"Do I need to upload raw conversations for these guides?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"No. vibestats works from local usage artifacts and only turns aggregate results into hosted pages when you explicitly publish them.\"}}]}]"])</script><script>self.__next_f.push([1,"5:[\"$\",\"main\",null,{\"className\":\"min-h-screen bg-[radial-gradient(circle_at_top_left,_rgba(253,186,116,0.22),_transparent_35%),linear-gradient(180deg,#fff9f1_0%,#fff1de_100%)] px-4 py-8 text-slate-900 md:px-8 md:py-12\",\"children\":[[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"$10\"}}],[\"$\",\"div\",null,{\"className\":\"mx-auto max-w-7xl\",\"children\":[[\"$\",\"header\",null,{\"className\":\"rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)] overflow-hidden\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex flex-wrap items-center gap-3 text-sm text-slate-500\",\"children\":[[\"$\",\"$L11\",null,{\"href\":\"/\",\"className\":\"transition hover:text-orange-700\",\"children\":\"vibestats\"}],[\"$\",\"span\",null,{\"children\":\"/\"}],[\"$\",\"$L11\",null,{\"href\":\"/guides\",\"className\":\"transition hover:text-orange-700\",\"children\":\"Guides\"}],[\"$\",\"span\",null,{\"children\":\"/\"}],[\"$\",\"span\",null,{\"className\":\"text-slate-700\",\"children\":\"How to build an AI activity heatmap\"}]]}],[\"$\",\"p\",null,{\"className\":\"mt-5 text-[0.72rem] font-semibold uppercase tracking-[0.28em] text-slate-500\",\"children\":\"Guide\"}],[\"$\",\"h1\",null,{\"className\":\"mt-4 max-w-5xl font-[family-name:var(--font-display)] text-5xl leading-none text-slate-950 md:text-7xl\",\"children\":\"How to build an AI activity heatmap\"}],[\"$\",\"p\",null,{\"className\":\"mt-5 max-w-3xl text-base leading-7 text-slate-600 md:text-lg\",\"children\":\"A practical guide to generating a GitHub-style AI coding activity heatmap with vibestats.\"}],[\"$\",\"div\",null,{\"className\":\"mt-6 grid gap-3 md:grid-cols-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"rounded-[1.3rem] border border-slate-200 bg-slate-50 px-4 py-4\",\"children\":[[\"$\",\"div\",null,{\"className\":\"text-[0.7rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":\"Intent\"}],[\"$\",\"div\",null,{\"className\":\"mt-2 text-sm leading-6 text-slate-700\",\"children\":\"Guide\"}]]}],[\"$\",\"div\",null,{\"className\":\"rounded-[1.3rem] border border-slate-200 bg-slate-50 px-4 py-4\",\"children\":[[\"$\",\"div\",null,{\"className\":\"text-[0.7rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":\"Focus\"}],[\"$\",\"div\",null,{\"className\":\"mt-2 text-sm leading-6 text-slate-700\",\"children\":\"How to build an AI activity heatmap is a practical workflow page for turning local AI coding usage into something readable and repeatable.\"}]]}],\"$L12\"]}]]}],\"$L13\",\"$L14\",null,\"$L15\",\"$L16\",\"$L17\"]}]]}]\n"])</script><script>self.__next_f.push([1,"12:[\"$\",\"div\",null,{\"className\":\"rounded-[1.3rem] border border-slate-200 bg-slate-50 px-4 py-4\",\"children\":[[\"$\",\"div\",null,{\"className\":\"text-[0.7rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":\"Next step\"}],[\"$\",\"div\",null,{\"className\":\"mt-2 text-sm leading-6 text-slate-700\",\"children\":[\"$\",\"$L11\",null,{\"href\":\"/docs/commands\",\"className\":\"text-slate-900 transition hover:text-orange-700\",\"children\":\"Open the command reference\"}]}]]}]\n"])</script><script>self.__next_f.push([1,"13:[\"$\",\"section\",null,{\"className\":\"mt-6 grid gap-4 lg:grid-cols-[0.8fr_1.2fr]\",\"children\":[[\"$\",\"article\",null,{\"className\":\"rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":\"Highlights\"}],[\"$\",\"ul\",null,{\"className\":\"mt-4 space-y-3 text-sm leading-7 text-slate-600\",\"children\":[[\"$\",\"li\",\"Heatmaps are best for rhythm and consistency\",{\"children\":\"Heatmaps are best for rhythm and consistency\"}],[\"$\",\"li\",\"Metric choice changes the story\",{\"children\":\"Metric choice changes the story\"}],[\"$\",\"li\",\"Hosted pages are easier to reuse in updates\",{\"children\":\"Hosted pages are easier to reuse in updates\"}]]}]]}],[\"$\",\"article\",null,{\"className\":\"rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":\"Relevant commands\"}],[\"$\",\"div\",null,{\"className\":\"mt-4 grid gap-3\",\"children\":[[\"$\",\"code\",\"npx vibestats --activity\",{\"className\":\"rounded-[1.2rem] bg-slate-100 px-4 py-4 text-sm text-slate-700\",\"children\":\"npx vibestats --activity\"}],[\"$\",\"code\",\"npx vibestats --activity --metric sessions\",{\"className\":\"rounded-[1.2rem] bg-slate-100 px-4 py-4 text-sm text-slate-700\",\"children\":\"npx vibestats --activity --metric sessions\"}],[\"$\",\"code\",\"npx vibestats --activity --share --days 365\",{\"className\":\"rounded-[1.2rem] bg-slate-100 px-4 py-4 text-sm text-slate-700\",\"children\":\"npx vibestats --activity --share --days 365\"}]]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"14:[\"$\",\"section\",null,{\"className\":\"mt-6\",\"children\":[\"$\",\"div\",null,{\"className\":\"grid gap-4 md:grid-cols-3\",\"children\":[[\"$\",\"article\",\"Generate the activity view\",{\"className\":\"rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":[\"Step \",1]}],[\"$\",\"h2\",null,{\"className\":\"mt-3 text-2xl font-semibold text-slate-950\",\"children\":\"Generate the activity view\"}],[\"$\",\"p\",null,{\"className\":\"mt-4 text-sm leading-7 text-slate-600\",\"children\":\"Run `npx vibestats --activity` to create the heatmap from aggregate local usage.\"}]]}],[\"$\",\"article\",\"Set the metric and window\",{\"className\":\"rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":[\"Step \",2]}],[\"$\",\"h2\",null,{\"className\":\"mt-3 text-2xl font-semibold text-slate-950\",\"children\":\"Set the metric and window\"}],[\"$\",\"p\",null,{\"className\":\"mt-4 text-sm leading-7 text-slate-600\",\"children\":\"Adjust the metric or day window so the heatmap matches the question you are trying to answer.\"}]]}],[\"$\",\"article\",\"Publish when the view is ready\",{\"className\":\"rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":[\"Step \",3]}],[\"$\",\"h2\",null,{\"className\":\"mt-3 text-2xl font-semibold text-slate-950\",\"children\":\"Publish when the view is ready\"}],[\"$\",\"p\",null,{\"className\":\"mt-4 text-sm leading-7 text-slate-600\",\"children\":\"Use the share flow when you want a hosted page or image-friendly version of the result.\"}]]}]]}]}]\n"])</script><script>self.__next_f.push([1,"15:[\"$\",\"section\",null,{\"className\":\"mt-6 grid gap-4 md:grid-cols-2\",\"children\":[[\"$\",\"article\",\"Why this guide exists\",{\"className\":\"rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"font-[family-name:var(--font-display)] text-3xl leading-none text-slate-950\",\"children\":\"Why this guide exists\"}],[\"$\",\"p\",null,{\"className\":\"mt-4 text-sm leading-7 text-slate-600\",\"children\":\"Most AI coding reporting problems are not about one missing command. They are about choosing the right surface: daily usage, wrapped summaries, activity heatmaps, cost views, or shareable aggregate pages.\"}]]}],[\"$\",\"article\",\"What to expect\",{\"className\":\"rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"font-[family-name:var(--font-display)] text-3xl leading-none text-slate-950\",\"children\":\"What to expect\"}],[\"$\",\"p\",null,{\"className\":\"mt-4 text-sm leading-7 text-slate-600\",\"children\":\"This guide stays focused on vibestats workflows and the pages already documented in the public command reference, so you can move from local data to a readable result quickly.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"16:[\"$\",\"section\",null,{\"className\":\"mt-6 rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":\"FAQ\"}],[\"$\",\"div\",null,{\"className\":\"mt-4 grid gap-4 md:grid-cols-2\",\"children\":[[\"$\",\"article\",\"What is the fastest way to approach how to build an ai activity heatmap?\",{\"className\":\"rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-lg font-semibold text-slate-950\",\"children\":\"What is the fastest way to approach how to build an ai activity heatmap?\"}],[\"$\",\"p\",null,{\"className\":\"mt-3 text-sm leading-7 text-slate-600\",\"children\":\"Start with the relevant command, verify the output locally, then decide whether you need a share page, a wrapped summary, or a heatmap for communication.\"}]]}],[\"$\",\"article\",\"Do I need to upload raw conversations for these guides?\",{\"className\":\"rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-lg font-semibold text-slate-950\",\"children\":\"Do I need to upload raw conversations for these guides?\"}],[\"$\",\"p\",null,{\"className\":\"mt-3 text-sm leading-7 text-slate-600\",\"children\":\"No. vibestats works from local usage artifacts and only turns aggregate results into hosted pages when you explicitly publish them.\"}]]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"17:[\"$\",\"section\",null,{\"className\":\"mt-6 rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center justify-between gap-4\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"p\",null,{\"className\":\"text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":\"Related pages\"}],[\"$\",\"h2\",null,{\"className\":\"mt-3 font-[family-name:var(--font-display)] text-3xl leading-none text-slate-950\",\"children\":\"Continue by intent\"}]]}],[\"$\",\"$L11\",null,{\"href\":\"/guides\",\"className\":\"text-sm font-medium text-slate-700 transition hover:text-orange-700\",\"children\":[\"View all \",\"guides\"]}]]}],[\"$\",\"div\",null,{\"className\":\"mt-5 grid gap-4 md:grid-cols-3\",\"children\":[[\"$\",\"$L11\",\"/features/ai-coding-activity-heatmap\",{\"href\":\"/features/ai-coding-activity-heatmap\",\"className\":\"rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5 text-sm leading-7 text-slate-600 transition hover:border-orange-300 hover:bg-white\",\"children\":[[\"$\",\"span\",null,{\"className\":\"block font-semibold text-slate-950\",\"children\":\"features ai-coding-activity-heatmap\"}],[\"$\",\"span\",null,{\"className\":\"mt-2 block\",\"children\":\"Open the related vibestats page and continue the workflow from there.\"}]]}],[\"$\",\"$L11\",\"/use-cases/weekly-reviews\",{\"href\":\"/use-cases/weekly-reviews\",\"className\":\"rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5 text-sm leading-7 text-slate-600 transition hover:border-orange-300 hover:bg-white\",\"children\":[[\"$\",\"span\",null,{\"className\":\"block font-semibold text-slate-950\",\"children\":\"use-cases weekly-reviews\"}],[\"$\",\"span\",null,{\"className\":\"mt-2 block\",\"children\":\"Open the related vibestats page and continue the workflow from there.\"}]]}],[\"$\",\"$L11\",\"/features/share-pages\",{\"href\":\"/features/share-pages\",\"className\":\"rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5 text-sm leading-7 text-slate-600 transition hover:border-orange-300 hover:bg-white\",\"children\":[[\"$\",\"span\",null,{\"className\":\"block font-semibold text-slate-950\",\"children\":\"features share-pages\"}],[\"$\",\"span\",null,{\"className\":\"mt-2 block\",\"children\":\"Open the related vibestats page and continue the workflow from there.\"}]]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"b:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n7:null\n"])</script><script>self.__next_f.push([1,"9:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"How to build an AI activity heatmap | vibestats\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"A practical guide to generating a GitHub-style AI coding activity heatmap with vibestats.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"application-name\",\"content\":\"vibestats\"}],[\"$\",\"meta\",\"3\",{\"name\":\"keywords\",\"content\":\"vibestats,Claude Code stats,Codex CLI stats,AI coding stats,AI coding analytics,Claude Code wrapped,Codex usage tracker,developer analytics,how to build AI activity heatmap,Claude Code activity heatmap guide,Codex heatmap guide\"}],[\"$\",\"link\",\"4\",{\"rel\":\"canonical\",\"href\":\"https://vibestats.wolfai.dev/guides/how-to-build-ai-activity-heatmap\"}],[\"$\",\"meta\",\"5\",{\"property\":\"og:title\",\"content\":\"How to build an AI activity heatmap | vibestats\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:description\",\"content\":\"A practical guide to generating a GitHub-style AI coding activity heatmap with vibestats.\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:url\",\"content\":\"https://vibestats.wolfai.dev/guides/how-to-build-ai-activity-heatmap\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:site_name\",\"content\":\"vibestats\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:locale\",\"content\":\"en_US\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"11\",{\"name\":\"twitter:card\",\"content\":\"summary\"}],[\"$\",\"meta\",\"12\",{\"name\":\"twitter:title\",\"content\":\"How to build an AI activity heatmap | vibestats\"}],[\"$\",\"meta\",\"13\",{\"name\":\"twitter:description\",\"content\":\"A practical guide to generating a GitHub-style AI coding activity heatmap with vibestats.\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"e:\"$9:metadata\"\n"])</script></body></html>
|
|
1
|
+
<!DOCTYPE html><!--bkF3quPLxz4vmu3191LYm--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/335de1248158d380.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-175b2f5685d7557b.js"/><script src="/_next/static/chunks/c476d598-9099ed8b975ae1d6.js" async=""></script><script src="/_next/static/chunks/498-74a3a367cb8442f0.js" async=""></script><script src="/_next/static/chunks/main-app-6619364ab1f13fb7.js" async=""></script><script src="/_next/static/chunks/app/layout-6ebd9b17af55ec02.js" async=""></script><script src="/_next/static/chunks/816-8960921093d57453.js" async=""></script><script src="/_next/static/chunks/app/guides/%5Bslug%5D/page-5d0587c1d5910e68.js" async=""></script><link rel="preload" href="https://analytics.wolfai.dev/wolf-analytics.min.js" as="script"/><title>How to build an AI activity heatmap | vibestats</title><meta name="description" content="A practical guide to generating a GitHub-style AI coding activity heatmap with vibestats."/><meta name="application-name" content="vibestats"/><meta name="keywords" content="vibestats,Claude Code stats,Codex CLI stats,AI coding stats,AI coding analytics,Claude Code wrapped,Codex usage tracker,developer analytics,how to build AI activity heatmap,Claude Code activity heatmap guide,Codex heatmap guide"/><link rel="canonical" href="https://vibestats.wolfai.dev/guides/how-to-build-ai-activity-heatmap"/><meta property="og:title" content="How to build an AI activity heatmap | vibestats"/><meta property="og:description" content="A practical guide to generating a GitHub-style AI coding activity heatmap with vibestats."/><meta property="og:url" content="https://vibestats.wolfai.dev/guides/how-to-build-ai-activity-heatmap"/><meta property="og:site_name" content="vibestats"/><meta property="og:locale" content="en_US"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary"/><meta name="twitter:title" content="How to build an AI activity heatmap | vibestats"/><meta name="twitter:description" content="A practical guide to generating a GitHub-style AI coding activity heatmap with vibestats."/><script>(self.__next_s=self.__next_s||[]).push([0,{"children":"window.WOLF_ANALYTICS_CONFIG = {\"apiUrl\":\"https://analapi.wolfai.dev\",\"projectApiKey\":\"wa_rMSm5mgj44W_9LzMsKCwwAipAtxPynp1tn4PbxN_Oa8\",\"mode\":\"intl\",\"sourceApp\":\"vibestats\"};","id":"wolf-analytics-config"}])</script><script>(self.__next_s=self.__next_s||[]).push(["https://analytics.wolfai.dev/wolf-analytics.min.js",{"id":"wolf-analytics-script"}])</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="antialiased min-h-screen bg-background text-foreground"><div hidden=""><!--$--><!--/$--></div><main class="min-h-screen bg-[radial-gradient(circle_at_top_left,_rgba(253,186,116,0.22),_transparent_35%),linear-gradient(180deg,#fff9f1_0%,#fff1de_100%)] px-4 py-8 text-slate-900 md:px-8 md:py-12"><script type="application/ld+json">[{"@context":"https://schema.org","@type":"WebPage","name":"How to build an AI activity heatmap","description":"A practical guide to generating a GitHub-style AI coding activity heatmap with vibestats.","url":"https://vibestats.wolfai.dev/guides/how-to-build-ai-activity-heatmap","isPartOf":{"@type":"WebSite","name":"vibestats","url":"https://vibestats.wolfai.dev/"}},{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"vibestats","item":"https://vibestats.wolfai.dev/"},{"@type":"ListItem","position":2,"name":"Guides","item":"https://vibestats.wolfai.dev/guides"},{"@type":"ListItem","position":3,"name":"How to build an AI activity heatmap","item":"https://vibestats.wolfai.dev/guides/how-to-build-ai-activity-heatmap"}]},{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"What is the fastest way to approach how to build an ai activity heatmap?","acceptedAnswer":{"@type":"Answer","text":"Start with the relevant command, verify the output locally, then decide whether you need a share page, a wrapped summary, or a heatmap for communication."}},{"@type":"Question","name":"Do I need to upload raw conversations for these guides?","acceptedAnswer":{"@type":"Answer","text":"No. vibestats works from local usage artifacts and only turns aggregate results into hosted pages when you explicitly publish them."}}]}]</script><div class="mx-auto max-w-7xl"><header class="rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)] overflow-hidden"><div class="flex flex-wrap items-center gap-3 text-sm text-slate-500"><a class="transition hover:text-orange-700" href="/">vibestats</a><span>/</span><a class="transition hover:text-orange-700" href="/guides">Guides</a><span>/</span><span class="text-slate-700">How to build an AI activity heatmap</span></div><p class="mt-5 text-[0.72rem] font-semibold uppercase tracking-[0.28em] text-slate-500">Guide</p><h1 class="mt-4 max-w-5xl font-[family-name:var(--font-display)] text-5xl leading-none text-slate-950 md:text-7xl">How to build an AI activity heatmap</h1><p class="mt-5 max-w-3xl text-base leading-7 text-slate-600 md:text-lg">A practical guide to generating a GitHub-style AI coding activity heatmap with vibestats.</p><div class="mt-6 grid gap-3 md:grid-cols-3"><div class="rounded-[1.3rem] border border-slate-200 bg-slate-50 px-4 py-4"><div class="text-[0.7rem] font-semibold uppercase tracking-[0.22em] text-slate-500">Intent</div><div class="mt-2 text-sm leading-6 text-slate-700">Guide</div></div><div class="rounded-[1.3rem] border border-slate-200 bg-slate-50 px-4 py-4"><div class="text-[0.7rem] font-semibold uppercase tracking-[0.22em] text-slate-500">Focus</div><div class="mt-2 text-sm leading-6 text-slate-700">How to build an AI activity heatmap is a practical workflow page for turning local AI coding usage into something readable and repeatable.</div></div><div class="rounded-[1.3rem] border border-slate-200 bg-slate-50 px-4 py-4"><div class="text-[0.7rem] font-semibold uppercase tracking-[0.22em] text-slate-500">Next step</div><div class="mt-2 text-sm leading-6 text-slate-700"><a class="text-slate-900 transition hover:text-orange-700" href="/docs/commands">Open the command reference</a></div></div></div></header><section class="mt-6 grid gap-4 lg:grid-cols-[0.8fr_1.2fr]"><article class="rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]"><p class="text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500">Highlights</p><ul class="mt-4 space-y-3 text-sm leading-7 text-slate-600"><li>Heatmaps are best for rhythm and consistency</li><li>Metric choice changes the story</li><li>Hosted pages are easier to reuse in updates</li></ul></article><article class="rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]"><p class="text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500">Relevant commands</p><div class="mt-4 grid gap-3"><code class="rounded-[1.2rem] bg-slate-100 px-4 py-4 text-sm text-slate-700">npx vibestats --activity</code><code class="rounded-[1.2rem] bg-slate-100 px-4 py-4 text-sm text-slate-700">npx vibestats --activity --metric sessions</code><code class="rounded-[1.2rem] bg-slate-100 px-4 py-4 text-sm text-slate-700">npx vibestats --activity --share --days 365</code></div></article></section><section class="mt-6"><div class="grid gap-4 md:grid-cols-3"><article class="rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]"><p class="text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500">Step <!-- -->1</p><h2 class="mt-3 text-2xl font-semibold text-slate-950">Generate the activity view</h2><p class="mt-4 text-sm leading-7 text-slate-600">Run `npx vibestats --activity` to create the heatmap from aggregate local usage.</p></article><article class="rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]"><p class="text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500">Step <!-- -->2</p><h2 class="mt-3 text-2xl font-semibold text-slate-950">Set the metric and window</h2><p class="mt-4 text-sm leading-7 text-slate-600">Adjust the metric or day window so the heatmap matches the question you are trying to answer.</p></article><article class="rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]"><p class="text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500">Step <!-- -->3</p><h2 class="mt-3 text-2xl font-semibold text-slate-950">Publish when the view is ready</h2><p class="mt-4 text-sm leading-7 text-slate-600">Use the share flow when you want a hosted page or image-friendly version of the result.</p></article></div></section><section class="mt-6 grid gap-4 md:grid-cols-2"><article class="rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]"><h2 class="font-[family-name:var(--font-display)] text-3xl leading-none text-slate-950">Why this guide exists</h2><p class="mt-4 text-sm leading-7 text-slate-600">Most AI coding reporting problems are not about one missing command. They are about choosing the right surface: daily usage, wrapped summaries, activity heatmaps, cost views, or shareable aggregate pages.</p></article><article class="rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]"><h2 class="font-[family-name:var(--font-display)] text-3xl leading-none text-slate-950">What to expect</h2><p class="mt-4 text-sm leading-7 text-slate-600">This guide stays focused on vibestats workflows and the pages already documented in the public command reference, so you can move from local data to a readable result quickly.</p></article></section><section class="mt-6 rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]"><p class="text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500">FAQ</p><div class="mt-4 grid gap-4 md:grid-cols-2"><article class="rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5"><h2 class="text-lg font-semibold text-slate-950">What is the fastest way to approach how to build an ai activity heatmap?</h2><p class="mt-3 text-sm leading-7 text-slate-600">Start with the relevant command, verify the output locally, then decide whether you need a share page, a wrapped summary, or a heatmap for communication.</p></article><article class="rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5"><h2 class="text-lg font-semibold text-slate-950">Do I need to upload raw conversations for these guides?</h2><p class="mt-3 text-sm leading-7 text-slate-600">No. vibestats works from local usage artifacts and only turns aggregate results into hosted pages when you explicitly publish them.</p></article></div></section><section class="mt-6 rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]"><div class="flex items-center justify-between gap-4"><div><p class="text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500">Related pages</p><h2 class="mt-3 font-[family-name:var(--font-display)] text-3xl leading-none text-slate-950">Continue by intent</h2></div><a class="text-sm font-medium text-slate-700 transition hover:text-orange-700" href="/guides">View all <!-- -->guides</a></div><div class="mt-5 grid gap-4 md:grid-cols-3"><a class="rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5 text-sm leading-7 text-slate-600 transition hover:border-orange-300 hover:bg-white" href="/features/ai-coding-activity-heatmap"><span class="block font-semibold text-slate-950">features ai-coding-activity-heatmap</span><span class="mt-2 block">Open the related vibestats page and continue the workflow from there.</span></a><a class="rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5 text-sm leading-7 text-slate-600 transition hover:border-orange-300 hover:bg-white" href="/use-cases/weekly-reviews"><span class="block font-semibold text-slate-950">use-cases weekly-reviews</span><span class="mt-2 block">Open the related vibestats page and continue the workflow from there.</span></a><a class="rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5 text-sm leading-7 text-slate-600 transition hover:border-orange-300 hover:bg-white" href="/features/share-pages"><span class="block font-semibold text-slate-950">features share-pages</span><span class="mt-2 block">Open the related vibestats page and continue the workflow from there.</span></a></div></section></div></main><!--$--><!--/$--><script src="/_next/static/chunks/webpack-175b2f5685d7557b.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[7437,[\"177\",\"static/chunks/app/layout-6ebd9b17af55ec02.js\"],\"\"]\n3:I[5965,[],\"\"]\n4:I[3609,[],\"\"]\n6:I[496,[],\"OutletBoundary\"]\n8:I[3737,[],\"AsyncMetadataOutlet\"]\na:I[496,[],\"ViewportBoundary\"]\nc:I[496,[],\"MetadataBoundary\"]\nd:\"$Sreact.suspense\"\nf:I[2207,[],\"\"]\n:HL[\"/_next/static/css/335de1248158d380.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"bkF3quPLxz4vmu3191LYm\",\"p\":\"\",\"c\":[\"\",\"guides\",\"how-to-build-ai-activity-heatmap\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"guides\",{\"children\":[[\"slug\",\"how-to-build-ai-activity-heatmap\",\"d\"],{\"children\":[\"__PAGE__\",{}]}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/335de1248158d380.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"$L2\",null,{\"id\":\"wolf-analytics-config\",\"strategy\":\"beforeInteractive\",\"children\":\"window.WOLF_ANALYTICS_CONFIG = {\\\"apiUrl\\\":\\\"https://analapi.wolfai.dev\\\",\\\"projectApiKey\\\":\\\"wa_rMSm5mgj44W_9LzMsKCwwAipAtxPynp1tn4PbxN_Oa8\\\",\\\"mode\\\":\\\"intl\\\",\\\"sourceApp\\\":\\\"vibestats\\\"};\"}],[\"$\",\"$L2\",null,{\"id\":\"wolf-analytics-script\",\"src\":\"https://analytics.wolfai.dev/wolf-analytics.min.js\",\"strategy\":\"beforeInteractive\"}]]}],[\"$\",\"body\",null,{\"className\":\"antialiased min-h-screen bg-background text-foreground\",\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],{\"children\":[\"guides\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"slug\",\"how-to-build-ai-activity-heatmap\",\"d\"],[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[\"$L5\",null,[\"$\",\"$L6\",null,{\"children\":[\"$L7\",[\"$\",\"$L8\",null,{\"promise\":\"$@9\"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],null],[\"$\",\"$Lc\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$d\",null,{\"fallback\":null,\"children\":\"$Le\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$f\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"11:I[4816,[\"816\",\"static/chunks/816-8960921093d57453.js\",\"54\",\"static/chunks/app/guides/%5Bslug%5D/page-5d0587c1d5910e68.js\"],\"\"]\n10:T590,"])</script><script>self.__next_f.push([1,"[{\"@context\":\"https://schema.org\",\"@type\":\"WebPage\",\"name\":\"How to build an AI activity heatmap\",\"description\":\"A practical guide to generating a GitHub-style AI coding activity heatmap with vibestats.\",\"url\":\"https://vibestats.wolfai.dev/guides/how-to-build-ai-activity-heatmap\",\"isPartOf\":{\"@type\":\"WebSite\",\"name\":\"vibestats\",\"url\":\"https://vibestats.wolfai.dev/\"}},{\"@context\":\"https://schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"vibestats\",\"item\":\"https://vibestats.wolfai.dev/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Guides\",\"item\":\"https://vibestats.wolfai.dev/guides\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"How to build an AI activity heatmap\",\"item\":\"https://vibestats.wolfai.dev/guides/how-to-build-ai-activity-heatmap\"}]},{\"@context\":\"https://schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"What is the fastest way to approach how to build an ai activity heatmap?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Start with the relevant command, verify the output locally, then decide whether you need a share page, a wrapped summary, or a heatmap for communication.\"}},{\"@type\":\"Question\",\"name\":\"Do I need to upload raw conversations for these guides?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"No. vibestats works from local usage artifacts and only turns aggregate results into hosted pages when you explicitly publish them.\"}}]}]"])</script><script>self.__next_f.push([1,"5:[\"$\",\"main\",null,{\"className\":\"min-h-screen bg-[radial-gradient(circle_at_top_left,_rgba(253,186,116,0.22),_transparent_35%),linear-gradient(180deg,#fff9f1_0%,#fff1de_100%)] px-4 py-8 text-slate-900 md:px-8 md:py-12\",\"children\":[[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"$10\"}}],[\"$\",\"div\",null,{\"className\":\"mx-auto max-w-7xl\",\"children\":[[\"$\",\"header\",null,{\"className\":\"rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)] overflow-hidden\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex flex-wrap items-center gap-3 text-sm text-slate-500\",\"children\":[[\"$\",\"$L11\",null,{\"href\":\"/\",\"className\":\"transition hover:text-orange-700\",\"children\":\"vibestats\"}],[\"$\",\"span\",null,{\"children\":\"/\"}],[\"$\",\"$L11\",null,{\"href\":\"/guides\",\"className\":\"transition hover:text-orange-700\",\"children\":\"Guides\"}],[\"$\",\"span\",null,{\"children\":\"/\"}],[\"$\",\"span\",null,{\"className\":\"text-slate-700\",\"children\":\"How to build an AI activity heatmap\"}]]}],[\"$\",\"p\",null,{\"className\":\"mt-5 text-[0.72rem] font-semibold uppercase tracking-[0.28em] text-slate-500\",\"children\":\"Guide\"}],[\"$\",\"h1\",null,{\"className\":\"mt-4 max-w-5xl font-[family-name:var(--font-display)] text-5xl leading-none text-slate-950 md:text-7xl\",\"children\":\"How to build an AI activity heatmap\"}],[\"$\",\"p\",null,{\"className\":\"mt-5 max-w-3xl text-base leading-7 text-slate-600 md:text-lg\",\"children\":\"A practical guide to generating a GitHub-style AI coding activity heatmap with vibestats.\"}],[\"$\",\"div\",null,{\"className\":\"mt-6 grid gap-3 md:grid-cols-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"rounded-[1.3rem] border border-slate-200 bg-slate-50 px-4 py-4\",\"children\":[[\"$\",\"div\",null,{\"className\":\"text-[0.7rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":\"Intent\"}],[\"$\",\"div\",null,{\"className\":\"mt-2 text-sm leading-6 text-slate-700\",\"children\":\"Guide\"}]]}],[\"$\",\"div\",null,{\"className\":\"rounded-[1.3rem] border border-slate-200 bg-slate-50 px-4 py-4\",\"children\":[[\"$\",\"div\",null,{\"className\":\"text-[0.7rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":\"Focus\"}],[\"$\",\"div\",null,{\"className\":\"mt-2 text-sm leading-6 text-slate-700\",\"children\":\"How to build an AI activity heatmap is a practical workflow page for turning local AI coding usage into something readable and repeatable.\"}]]}],\"$L12\"]}]]}],\"$L13\",\"$L14\",null,\"$L15\",\"$L16\",\"$L17\"]}]]}]\n"])</script><script>self.__next_f.push([1,"12:[\"$\",\"div\",null,{\"className\":\"rounded-[1.3rem] border border-slate-200 bg-slate-50 px-4 py-4\",\"children\":[[\"$\",\"div\",null,{\"className\":\"text-[0.7rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":\"Next step\"}],[\"$\",\"div\",null,{\"className\":\"mt-2 text-sm leading-6 text-slate-700\",\"children\":[\"$\",\"$L11\",null,{\"href\":\"/docs/commands\",\"className\":\"text-slate-900 transition hover:text-orange-700\",\"children\":\"Open the command reference\"}]}]]}]\n"])</script><script>self.__next_f.push([1,"13:[\"$\",\"section\",null,{\"className\":\"mt-6 grid gap-4 lg:grid-cols-[0.8fr_1.2fr]\",\"children\":[[\"$\",\"article\",null,{\"className\":\"rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":\"Highlights\"}],[\"$\",\"ul\",null,{\"className\":\"mt-4 space-y-3 text-sm leading-7 text-slate-600\",\"children\":[[\"$\",\"li\",\"Heatmaps are best for rhythm and consistency\",{\"children\":\"Heatmaps are best for rhythm and consistency\"}],[\"$\",\"li\",\"Metric choice changes the story\",{\"children\":\"Metric choice changes the story\"}],[\"$\",\"li\",\"Hosted pages are easier to reuse in updates\",{\"children\":\"Hosted pages are easier to reuse in updates\"}]]}]]}],[\"$\",\"article\",null,{\"className\":\"rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":\"Relevant commands\"}],[\"$\",\"div\",null,{\"className\":\"mt-4 grid gap-3\",\"children\":[[\"$\",\"code\",\"npx vibestats --activity\",{\"className\":\"rounded-[1.2rem] bg-slate-100 px-4 py-4 text-sm text-slate-700\",\"children\":\"npx vibestats --activity\"}],[\"$\",\"code\",\"npx vibestats --activity --metric sessions\",{\"className\":\"rounded-[1.2rem] bg-slate-100 px-4 py-4 text-sm text-slate-700\",\"children\":\"npx vibestats --activity --metric sessions\"}],[\"$\",\"code\",\"npx vibestats --activity --share --days 365\",{\"className\":\"rounded-[1.2rem] bg-slate-100 px-4 py-4 text-sm text-slate-700\",\"children\":\"npx vibestats --activity --share --days 365\"}]]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"14:[\"$\",\"section\",null,{\"className\":\"mt-6\",\"children\":[\"$\",\"div\",null,{\"className\":\"grid gap-4 md:grid-cols-3\",\"children\":[[\"$\",\"article\",\"Generate the activity view\",{\"className\":\"rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":[\"Step \",1]}],[\"$\",\"h2\",null,{\"className\":\"mt-3 text-2xl font-semibold text-slate-950\",\"children\":\"Generate the activity view\"}],[\"$\",\"p\",null,{\"className\":\"mt-4 text-sm leading-7 text-slate-600\",\"children\":\"Run `npx vibestats --activity` to create the heatmap from aggregate local usage.\"}]]}],[\"$\",\"article\",\"Set the metric and window\",{\"className\":\"rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":[\"Step \",2]}],[\"$\",\"h2\",null,{\"className\":\"mt-3 text-2xl font-semibold text-slate-950\",\"children\":\"Set the metric and window\"}],[\"$\",\"p\",null,{\"className\":\"mt-4 text-sm leading-7 text-slate-600\",\"children\":\"Adjust the metric or day window so the heatmap matches the question you are trying to answer.\"}]]}],[\"$\",\"article\",\"Publish when the view is ready\",{\"className\":\"rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":[\"Step \",3]}],[\"$\",\"h2\",null,{\"className\":\"mt-3 text-2xl font-semibold text-slate-950\",\"children\":\"Publish when the view is ready\"}],[\"$\",\"p\",null,{\"className\":\"mt-4 text-sm leading-7 text-slate-600\",\"children\":\"Use the share flow when you want a hosted page or image-friendly version of the result.\"}]]}]]}]}]\n"])</script><script>self.__next_f.push([1,"15:[\"$\",\"section\",null,{\"className\":\"mt-6 grid gap-4 md:grid-cols-2\",\"children\":[[\"$\",\"article\",\"Why this guide exists\",{\"className\":\"rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"font-[family-name:var(--font-display)] text-3xl leading-none text-slate-950\",\"children\":\"Why this guide exists\"}],[\"$\",\"p\",null,{\"className\":\"mt-4 text-sm leading-7 text-slate-600\",\"children\":\"Most AI coding reporting problems are not about one missing command. They are about choosing the right surface: daily usage, wrapped summaries, activity heatmaps, cost views, or shareable aggregate pages.\"}]]}],[\"$\",\"article\",\"What to expect\",{\"className\":\"rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"font-[family-name:var(--font-display)] text-3xl leading-none text-slate-950\",\"children\":\"What to expect\"}],[\"$\",\"p\",null,{\"className\":\"mt-4 text-sm leading-7 text-slate-600\",\"children\":\"This guide stays focused on vibestats workflows and the pages already documented in the public command reference, so you can move from local data to a readable result quickly.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"16:[\"$\",\"section\",null,{\"className\":\"mt-6 rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":\"FAQ\"}],[\"$\",\"div\",null,{\"className\":\"mt-4 grid gap-4 md:grid-cols-2\",\"children\":[[\"$\",\"article\",\"What is the fastest way to approach how to build an ai activity heatmap?\",{\"className\":\"rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-lg font-semibold text-slate-950\",\"children\":\"What is the fastest way to approach how to build an ai activity heatmap?\"}],[\"$\",\"p\",null,{\"className\":\"mt-3 text-sm leading-7 text-slate-600\",\"children\":\"Start with the relevant command, verify the output locally, then decide whether you need a share page, a wrapped summary, or a heatmap for communication.\"}]]}],[\"$\",\"article\",\"Do I need to upload raw conversations for these guides?\",{\"className\":\"rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-lg font-semibold text-slate-950\",\"children\":\"Do I need to upload raw conversations for these guides?\"}],[\"$\",\"p\",null,{\"className\":\"mt-3 text-sm leading-7 text-slate-600\",\"children\":\"No. vibestats works from local usage artifacts and only turns aggregate results into hosted pages when you explicitly publish them.\"}]]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"17:[\"$\",\"section\",null,{\"className\":\"mt-6 rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center justify-between gap-4\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"p\",null,{\"className\":\"text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":\"Related pages\"}],[\"$\",\"h2\",null,{\"className\":\"mt-3 font-[family-name:var(--font-display)] text-3xl leading-none text-slate-950\",\"children\":\"Continue by intent\"}]]}],[\"$\",\"$L11\",null,{\"href\":\"/guides\",\"className\":\"text-sm font-medium text-slate-700 transition hover:text-orange-700\",\"children\":[\"View all \",\"guides\"]}]]}],[\"$\",\"div\",null,{\"className\":\"mt-5 grid gap-4 md:grid-cols-3\",\"children\":[[\"$\",\"$L11\",\"/features/ai-coding-activity-heatmap\",{\"href\":\"/features/ai-coding-activity-heatmap\",\"className\":\"rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5 text-sm leading-7 text-slate-600 transition hover:border-orange-300 hover:bg-white\",\"children\":[[\"$\",\"span\",null,{\"className\":\"block font-semibold text-slate-950\",\"children\":\"features ai-coding-activity-heatmap\"}],[\"$\",\"span\",null,{\"className\":\"mt-2 block\",\"children\":\"Open the related vibestats page and continue the workflow from there.\"}]]}],[\"$\",\"$L11\",\"/use-cases/weekly-reviews\",{\"href\":\"/use-cases/weekly-reviews\",\"className\":\"rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5 text-sm leading-7 text-slate-600 transition hover:border-orange-300 hover:bg-white\",\"children\":[[\"$\",\"span\",null,{\"className\":\"block font-semibold text-slate-950\",\"children\":\"use-cases weekly-reviews\"}],[\"$\",\"span\",null,{\"className\":\"mt-2 block\",\"children\":\"Open the related vibestats page and continue the workflow from there.\"}]]}],[\"$\",\"$L11\",\"/features/share-pages\",{\"href\":\"/features/share-pages\",\"className\":\"rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5 text-sm leading-7 text-slate-600 transition hover:border-orange-300 hover:bg-white\",\"children\":[[\"$\",\"span\",null,{\"className\":\"block font-semibold text-slate-950\",\"children\":\"features share-pages\"}],[\"$\",\"span\",null,{\"className\":\"mt-2 block\",\"children\":\"Open the related vibestats page and continue the workflow from there.\"}]]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"b:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n7:null\n"])</script><script>self.__next_f.push([1,"9:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"How to build an AI activity heatmap | vibestats\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"A practical guide to generating a GitHub-style AI coding activity heatmap with vibestats.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"application-name\",\"content\":\"vibestats\"}],[\"$\",\"meta\",\"3\",{\"name\":\"keywords\",\"content\":\"vibestats,Claude Code stats,Codex CLI stats,AI coding stats,AI coding analytics,Claude Code wrapped,Codex usage tracker,developer analytics,how to build AI activity heatmap,Claude Code activity heatmap guide,Codex heatmap guide\"}],[\"$\",\"link\",\"4\",{\"rel\":\"canonical\",\"href\":\"https://vibestats.wolfai.dev/guides/how-to-build-ai-activity-heatmap\"}],[\"$\",\"meta\",\"5\",{\"property\":\"og:title\",\"content\":\"How to build an AI activity heatmap | vibestats\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:description\",\"content\":\"A practical guide to generating a GitHub-style AI coding activity heatmap with vibestats.\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:url\",\"content\":\"https://vibestats.wolfai.dev/guides/how-to-build-ai-activity-heatmap\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:site_name\",\"content\":\"vibestats\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:locale\",\"content\":\"en_US\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"11\",{\"name\":\"twitter:card\",\"content\":\"summary\"}],[\"$\",\"meta\",\"12\",{\"name\":\"twitter:title\",\"content\":\"How to build an AI activity heatmap | vibestats\"}],[\"$\",\"meta\",\"13\",{\"name\":\"twitter:description\",\"content\":\"A practical guide to generating a GitHub-style AI coding activity heatmap with vibestats.\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"e:\"$9:metadata\"\n"])</script></body></html>
|
|
@@ -9,7 +9,7 @@ c:I[496,[],"MetadataBoundary"]
|
|
|
9
9
|
d:"$Sreact.suspense"
|
|
10
10
|
f:I[2207,[],""]
|
|
11
11
|
:HL["/_next/static/css/335de1248158d380.css","style"]
|
|
12
|
-
0:{"P":null,"b":"
|
|
12
|
+
0:{"P":null,"b":"bkF3quPLxz4vmu3191LYm","p":"","c":["","guides","how-to-build-ai-activity-heatmap"],"i":false,"f":[[["",{"children":["guides",{"children":[["slug","how-to-build-ai-activity-heatmap","d"],{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/335de1248158d380.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":[["$","head",null,{"children":[["$","$L2",null,{"id":"wolf-analytics-config","strategy":"beforeInteractive","children":"window.WOLF_ANALYTICS_CONFIG = {\"apiUrl\":\"https://analapi.wolfai.dev\",\"projectApiKey\":\"wa_rMSm5mgj44W_9LzMsKCwwAipAtxPynp1tn4PbxN_Oa8\",\"mode\":\"intl\",\"sourceApp\":\"vibestats\"};"}],["$","$L2",null,{"id":"wolf-analytics-script","src":"https://analytics.wolfai.dev/wolf-analytics.min.js","strategy":"beforeInteractive"}]]}],["$","body",null,{"className":"antialiased min-h-screen bg-background text-foreground","children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]]}],{"children":["guides",["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["slug","how-to-build-ai-activity-heatmap","d"],["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":["$L5",null,["$","$L6",null,{"children":["$L7",["$","$L8",null,{"promise":"$@9"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$La",null,{"children":"$Lb"}],null],["$","$Lc",null,{"children":["$","div",null,{"hidden":true,"children":["$","$d",null,{"fallback":null,"children":"$Le"}]}]}]]}],false]],"m":"$undefined","G":["$f",[]],"s":false,"S":true}
|
|
13
13
|
11:I[4816,["816","static/chunks/816-8960921093d57453.js","54","static/chunks/app/guides/%5Bslug%5D/page-5d0587c1d5910e68.js"],""]
|
|
14
14
|
10:T590,[{"@context":"https://schema.org","@type":"WebPage","name":"How to build an AI activity heatmap","description":"A practical guide to generating a GitHub-style AI coding activity heatmap with vibestats.","url":"https://vibestats.wolfai.dev/guides/how-to-build-ai-activity-heatmap","isPartOf":{"@type":"WebSite","name":"vibestats","url":"https://vibestats.wolfai.dev/"}},{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"vibestats","item":"https://vibestats.wolfai.dev/"},{"@type":"ListItem","position":2,"name":"Guides","item":"https://vibestats.wolfai.dev/guides"},{"@type":"ListItem","position":3,"name":"How to build an AI activity heatmap","item":"https://vibestats.wolfai.dev/guides/how-to-build-ai-activity-heatmap"}]},{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"What is the fastest way to approach how to build an ai activity heatmap?","acceptedAnswer":{"@type":"Answer","text":"Start with the relevant command, verify the output locally, then decide whether you need a share page, a wrapped summary, or a heatmap for communication."}},{"@type":"Question","name":"Do I need to upload raw conversations for these guides?","acceptedAnswer":{"@type":"Answer","text":"No. vibestats works from local usage artifacts and only turns aggregate results into hosted pages when you explicitly publish them."}}]}]5:["$","main",null,{"className":"min-h-screen bg-[radial-gradient(circle_at_top_left,_rgba(253,186,116,0.22),_transparent_35%),linear-gradient(180deg,#fff9f1_0%,#fff1de_100%)] px-4 py-8 text-slate-900 md:px-8 md:py-12","children":[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"$10"}}],["$","div",null,{"className":"mx-auto max-w-7xl","children":[["$","header",null,{"className":"rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)] overflow-hidden","children":[["$","div",null,{"className":"flex flex-wrap items-center gap-3 text-sm text-slate-500","children":[["$","$L11",null,{"href":"/","className":"transition hover:text-orange-700","children":"vibestats"}],["$","span",null,{"children":"/"}],["$","$L11",null,{"href":"/guides","className":"transition hover:text-orange-700","children":"Guides"}],["$","span",null,{"children":"/"}],["$","span",null,{"className":"text-slate-700","children":"How to build an AI activity heatmap"}]]}],["$","p",null,{"className":"mt-5 text-[0.72rem] font-semibold uppercase tracking-[0.28em] text-slate-500","children":"Guide"}],["$","h1",null,{"className":"mt-4 max-w-5xl font-[family-name:var(--font-display)] text-5xl leading-none text-slate-950 md:text-7xl","children":"How to build an AI activity heatmap"}],["$","p",null,{"className":"mt-5 max-w-3xl text-base leading-7 text-slate-600 md:text-lg","children":"A practical guide to generating a GitHub-style AI coding activity heatmap with vibestats."}],["$","div",null,{"className":"mt-6 grid gap-3 md:grid-cols-3","children":[["$","div",null,{"className":"rounded-[1.3rem] border border-slate-200 bg-slate-50 px-4 py-4","children":[["$","div",null,{"className":"text-[0.7rem] font-semibold uppercase tracking-[0.22em] text-slate-500","children":"Intent"}],["$","div",null,{"className":"mt-2 text-sm leading-6 text-slate-700","children":"Guide"}]]}],["$","div",null,{"className":"rounded-[1.3rem] border border-slate-200 bg-slate-50 px-4 py-4","children":[["$","div",null,{"className":"text-[0.7rem] font-semibold uppercase tracking-[0.22em] text-slate-500","children":"Focus"}],["$","div",null,{"className":"mt-2 text-sm leading-6 text-slate-700","children":"How to build an AI activity heatmap is a practical workflow page for turning local AI coding usage into something readable and repeatable."}]]}],"$L12"]}]]}],"$L13","$L14",null,"$L15","$L16","$L17"]}]]}]
|
|
15
15
|
12:["$","div",null,{"className":"rounded-[1.3rem] border border-slate-200 bg-slate-50 px-4 py-4","children":[["$","div",null,{"className":"text-[0.7rem] font-semibold uppercase tracking-[0.22em] text-slate-500","children":"Next step"}],["$","div",null,{"className":"mt-2 text-sm leading-6 text-slate-700","children":["$","$L11",null,{"href":"/docs/commands","className":"text-slate-900 transition hover:text-orange-700","children":"Open the command reference"}]}]]}]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><!--3pcP_Y7gHe02EnmTXxc9b--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/335de1248158d380.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-175b2f5685d7557b.js"/><script src="/_next/static/chunks/c476d598-9099ed8b975ae1d6.js" async=""></script><script src="/_next/static/chunks/498-74a3a367cb8442f0.js" async=""></script><script src="/_next/static/chunks/main-app-6619364ab1f13fb7.js" async=""></script><script src="/_next/static/chunks/app/layout-6ebd9b17af55ec02.js" async=""></script><script src="/_next/static/chunks/816-8960921093d57453.js" async=""></script><script src="/_next/static/chunks/app/guides/%5Bslug%5D/page-5d0587c1d5910e68.js" async=""></script><link rel="preload" href="https://analytics.wolfai.dev/wolf-analytics.min.js" as="script"/><title>How to compare model usage | vibestats</title><meta name="description" content="A practical guide to comparing AI model usage in vibestats across reporting windows and source scopes."/><meta name="application-name" content="vibestats"/><meta name="keywords" content="vibestats,Claude Code stats,Codex CLI stats,AI coding stats,AI coding analytics,Claude Code wrapped,Codex usage tracker,developer analytics,how to compare model usage,AI model usage guide,Claude and Codex model comparison"/><link rel="canonical" href="https://vibestats.wolfai.dev/guides/how-to-compare-model-usage"/><meta property="og:title" content="How to compare model usage | vibestats"/><meta property="og:description" content="A practical guide to comparing AI model usage in vibestats across reporting windows and source scopes."/><meta property="og:url" content="https://vibestats.wolfai.dev/guides/how-to-compare-model-usage"/><meta property="og:site_name" content="vibestats"/><meta property="og:locale" content="en_US"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary"/><meta name="twitter:title" content="How to compare model usage | vibestats"/><meta name="twitter:description" content="A practical guide to comparing AI model usage in vibestats across reporting windows and source scopes."/><script>(self.__next_s=self.__next_s||[]).push([0,{"children":"window.WOLF_ANALYTICS_CONFIG = {\"apiUrl\":\"https://analapi.wolfai.dev\",\"projectApiKey\":\"wa_rMSm5mgj44W_9LzMsKCwwAipAtxPynp1tn4PbxN_Oa8\",\"mode\":\"intl\",\"sourceApp\":\"vibestats\"};","id":"wolf-analytics-config"}])</script><script>(self.__next_s=self.__next_s||[]).push(["https://analytics.wolfai.dev/wolf-analytics.min.js",{"id":"wolf-analytics-script"}])</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="antialiased min-h-screen bg-background text-foreground"><div hidden=""><!--$--><!--/$--></div><main class="min-h-screen bg-[radial-gradient(circle_at_top_left,_rgba(253,186,116,0.22),_transparent_35%),linear-gradient(180deg,#fff9f1_0%,#fff1de_100%)] px-4 py-8 text-slate-900 md:px-8 md:py-12"><script type="application/ld+json">[{"@context":"https://schema.org","@type":"WebPage","name":"How to compare model usage","description":"A practical guide to comparing AI model usage in vibestats across reporting windows and source scopes.","url":"https://vibestats.wolfai.dev/guides/how-to-compare-model-usage","isPartOf":{"@type":"WebSite","name":"vibestats","url":"https://vibestats.wolfai.dev/"}},{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"vibestats","item":"https://vibestats.wolfai.dev/"},{"@type":"ListItem","position":2,"name":"Guides","item":"https://vibestats.wolfai.dev/guides"},{"@type":"ListItem","position":3,"name":"How to compare model usage","item":"https://vibestats.wolfai.dev/guides/how-to-compare-model-usage"}]},{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"What is the fastest way to approach how to compare model usage?","acceptedAnswer":{"@type":"Answer","text":"Start with the relevant command, verify the output locally, then decide whether you need a share page, a wrapped summary, or a heatmap for communication."}},{"@type":"Question","name":"Do I need to upload raw conversations for these guides?","acceptedAnswer":{"@type":"Answer","text":"No. vibestats works from local usage artifacts and only turns aggregate results into hosted pages when you explicitly publish them."}}]}]</script><div class="mx-auto max-w-7xl"><header class="rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)] overflow-hidden"><div class="flex flex-wrap items-center gap-3 text-sm text-slate-500"><a class="transition hover:text-orange-700" href="/">vibestats</a><span>/</span><a class="transition hover:text-orange-700" href="/guides">Guides</a><span>/</span><span class="text-slate-700">How to compare model usage</span></div><p class="mt-5 text-[0.72rem] font-semibold uppercase tracking-[0.28em] text-slate-500">Guide</p><h1 class="mt-4 max-w-5xl font-[family-name:var(--font-display)] text-5xl leading-none text-slate-950 md:text-7xl">How to compare model usage</h1><p class="mt-5 max-w-3xl text-base leading-7 text-slate-600 md:text-lg">A practical guide to comparing AI model usage in vibestats across reporting windows and source scopes.</p><div class="mt-6 grid gap-3 md:grid-cols-3"><div class="rounded-[1.3rem] border border-slate-200 bg-slate-50 px-4 py-4"><div class="text-[0.7rem] font-semibold uppercase tracking-[0.22em] text-slate-500">Intent</div><div class="mt-2 text-sm leading-6 text-slate-700">Guide</div></div><div class="rounded-[1.3rem] border border-slate-200 bg-slate-50 px-4 py-4"><div class="text-[0.7rem] font-semibold uppercase tracking-[0.22em] text-slate-500">Focus</div><div class="mt-2 text-sm leading-6 text-slate-700">How to compare model usage is a practical workflow page for turning local AI coding usage into something readable and repeatable.</div></div><div class="rounded-[1.3rem] border border-slate-200 bg-slate-50 px-4 py-4"><div class="text-[0.7rem] font-semibold uppercase tracking-[0.22em] text-slate-500">Next step</div><div class="mt-2 text-sm leading-6 text-slate-700"><a class="text-slate-900 transition hover:text-orange-700" href="/docs/commands">Open the command reference</a></div></div></div></header><section class="mt-6 grid gap-4 lg:grid-cols-[0.8fr_1.2fr]"><article class="rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]"><p class="text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500">Highlights</p><ul class="mt-4 space-y-3 text-sm leading-7 text-slate-600"><li>Stable windows matter more than perfect totals</li><li>Model share is easier to read when grouped directly</li><li>Source context helps interpret model shifts</li></ul></article><article class="rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]"><p class="text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500">Relevant commands</p><div class="mt-4 grid gap-3"><code class="rounded-[1.2rem] bg-slate-100 px-4 py-4 text-sm text-slate-700">npx vibestats --model</code><code class="rounded-[1.2rem] bg-slate-100 px-4 py-4 text-sm text-slate-700">npx vibestats --since 2026-01-01 --until 2026-01-31 --model</code><code class="rounded-[1.2rem] bg-slate-100 px-4 py-4 text-sm text-slate-700">npx vibestats all --model</code></div></article></section><section class="mt-6"><div class="grid gap-4 md:grid-cols-3"><article class="rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]"><p class="text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500">Step <!-- -->1</p><h2 class="mt-3 text-2xl font-semibold text-slate-950">Switch to model grouping</h2><p class="mt-4 text-sm leading-7 text-slate-600">Use the model report shape so the output groups by model instead of by day or month.</p></article><article class="rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]"><p class="text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500">Step <!-- -->2</p><h2 class="mt-3 text-2xl font-semibold text-slate-950">Keep the date window stable</h2><p class="mt-4 text-sm leading-7 text-slate-600">Use a clear date range so the comparison reflects model behavior and not a moving reporting window.</p></article><article class="rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]"><p class="text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500">Step <!-- -->3</p><h2 class="mt-3 text-2xl font-semibold text-slate-950">Add cost and source context</h2><p class="mt-4 text-sm leading-7 text-slate-600">Check whether model share also changes cost shape or differs between Claude-compatible and Codex usage.</p></article></div></section><section class="mt-6 grid gap-4 md:grid-cols-2"><article class="rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]"><h2 class="font-[family-name:var(--font-display)] text-3xl leading-none text-slate-950">Why this guide exists</h2><p class="mt-4 text-sm leading-7 text-slate-600">Most AI coding reporting problems are not about one missing command. They are about choosing the right surface: daily usage, wrapped summaries, activity heatmaps, cost views, or shareable aggregate pages.</p></article><article class="rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]"><h2 class="font-[family-name:var(--font-display)] text-3xl leading-none text-slate-950">What to expect</h2><p class="mt-4 text-sm leading-7 text-slate-600">This guide stays focused on vibestats workflows and the pages already documented in the public command reference, so you can move from local data to a readable result quickly.</p></article></section><section class="mt-6 rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]"><p class="text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500">FAQ</p><div class="mt-4 grid gap-4 md:grid-cols-2"><article class="rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5"><h2 class="text-lg font-semibold text-slate-950">What is the fastest way to approach how to compare model usage?</h2><p class="mt-3 text-sm leading-7 text-slate-600">Start with the relevant command, verify the output locally, then decide whether you need a share page, a wrapped summary, or a heatmap for communication.</p></article><article class="rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5"><h2 class="text-lg font-semibold text-slate-950">Do I need to upload raw conversations for these guides?</h2><p class="mt-3 text-sm leading-7 text-slate-600">No. vibestats works from local usage artifacts and only turns aggregate results into hosted pages when you explicitly publish them.</p></article></div></section><section class="mt-6 rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]"><div class="flex items-center justify-between gap-4"><div><p class="text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500">Related pages</p><h2 class="mt-3 font-[family-name:var(--font-display)] text-3xl leading-none text-slate-950">Continue by intent</h2></div><a class="text-sm font-medium text-slate-700 transition hover:text-orange-700" href="/guides">View all <!-- -->guides</a></div><div class="mt-5 grid gap-4 md:grid-cols-3"><a class="rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5 text-sm leading-7 text-slate-600 transition hover:border-orange-300 hover:bg-white" href="/features/model-breakdown"><span class="block font-semibold text-slate-950">features model-breakdown</span><span class="mt-2 block">Open the related vibestats page and continue the workflow from there.</span></a><a class="rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5 text-sm leading-7 text-slate-600 transition hover:border-orange-300 hover:bg-white" href="/compare/session-breakdown-vs-model-breakdown"><span class="block font-semibold text-slate-950">compare session-breakdown-vs-model-breakdown</span><span class="mt-2 block">Open the related vibestats page and continue the workflow from there.</span></a><a class="rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5 text-sm leading-7 text-slate-600 transition hover:border-orange-300 hover:bg-white" href="/features/token-and-cost-tracking"><span class="block font-semibold text-slate-950">features token-and-cost-tracking</span><span class="mt-2 block">Open the related vibestats page and continue the workflow from there.</span></a></div></section></div></main><!--$--><!--/$--><script src="/_next/static/chunks/webpack-175b2f5685d7557b.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[7437,[\"177\",\"static/chunks/app/layout-6ebd9b17af55ec02.js\"],\"\"]\n3:I[5965,[],\"\"]\n4:I[3609,[],\"\"]\n6:I[496,[],\"OutletBoundary\"]\n8:I[3737,[],\"AsyncMetadataOutlet\"]\na:I[496,[],\"ViewportBoundary\"]\nc:I[496,[],\"MetadataBoundary\"]\nd:\"$Sreact.suspense\"\nf:I[2207,[],\"\"]\n:HL[\"/_next/static/css/335de1248158d380.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"3pcP-Y7gHe02EnmTXxc9b\",\"p\":\"\",\"c\":[\"\",\"guides\",\"how-to-compare-model-usage\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"guides\",{\"children\":[[\"slug\",\"how-to-compare-model-usage\",\"d\"],{\"children\":[\"__PAGE__\",{}]}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/335de1248158d380.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"$L2\",null,{\"id\":\"wolf-analytics-config\",\"strategy\":\"beforeInteractive\",\"children\":\"window.WOLF_ANALYTICS_CONFIG = {\\\"apiUrl\\\":\\\"https://analapi.wolfai.dev\\\",\\\"projectApiKey\\\":\\\"wa_rMSm5mgj44W_9LzMsKCwwAipAtxPynp1tn4PbxN_Oa8\\\",\\\"mode\\\":\\\"intl\\\",\\\"sourceApp\\\":\\\"vibestats\\\"};\"}],[\"$\",\"$L2\",null,{\"id\":\"wolf-analytics-script\",\"src\":\"https://analytics.wolfai.dev/wolf-analytics.min.js\",\"strategy\":\"beforeInteractive\"}]]}],[\"$\",\"body\",null,{\"className\":\"antialiased min-h-screen bg-background text-foreground\",\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],{\"children\":[\"guides\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"slug\",\"how-to-compare-model-usage\",\"d\"],[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[\"$L5\",null,[\"$\",\"$L6\",null,{\"children\":[\"$L7\",[\"$\",\"$L8\",null,{\"promise\":\"$@9\"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],null],[\"$\",\"$Lc\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$d\",null,{\"fallback\":null,\"children\":\"$Le\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$f\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"11:I[4816,[\"816\",\"static/chunks/816-8960921093d57453.js\",\"54\",\"static/chunks/app/guides/%5Bslug%5D/page-5d0587c1d5910e68.js\"],\"\"]\n10:T576,"])</script><script>self.__next_f.push([1,"[{\"@context\":\"https://schema.org\",\"@type\":\"WebPage\",\"name\":\"How to compare model usage\",\"description\":\"A practical guide to comparing AI model usage in vibestats across reporting windows and source scopes.\",\"url\":\"https://vibestats.wolfai.dev/guides/how-to-compare-model-usage\",\"isPartOf\":{\"@type\":\"WebSite\",\"name\":\"vibestats\",\"url\":\"https://vibestats.wolfai.dev/\"}},{\"@context\":\"https://schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"vibestats\",\"item\":\"https://vibestats.wolfai.dev/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Guides\",\"item\":\"https://vibestats.wolfai.dev/guides\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"How to compare model usage\",\"item\":\"https://vibestats.wolfai.dev/guides/how-to-compare-model-usage\"}]},{\"@context\":\"https://schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"What is the fastest way to approach how to compare model usage?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Start with the relevant command, verify the output locally, then decide whether you need a share page, a wrapped summary, or a heatmap for communication.\"}},{\"@type\":\"Question\",\"name\":\"Do I need to upload raw conversations for these guides?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"No. vibestats works from local usage artifacts and only turns aggregate results into hosted pages when you explicitly publish them.\"}}]}]"])</script><script>self.__next_f.push([1,"5:[\"$\",\"main\",null,{\"className\":\"min-h-screen bg-[radial-gradient(circle_at_top_left,_rgba(253,186,116,0.22),_transparent_35%),linear-gradient(180deg,#fff9f1_0%,#fff1de_100%)] px-4 py-8 text-slate-900 md:px-8 md:py-12\",\"children\":[[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"$10\"}}],[\"$\",\"div\",null,{\"className\":\"mx-auto max-w-7xl\",\"children\":[[\"$\",\"header\",null,{\"className\":\"rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)] overflow-hidden\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex flex-wrap items-center gap-3 text-sm text-slate-500\",\"children\":[[\"$\",\"$L11\",null,{\"href\":\"/\",\"className\":\"transition hover:text-orange-700\",\"children\":\"vibestats\"}],[\"$\",\"span\",null,{\"children\":\"/\"}],[\"$\",\"$L11\",null,{\"href\":\"/guides\",\"className\":\"transition hover:text-orange-700\",\"children\":\"Guides\"}],[\"$\",\"span\",null,{\"children\":\"/\"}],[\"$\",\"span\",null,{\"className\":\"text-slate-700\",\"children\":\"How to compare model usage\"}]]}],[\"$\",\"p\",null,{\"className\":\"mt-5 text-[0.72rem] font-semibold uppercase tracking-[0.28em] text-slate-500\",\"children\":\"Guide\"}],[\"$\",\"h1\",null,{\"className\":\"mt-4 max-w-5xl font-[family-name:var(--font-display)] text-5xl leading-none text-slate-950 md:text-7xl\",\"children\":\"How to compare model usage\"}],[\"$\",\"p\",null,{\"className\":\"mt-5 max-w-3xl text-base leading-7 text-slate-600 md:text-lg\",\"children\":\"A practical guide to comparing AI model usage in vibestats across reporting windows and source scopes.\"}],[\"$\",\"div\",null,{\"className\":\"mt-6 grid gap-3 md:grid-cols-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"rounded-[1.3rem] border border-slate-200 bg-slate-50 px-4 py-4\",\"children\":[[\"$\",\"div\",null,{\"className\":\"text-[0.7rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":\"Intent\"}],[\"$\",\"div\",null,{\"className\":\"mt-2 text-sm leading-6 text-slate-700\",\"children\":\"Guide\"}]]}],[\"$\",\"div\",null,{\"className\":\"rounded-[1.3rem] border border-slate-200 bg-slate-50 px-4 py-4\",\"children\":[[\"$\",\"div\",null,{\"className\":\"text-[0.7rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":\"Focus\"}],[\"$\",\"div\",null,{\"className\":\"mt-2 text-sm leading-6 text-slate-700\",\"children\":\"How to compare model usage is a practical workflow page for turning local AI coding usage into something readable and repeatable.\"}]]}],\"$L12\"]}]]}],\"$L13\",\"$L14\",null,\"$L15\",\"$L16\",\"$L17\"]}]]}]\n"])</script><script>self.__next_f.push([1,"12:[\"$\",\"div\",null,{\"className\":\"rounded-[1.3rem] border border-slate-200 bg-slate-50 px-4 py-4\",\"children\":[[\"$\",\"div\",null,{\"className\":\"text-[0.7rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":\"Next step\"}],[\"$\",\"div\",null,{\"className\":\"mt-2 text-sm leading-6 text-slate-700\",\"children\":[\"$\",\"$L11\",null,{\"href\":\"/docs/commands\",\"className\":\"text-slate-900 transition hover:text-orange-700\",\"children\":\"Open the command reference\"}]}]]}]\n"])</script><script>self.__next_f.push([1,"13:[\"$\",\"section\",null,{\"className\":\"mt-6 grid gap-4 lg:grid-cols-[0.8fr_1.2fr]\",\"children\":[[\"$\",\"article\",null,{\"className\":\"rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":\"Highlights\"}],[\"$\",\"ul\",null,{\"className\":\"mt-4 space-y-3 text-sm leading-7 text-slate-600\",\"children\":[[\"$\",\"li\",\"Stable windows matter more than perfect totals\",{\"children\":\"Stable windows matter more than perfect totals\"}],[\"$\",\"li\",\"Model share is easier to read when grouped directly\",{\"children\":\"Model share is easier to read when grouped directly\"}],[\"$\",\"li\",\"Source context helps interpret model shifts\",{\"children\":\"Source context helps interpret model shifts\"}]]}]]}],[\"$\",\"article\",null,{\"className\":\"rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":\"Relevant commands\"}],[\"$\",\"div\",null,{\"className\":\"mt-4 grid gap-3\",\"children\":[[\"$\",\"code\",\"npx vibestats --model\",{\"className\":\"rounded-[1.2rem] bg-slate-100 px-4 py-4 text-sm text-slate-700\",\"children\":\"npx vibestats --model\"}],[\"$\",\"code\",\"npx vibestats --since 2026-01-01 --until 2026-01-31 --model\",{\"className\":\"rounded-[1.2rem] bg-slate-100 px-4 py-4 text-sm text-slate-700\",\"children\":\"npx vibestats --since 2026-01-01 --until 2026-01-31 --model\"}],[\"$\",\"code\",\"npx vibestats all --model\",{\"className\":\"rounded-[1.2rem] bg-slate-100 px-4 py-4 text-sm text-slate-700\",\"children\":\"npx vibestats all --model\"}]]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"14:[\"$\",\"section\",null,{\"className\":\"mt-6\",\"children\":[\"$\",\"div\",null,{\"className\":\"grid gap-4 md:grid-cols-3\",\"children\":[[\"$\",\"article\",\"Switch to model grouping\",{\"className\":\"rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":[\"Step \",1]}],[\"$\",\"h2\",null,{\"className\":\"mt-3 text-2xl font-semibold text-slate-950\",\"children\":\"Switch to model grouping\"}],[\"$\",\"p\",null,{\"className\":\"mt-4 text-sm leading-7 text-slate-600\",\"children\":\"Use the model report shape so the output groups by model instead of by day or month.\"}]]}],[\"$\",\"article\",\"Keep the date window stable\",{\"className\":\"rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":[\"Step \",2]}],[\"$\",\"h2\",null,{\"className\":\"mt-3 text-2xl font-semibold text-slate-950\",\"children\":\"Keep the date window stable\"}],[\"$\",\"p\",null,{\"className\":\"mt-4 text-sm leading-7 text-slate-600\",\"children\":\"Use a clear date range so the comparison reflects model behavior and not a moving reporting window.\"}]]}],[\"$\",\"article\",\"Add cost and source context\",{\"className\":\"rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":[\"Step \",3]}],[\"$\",\"h2\",null,{\"className\":\"mt-3 text-2xl font-semibold text-slate-950\",\"children\":\"Add cost and source context\"}],[\"$\",\"p\",null,{\"className\":\"mt-4 text-sm leading-7 text-slate-600\",\"children\":\"Check whether model share also changes cost shape or differs between Claude-compatible and Codex usage.\"}]]}]]}]}]\n"])</script><script>self.__next_f.push([1,"15:[\"$\",\"section\",null,{\"className\":\"mt-6 grid gap-4 md:grid-cols-2\",\"children\":[[\"$\",\"article\",\"Why this guide exists\",{\"className\":\"rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"font-[family-name:var(--font-display)] text-3xl leading-none text-slate-950\",\"children\":\"Why this guide exists\"}],[\"$\",\"p\",null,{\"className\":\"mt-4 text-sm leading-7 text-slate-600\",\"children\":\"Most AI coding reporting problems are not about one missing command. They are about choosing the right surface: daily usage, wrapped summaries, activity heatmaps, cost views, or shareable aggregate pages.\"}]]}],[\"$\",\"article\",\"What to expect\",{\"className\":\"rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"font-[family-name:var(--font-display)] text-3xl leading-none text-slate-950\",\"children\":\"What to expect\"}],[\"$\",\"p\",null,{\"className\":\"mt-4 text-sm leading-7 text-slate-600\",\"children\":\"This guide stays focused on vibestats workflows and the pages already documented in the public command reference, so you can move from local data to a readable result quickly.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"16:[\"$\",\"section\",null,{\"className\":\"mt-6 rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":\"FAQ\"}],[\"$\",\"div\",null,{\"className\":\"mt-4 grid gap-4 md:grid-cols-2\",\"children\":[[\"$\",\"article\",\"What is the fastest way to approach how to compare model usage?\",{\"className\":\"rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-lg font-semibold text-slate-950\",\"children\":\"What is the fastest way to approach how to compare model usage?\"}],[\"$\",\"p\",null,{\"className\":\"mt-3 text-sm leading-7 text-slate-600\",\"children\":\"Start with the relevant command, verify the output locally, then decide whether you need a share page, a wrapped summary, or a heatmap for communication.\"}]]}],[\"$\",\"article\",\"Do I need to upload raw conversations for these guides?\",{\"className\":\"rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-lg font-semibold text-slate-950\",\"children\":\"Do I need to upload raw conversations for these guides?\"}],[\"$\",\"p\",null,{\"className\":\"mt-3 text-sm leading-7 text-slate-600\",\"children\":\"No. vibestats works from local usage artifacts and only turns aggregate results into hosted pages when you explicitly publish them.\"}]]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"17:[\"$\",\"section\",null,{\"className\":\"mt-6 rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center justify-between gap-4\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"p\",null,{\"className\":\"text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":\"Related pages\"}],[\"$\",\"h2\",null,{\"className\":\"mt-3 font-[family-name:var(--font-display)] text-3xl leading-none text-slate-950\",\"children\":\"Continue by intent\"}]]}],[\"$\",\"$L11\",null,{\"href\":\"/guides\",\"className\":\"text-sm font-medium text-slate-700 transition hover:text-orange-700\",\"children\":[\"View all \",\"guides\"]}]]}],[\"$\",\"div\",null,{\"className\":\"mt-5 grid gap-4 md:grid-cols-3\",\"children\":[[\"$\",\"$L11\",\"/features/model-breakdown\",{\"href\":\"/features/model-breakdown\",\"className\":\"rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5 text-sm leading-7 text-slate-600 transition hover:border-orange-300 hover:bg-white\",\"children\":[[\"$\",\"span\",null,{\"className\":\"block font-semibold text-slate-950\",\"children\":\"features model-breakdown\"}],[\"$\",\"span\",null,{\"className\":\"mt-2 block\",\"children\":\"Open the related vibestats page and continue the workflow from there.\"}]]}],[\"$\",\"$L11\",\"/compare/session-breakdown-vs-model-breakdown\",{\"href\":\"/compare/session-breakdown-vs-model-breakdown\",\"className\":\"rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5 text-sm leading-7 text-slate-600 transition hover:border-orange-300 hover:bg-white\",\"children\":[[\"$\",\"span\",null,{\"className\":\"block font-semibold text-slate-950\",\"children\":\"compare session-breakdown-vs-model-breakdown\"}],[\"$\",\"span\",null,{\"className\":\"mt-2 block\",\"children\":\"Open the related vibestats page and continue the workflow from there.\"}]]}],[\"$\",\"$L11\",\"/features/token-and-cost-tracking\",{\"href\":\"/features/token-and-cost-tracking\",\"className\":\"rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5 text-sm leading-7 text-slate-600 transition hover:border-orange-300 hover:bg-white\",\"children\":[[\"$\",\"span\",null,{\"className\":\"block font-semibold text-slate-950\",\"children\":\"features token-and-cost-tracking\"}],[\"$\",\"span\",null,{\"className\":\"mt-2 block\",\"children\":\"Open the related vibestats page and continue the workflow from there.\"}]]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"b:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n7:null\n"])</script><script>self.__next_f.push([1,"9:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"How to compare model usage | vibestats\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"A practical guide to comparing AI model usage in vibestats across reporting windows and source scopes.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"application-name\",\"content\":\"vibestats\"}],[\"$\",\"meta\",\"3\",{\"name\":\"keywords\",\"content\":\"vibestats,Claude Code stats,Codex CLI stats,AI coding stats,AI coding analytics,Claude Code wrapped,Codex usage tracker,developer analytics,how to compare model usage,AI model usage guide,Claude and Codex model comparison\"}],[\"$\",\"link\",\"4\",{\"rel\":\"canonical\",\"href\":\"https://vibestats.wolfai.dev/guides/how-to-compare-model-usage\"}],[\"$\",\"meta\",\"5\",{\"property\":\"og:title\",\"content\":\"How to compare model usage | vibestats\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:description\",\"content\":\"A practical guide to comparing AI model usage in vibestats across reporting windows and source scopes.\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:url\",\"content\":\"https://vibestats.wolfai.dev/guides/how-to-compare-model-usage\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:site_name\",\"content\":\"vibestats\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:locale\",\"content\":\"en_US\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"11\",{\"name\":\"twitter:card\",\"content\":\"summary\"}],[\"$\",\"meta\",\"12\",{\"name\":\"twitter:title\",\"content\":\"How to compare model usage | vibestats\"}],[\"$\",\"meta\",\"13\",{\"name\":\"twitter:description\",\"content\":\"A practical guide to comparing AI model usage in vibestats across reporting windows and source scopes.\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"e:\"$9:metadata\"\n"])</script></body></html>
|
|
1
|
+
<!DOCTYPE html><!--bkF3quPLxz4vmu3191LYm--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/335de1248158d380.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-175b2f5685d7557b.js"/><script src="/_next/static/chunks/c476d598-9099ed8b975ae1d6.js" async=""></script><script src="/_next/static/chunks/498-74a3a367cb8442f0.js" async=""></script><script src="/_next/static/chunks/main-app-6619364ab1f13fb7.js" async=""></script><script src="/_next/static/chunks/app/layout-6ebd9b17af55ec02.js" async=""></script><script src="/_next/static/chunks/816-8960921093d57453.js" async=""></script><script src="/_next/static/chunks/app/guides/%5Bslug%5D/page-5d0587c1d5910e68.js" async=""></script><link rel="preload" href="https://analytics.wolfai.dev/wolf-analytics.min.js" as="script"/><title>How to compare model usage | vibestats</title><meta name="description" content="A practical guide to comparing AI model usage in vibestats across reporting windows and source scopes."/><meta name="application-name" content="vibestats"/><meta name="keywords" content="vibestats,Claude Code stats,Codex CLI stats,AI coding stats,AI coding analytics,Claude Code wrapped,Codex usage tracker,developer analytics,how to compare model usage,AI model usage guide,Claude and Codex model comparison"/><link rel="canonical" href="https://vibestats.wolfai.dev/guides/how-to-compare-model-usage"/><meta property="og:title" content="How to compare model usage | vibestats"/><meta property="og:description" content="A practical guide to comparing AI model usage in vibestats across reporting windows and source scopes."/><meta property="og:url" content="https://vibestats.wolfai.dev/guides/how-to-compare-model-usage"/><meta property="og:site_name" content="vibestats"/><meta property="og:locale" content="en_US"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary"/><meta name="twitter:title" content="How to compare model usage | vibestats"/><meta name="twitter:description" content="A practical guide to comparing AI model usage in vibestats across reporting windows and source scopes."/><script>(self.__next_s=self.__next_s||[]).push([0,{"children":"window.WOLF_ANALYTICS_CONFIG = {\"apiUrl\":\"https://analapi.wolfai.dev\",\"projectApiKey\":\"wa_rMSm5mgj44W_9LzMsKCwwAipAtxPynp1tn4PbxN_Oa8\",\"mode\":\"intl\",\"sourceApp\":\"vibestats\"};","id":"wolf-analytics-config"}])</script><script>(self.__next_s=self.__next_s||[]).push(["https://analytics.wolfai.dev/wolf-analytics.min.js",{"id":"wolf-analytics-script"}])</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="antialiased min-h-screen bg-background text-foreground"><div hidden=""><!--$--><!--/$--></div><main class="min-h-screen bg-[radial-gradient(circle_at_top_left,_rgba(253,186,116,0.22),_transparent_35%),linear-gradient(180deg,#fff9f1_0%,#fff1de_100%)] px-4 py-8 text-slate-900 md:px-8 md:py-12"><script type="application/ld+json">[{"@context":"https://schema.org","@type":"WebPage","name":"How to compare model usage","description":"A practical guide to comparing AI model usage in vibestats across reporting windows and source scopes.","url":"https://vibestats.wolfai.dev/guides/how-to-compare-model-usage","isPartOf":{"@type":"WebSite","name":"vibestats","url":"https://vibestats.wolfai.dev/"}},{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"vibestats","item":"https://vibestats.wolfai.dev/"},{"@type":"ListItem","position":2,"name":"Guides","item":"https://vibestats.wolfai.dev/guides"},{"@type":"ListItem","position":3,"name":"How to compare model usage","item":"https://vibestats.wolfai.dev/guides/how-to-compare-model-usage"}]},{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"What is the fastest way to approach how to compare model usage?","acceptedAnswer":{"@type":"Answer","text":"Start with the relevant command, verify the output locally, then decide whether you need a share page, a wrapped summary, or a heatmap for communication."}},{"@type":"Question","name":"Do I need to upload raw conversations for these guides?","acceptedAnswer":{"@type":"Answer","text":"No. vibestats works from local usage artifacts and only turns aggregate results into hosted pages when you explicitly publish them."}}]}]</script><div class="mx-auto max-w-7xl"><header class="rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)] overflow-hidden"><div class="flex flex-wrap items-center gap-3 text-sm text-slate-500"><a class="transition hover:text-orange-700" href="/">vibestats</a><span>/</span><a class="transition hover:text-orange-700" href="/guides">Guides</a><span>/</span><span class="text-slate-700">How to compare model usage</span></div><p class="mt-5 text-[0.72rem] font-semibold uppercase tracking-[0.28em] text-slate-500">Guide</p><h1 class="mt-4 max-w-5xl font-[family-name:var(--font-display)] text-5xl leading-none text-slate-950 md:text-7xl">How to compare model usage</h1><p class="mt-5 max-w-3xl text-base leading-7 text-slate-600 md:text-lg">A practical guide to comparing AI model usage in vibestats across reporting windows and source scopes.</p><div class="mt-6 grid gap-3 md:grid-cols-3"><div class="rounded-[1.3rem] border border-slate-200 bg-slate-50 px-4 py-4"><div class="text-[0.7rem] font-semibold uppercase tracking-[0.22em] text-slate-500">Intent</div><div class="mt-2 text-sm leading-6 text-slate-700">Guide</div></div><div class="rounded-[1.3rem] border border-slate-200 bg-slate-50 px-4 py-4"><div class="text-[0.7rem] font-semibold uppercase tracking-[0.22em] text-slate-500">Focus</div><div class="mt-2 text-sm leading-6 text-slate-700">How to compare model usage is a practical workflow page for turning local AI coding usage into something readable and repeatable.</div></div><div class="rounded-[1.3rem] border border-slate-200 bg-slate-50 px-4 py-4"><div class="text-[0.7rem] font-semibold uppercase tracking-[0.22em] text-slate-500">Next step</div><div class="mt-2 text-sm leading-6 text-slate-700"><a class="text-slate-900 transition hover:text-orange-700" href="/docs/commands">Open the command reference</a></div></div></div></header><section class="mt-6 grid gap-4 lg:grid-cols-[0.8fr_1.2fr]"><article class="rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]"><p class="text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500">Highlights</p><ul class="mt-4 space-y-3 text-sm leading-7 text-slate-600"><li>Stable windows matter more than perfect totals</li><li>Model share is easier to read when grouped directly</li><li>Source context helps interpret model shifts</li></ul></article><article class="rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]"><p class="text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500">Relevant commands</p><div class="mt-4 grid gap-3"><code class="rounded-[1.2rem] bg-slate-100 px-4 py-4 text-sm text-slate-700">npx vibestats --model</code><code class="rounded-[1.2rem] bg-slate-100 px-4 py-4 text-sm text-slate-700">npx vibestats --since 2026-01-01 --until 2026-01-31 --model</code><code class="rounded-[1.2rem] bg-slate-100 px-4 py-4 text-sm text-slate-700">npx vibestats all --model</code></div></article></section><section class="mt-6"><div class="grid gap-4 md:grid-cols-3"><article class="rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]"><p class="text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500">Step <!-- -->1</p><h2 class="mt-3 text-2xl font-semibold text-slate-950">Switch to model grouping</h2><p class="mt-4 text-sm leading-7 text-slate-600">Use the model report shape so the output groups by model instead of by day or month.</p></article><article class="rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]"><p class="text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500">Step <!-- -->2</p><h2 class="mt-3 text-2xl font-semibold text-slate-950">Keep the date window stable</h2><p class="mt-4 text-sm leading-7 text-slate-600">Use a clear date range so the comparison reflects model behavior and not a moving reporting window.</p></article><article class="rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]"><p class="text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500">Step <!-- -->3</p><h2 class="mt-3 text-2xl font-semibold text-slate-950">Add cost and source context</h2><p class="mt-4 text-sm leading-7 text-slate-600">Check whether model share also changes cost shape or differs between Claude-compatible and Codex usage.</p></article></div></section><section class="mt-6 grid gap-4 md:grid-cols-2"><article class="rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]"><h2 class="font-[family-name:var(--font-display)] text-3xl leading-none text-slate-950">Why this guide exists</h2><p class="mt-4 text-sm leading-7 text-slate-600">Most AI coding reporting problems are not about one missing command. They are about choosing the right surface: daily usage, wrapped summaries, activity heatmaps, cost views, or shareable aggregate pages.</p></article><article class="rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]"><h2 class="font-[family-name:var(--font-display)] text-3xl leading-none text-slate-950">What to expect</h2><p class="mt-4 text-sm leading-7 text-slate-600">This guide stays focused on vibestats workflows and the pages already documented in the public command reference, so you can move from local data to a readable result quickly.</p></article></section><section class="mt-6 rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]"><p class="text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500">FAQ</p><div class="mt-4 grid gap-4 md:grid-cols-2"><article class="rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5"><h2 class="text-lg font-semibold text-slate-950">What is the fastest way to approach how to compare model usage?</h2><p class="mt-3 text-sm leading-7 text-slate-600">Start with the relevant command, verify the output locally, then decide whether you need a share page, a wrapped summary, or a heatmap for communication.</p></article><article class="rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5"><h2 class="text-lg font-semibold text-slate-950">Do I need to upload raw conversations for these guides?</h2><p class="mt-3 text-sm leading-7 text-slate-600">No. vibestats works from local usage artifacts and only turns aggregate results into hosted pages when you explicitly publish them.</p></article></div></section><section class="mt-6 rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]"><div class="flex items-center justify-between gap-4"><div><p class="text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500">Related pages</p><h2 class="mt-3 font-[family-name:var(--font-display)] text-3xl leading-none text-slate-950">Continue by intent</h2></div><a class="text-sm font-medium text-slate-700 transition hover:text-orange-700" href="/guides">View all <!-- -->guides</a></div><div class="mt-5 grid gap-4 md:grid-cols-3"><a class="rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5 text-sm leading-7 text-slate-600 transition hover:border-orange-300 hover:bg-white" href="/features/model-breakdown"><span class="block font-semibold text-slate-950">features model-breakdown</span><span class="mt-2 block">Open the related vibestats page and continue the workflow from there.</span></a><a class="rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5 text-sm leading-7 text-slate-600 transition hover:border-orange-300 hover:bg-white" href="/compare/session-breakdown-vs-model-breakdown"><span class="block font-semibold text-slate-950">compare session-breakdown-vs-model-breakdown</span><span class="mt-2 block">Open the related vibestats page and continue the workflow from there.</span></a><a class="rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5 text-sm leading-7 text-slate-600 transition hover:border-orange-300 hover:bg-white" href="/features/token-and-cost-tracking"><span class="block font-semibold text-slate-950">features token-and-cost-tracking</span><span class="mt-2 block">Open the related vibestats page and continue the workflow from there.</span></a></div></section></div></main><!--$--><!--/$--><script src="/_next/static/chunks/webpack-175b2f5685d7557b.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[7437,[\"177\",\"static/chunks/app/layout-6ebd9b17af55ec02.js\"],\"\"]\n3:I[5965,[],\"\"]\n4:I[3609,[],\"\"]\n6:I[496,[],\"OutletBoundary\"]\n8:I[3737,[],\"AsyncMetadataOutlet\"]\na:I[496,[],\"ViewportBoundary\"]\nc:I[496,[],\"MetadataBoundary\"]\nd:\"$Sreact.suspense\"\nf:I[2207,[],\"\"]\n:HL[\"/_next/static/css/335de1248158d380.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"bkF3quPLxz4vmu3191LYm\",\"p\":\"\",\"c\":[\"\",\"guides\",\"how-to-compare-model-usage\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"guides\",{\"children\":[[\"slug\",\"how-to-compare-model-usage\",\"d\"],{\"children\":[\"__PAGE__\",{}]}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/335de1248158d380.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"$L2\",null,{\"id\":\"wolf-analytics-config\",\"strategy\":\"beforeInteractive\",\"children\":\"window.WOLF_ANALYTICS_CONFIG = {\\\"apiUrl\\\":\\\"https://analapi.wolfai.dev\\\",\\\"projectApiKey\\\":\\\"wa_rMSm5mgj44W_9LzMsKCwwAipAtxPynp1tn4PbxN_Oa8\\\",\\\"mode\\\":\\\"intl\\\",\\\"sourceApp\\\":\\\"vibestats\\\"};\"}],[\"$\",\"$L2\",null,{\"id\":\"wolf-analytics-script\",\"src\":\"https://analytics.wolfai.dev/wolf-analytics.min.js\",\"strategy\":\"beforeInteractive\"}]]}],[\"$\",\"body\",null,{\"className\":\"antialiased min-h-screen bg-background text-foreground\",\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],{\"children\":[\"guides\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"slug\",\"how-to-compare-model-usage\",\"d\"],[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[\"$L5\",null,[\"$\",\"$L6\",null,{\"children\":[\"$L7\",[\"$\",\"$L8\",null,{\"promise\":\"$@9\"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],null],[\"$\",\"$Lc\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$d\",null,{\"fallback\":null,\"children\":\"$Le\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$f\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"11:I[4816,[\"816\",\"static/chunks/816-8960921093d57453.js\",\"54\",\"static/chunks/app/guides/%5Bslug%5D/page-5d0587c1d5910e68.js\"],\"\"]\n10:T576,"])</script><script>self.__next_f.push([1,"[{\"@context\":\"https://schema.org\",\"@type\":\"WebPage\",\"name\":\"How to compare model usage\",\"description\":\"A practical guide to comparing AI model usage in vibestats across reporting windows and source scopes.\",\"url\":\"https://vibestats.wolfai.dev/guides/how-to-compare-model-usage\",\"isPartOf\":{\"@type\":\"WebSite\",\"name\":\"vibestats\",\"url\":\"https://vibestats.wolfai.dev/\"}},{\"@context\":\"https://schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"vibestats\",\"item\":\"https://vibestats.wolfai.dev/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Guides\",\"item\":\"https://vibestats.wolfai.dev/guides\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"How to compare model usage\",\"item\":\"https://vibestats.wolfai.dev/guides/how-to-compare-model-usage\"}]},{\"@context\":\"https://schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"What is the fastest way to approach how to compare model usage?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Start with the relevant command, verify the output locally, then decide whether you need a share page, a wrapped summary, or a heatmap for communication.\"}},{\"@type\":\"Question\",\"name\":\"Do I need to upload raw conversations for these guides?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"No. vibestats works from local usage artifacts and only turns aggregate results into hosted pages when you explicitly publish them.\"}}]}]"])</script><script>self.__next_f.push([1,"5:[\"$\",\"main\",null,{\"className\":\"min-h-screen bg-[radial-gradient(circle_at_top_left,_rgba(253,186,116,0.22),_transparent_35%),linear-gradient(180deg,#fff9f1_0%,#fff1de_100%)] px-4 py-8 text-slate-900 md:px-8 md:py-12\",\"children\":[[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"$10\"}}],[\"$\",\"div\",null,{\"className\":\"mx-auto max-w-7xl\",\"children\":[[\"$\",\"header\",null,{\"className\":\"rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)] overflow-hidden\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex flex-wrap items-center gap-3 text-sm text-slate-500\",\"children\":[[\"$\",\"$L11\",null,{\"href\":\"/\",\"className\":\"transition hover:text-orange-700\",\"children\":\"vibestats\"}],[\"$\",\"span\",null,{\"children\":\"/\"}],[\"$\",\"$L11\",null,{\"href\":\"/guides\",\"className\":\"transition hover:text-orange-700\",\"children\":\"Guides\"}],[\"$\",\"span\",null,{\"children\":\"/\"}],[\"$\",\"span\",null,{\"className\":\"text-slate-700\",\"children\":\"How to compare model usage\"}]]}],[\"$\",\"p\",null,{\"className\":\"mt-5 text-[0.72rem] font-semibold uppercase tracking-[0.28em] text-slate-500\",\"children\":\"Guide\"}],[\"$\",\"h1\",null,{\"className\":\"mt-4 max-w-5xl font-[family-name:var(--font-display)] text-5xl leading-none text-slate-950 md:text-7xl\",\"children\":\"How to compare model usage\"}],[\"$\",\"p\",null,{\"className\":\"mt-5 max-w-3xl text-base leading-7 text-slate-600 md:text-lg\",\"children\":\"A practical guide to comparing AI model usage in vibestats across reporting windows and source scopes.\"}],[\"$\",\"div\",null,{\"className\":\"mt-6 grid gap-3 md:grid-cols-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"rounded-[1.3rem] border border-slate-200 bg-slate-50 px-4 py-4\",\"children\":[[\"$\",\"div\",null,{\"className\":\"text-[0.7rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":\"Intent\"}],[\"$\",\"div\",null,{\"className\":\"mt-2 text-sm leading-6 text-slate-700\",\"children\":\"Guide\"}]]}],[\"$\",\"div\",null,{\"className\":\"rounded-[1.3rem] border border-slate-200 bg-slate-50 px-4 py-4\",\"children\":[[\"$\",\"div\",null,{\"className\":\"text-[0.7rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":\"Focus\"}],[\"$\",\"div\",null,{\"className\":\"mt-2 text-sm leading-6 text-slate-700\",\"children\":\"How to compare model usage is a practical workflow page for turning local AI coding usage into something readable and repeatable.\"}]]}],\"$L12\"]}]]}],\"$L13\",\"$L14\",null,\"$L15\",\"$L16\",\"$L17\"]}]]}]\n"])</script><script>self.__next_f.push([1,"12:[\"$\",\"div\",null,{\"className\":\"rounded-[1.3rem] border border-slate-200 bg-slate-50 px-4 py-4\",\"children\":[[\"$\",\"div\",null,{\"className\":\"text-[0.7rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":\"Next step\"}],[\"$\",\"div\",null,{\"className\":\"mt-2 text-sm leading-6 text-slate-700\",\"children\":[\"$\",\"$L11\",null,{\"href\":\"/docs/commands\",\"className\":\"text-slate-900 transition hover:text-orange-700\",\"children\":\"Open the command reference\"}]}]]}]\n"])</script><script>self.__next_f.push([1,"13:[\"$\",\"section\",null,{\"className\":\"mt-6 grid gap-4 lg:grid-cols-[0.8fr_1.2fr]\",\"children\":[[\"$\",\"article\",null,{\"className\":\"rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":\"Highlights\"}],[\"$\",\"ul\",null,{\"className\":\"mt-4 space-y-3 text-sm leading-7 text-slate-600\",\"children\":[[\"$\",\"li\",\"Stable windows matter more than perfect totals\",{\"children\":\"Stable windows matter more than perfect totals\"}],[\"$\",\"li\",\"Model share is easier to read when grouped directly\",{\"children\":\"Model share is easier to read when grouped directly\"}],[\"$\",\"li\",\"Source context helps interpret model shifts\",{\"children\":\"Source context helps interpret model shifts\"}]]}]]}],[\"$\",\"article\",null,{\"className\":\"rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":\"Relevant commands\"}],[\"$\",\"div\",null,{\"className\":\"mt-4 grid gap-3\",\"children\":[[\"$\",\"code\",\"npx vibestats --model\",{\"className\":\"rounded-[1.2rem] bg-slate-100 px-4 py-4 text-sm text-slate-700\",\"children\":\"npx vibestats --model\"}],[\"$\",\"code\",\"npx vibestats --since 2026-01-01 --until 2026-01-31 --model\",{\"className\":\"rounded-[1.2rem] bg-slate-100 px-4 py-4 text-sm text-slate-700\",\"children\":\"npx vibestats --since 2026-01-01 --until 2026-01-31 --model\"}],[\"$\",\"code\",\"npx vibestats all --model\",{\"className\":\"rounded-[1.2rem] bg-slate-100 px-4 py-4 text-sm text-slate-700\",\"children\":\"npx vibestats all --model\"}]]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"14:[\"$\",\"section\",null,{\"className\":\"mt-6\",\"children\":[\"$\",\"div\",null,{\"className\":\"grid gap-4 md:grid-cols-3\",\"children\":[[\"$\",\"article\",\"Switch to model grouping\",{\"className\":\"rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":[\"Step \",1]}],[\"$\",\"h2\",null,{\"className\":\"mt-3 text-2xl font-semibold text-slate-950\",\"children\":\"Switch to model grouping\"}],[\"$\",\"p\",null,{\"className\":\"mt-4 text-sm leading-7 text-slate-600\",\"children\":\"Use the model report shape so the output groups by model instead of by day or month.\"}]]}],[\"$\",\"article\",\"Keep the date window stable\",{\"className\":\"rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":[\"Step \",2]}],[\"$\",\"h2\",null,{\"className\":\"mt-3 text-2xl font-semibold text-slate-950\",\"children\":\"Keep the date window stable\"}],[\"$\",\"p\",null,{\"className\":\"mt-4 text-sm leading-7 text-slate-600\",\"children\":\"Use a clear date range so the comparison reflects model behavior and not a moving reporting window.\"}]]}],[\"$\",\"article\",\"Add cost and source context\",{\"className\":\"rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":[\"Step \",3]}],[\"$\",\"h2\",null,{\"className\":\"mt-3 text-2xl font-semibold text-slate-950\",\"children\":\"Add cost and source context\"}],[\"$\",\"p\",null,{\"className\":\"mt-4 text-sm leading-7 text-slate-600\",\"children\":\"Check whether model share also changes cost shape or differs between Claude-compatible and Codex usage.\"}]]}]]}]}]\n"])</script><script>self.__next_f.push([1,"15:[\"$\",\"section\",null,{\"className\":\"mt-6 grid gap-4 md:grid-cols-2\",\"children\":[[\"$\",\"article\",\"Why this guide exists\",{\"className\":\"rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"font-[family-name:var(--font-display)] text-3xl leading-none text-slate-950\",\"children\":\"Why this guide exists\"}],[\"$\",\"p\",null,{\"className\":\"mt-4 text-sm leading-7 text-slate-600\",\"children\":\"Most AI coding reporting problems are not about one missing command. They are about choosing the right surface: daily usage, wrapped summaries, activity heatmaps, cost views, or shareable aggregate pages.\"}]]}],[\"$\",\"article\",\"What to expect\",{\"className\":\"rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"font-[family-name:var(--font-display)] text-3xl leading-none text-slate-950\",\"children\":\"What to expect\"}],[\"$\",\"p\",null,{\"className\":\"mt-4 text-sm leading-7 text-slate-600\",\"children\":\"This guide stays focused on vibestats workflows and the pages already documented in the public command reference, so you can move from local data to a readable result quickly.\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"16:[\"$\",\"section\",null,{\"className\":\"mt-6 rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":\"FAQ\"}],[\"$\",\"div\",null,{\"className\":\"mt-4 grid gap-4 md:grid-cols-2\",\"children\":[[\"$\",\"article\",\"What is the fastest way to approach how to compare model usage?\",{\"className\":\"rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-lg font-semibold text-slate-950\",\"children\":\"What is the fastest way to approach how to compare model usage?\"}],[\"$\",\"p\",null,{\"className\":\"mt-3 text-sm leading-7 text-slate-600\",\"children\":\"Start with the relevant command, verify the output locally, then decide whether you need a share page, a wrapped summary, or a heatmap for communication.\"}]]}],[\"$\",\"article\",\"Do I need to upload raw conversations for these guides?\",{\"className\":\"rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-lg font-semibold text-slate-950\",\"children\":\"Do I need to upload raw conversations for these guides?\"}],[\"$\",\"p\",null,{\"className\":\"mt-3 text-sm leading-7 text-slate-600\",\"children\":\"No. vibestats works from local usage artifacts and only turns aggregate results into hosted pages when you explicitly publish them.\"}]]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"17:[\"$\",\"section\",null,{\"className\":\"mt-6 rounded-[1.8rem] border border-slate-200 bg-white/95 p-6 shadow-[0_20px_40px_rgba(15,23,42,0.06)]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center justify-between gap-4\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"p\",null,{\"className\":\"text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-slate-500\",\"children\":\"Related pages\"}],[\"$\",\"h2\",null,{\"className\":\"mt-3 font-[family-name:var(--font-display)] text-3xl leading-none text-slate-950\",\"children\":\"Continue by intent\"}]]}],[\"$\",\"$L11\",null,{\"href\":\"/guides\",\"className\":\"text-sm font-medium text-slate-700 transition hover:text-orange-700\",\"children\":[\"View all \",\"guides\"]}]]}],[\"$\",\"div\",null,{\"className\":\"mt-5 grid gap-4 md:grid-cols-3\",\"children\":[[\"$\",\"$L11\",\"/features/model-breakdown\",{\"href\":\"/features/model-breakdown\",\"className\":\"rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5 text-sm leading-7 text-slate-600 transition hover:border-orange-300 hover:bg-white\",\"children\":[[\"$\",\"span\",null,{\"className\":\"block font-semibold text-slate-950\",\"children\":\"features model-breakdown\"}],[\"$\",\"span\",null,{\"className\":\"mt-2 block\",\"children\":\"Open the related vibestats page and continue the workflow from there.\"}]]}],[\"$\",\"$L11\",\"/compare/session-breakdown-vs-model-breakdown\",{\"href\":\"/compare/session-breakdown-vs-model-breakdown\",\"className\":\"rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5 text-sm leading-7 text-slate-600 transition hover:border-orange-300 hover:bg-white\",\"children\":[[\"$\",\"span\",null,{\"className\":\"block font-semibold text-slate-950\",\"children\":\"compare session-breakdown-vs-model-breakdown\"}],[\"$\",\"span\",null,{\"className\":\"mt-2 block\",\"children\":\"Open the related vibestats page and continue the workflow from there.\"}]]}],[\"$\",\"$L11\",\"/features/token-and-cost-tracking\",{\"href\":\"/features/token-and-cost-tracking\",\"className\":\"rounded-[1.4rem] border border-slate-200 bg-slate-50 px-5 py-5 text-sm leading-7 text-slate-600 transition hover:border-orange-300 hover:bg-white\",\"children\":[[\"$\",\"span\",null,{\"className\":\"block font-semibold text-slate-950\",\"children\":\"features token-and-cost-tracking\"}],[\"$\",\"span\",null,{\"className\":\"mt-2 block\",\"children\":\"Open the related vibestats page and continue the workflow from there.\"}]]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"b:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n7:null\n"])</script><script>self.__next_f.push([1,"9:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"How to compare model usage | vibestats\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"A practical guide to comparing AI model usage in vibestats across reporting windows and source scopes.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"application-name\",\"content\":\"vibestats\"}],[\"$\",\"meta\",\"3\",{\"name\":\"keywords\",\"content\":\"vibestats,Claude Code stats,Codex CLI stats,AI coding stats,AI coding analytics,Claude Code wrapped,Codex usage tracker,developer analytics,how to compare model usage,AI model usage guide,Claude and Codex model comparison\"}],[\"$\",\"link\",\"4\",{\"rel\":\"canonical\",\"href\":\"https://vibestats.wolfai.dev/guides/how-to-compare-model-usage\"}],[\"$\",\"meta\",\"5\",{\"property\":\"og:title\",\"content\":\"How to compare model usage | vibestats\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:description\",\"content\":\"A practical guide to comparing AI model usage in vibestats across reporting windows and source scopes.\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:url\",\"content\":\"https://vibestats.wolfai.dev/guides/how-to-compare-model-usage\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:site_name\",\"content\":\"vibestats\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:locale\",\"content\":\"en_US\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"11\",{\"name\":\"twitter:card\",\"content\":\"summary\"}],[\"$\",\"meta\",\"12\",{\"name\":\"twitter:title\",\"content\":\"How to compare model usage | vibestats\"}],[\"$\",\"meta\",\"13\",{\"name\":\"twitter:description\",\"content\":\"A practical guide to comparing AI model usage in vibestats across reporting windows and source scopes.\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"e:\"$9:metadata\"\n"])</script></body></html>
|