vibestats 1.4.1 → 1.4.2

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.
Files changed (114) hide show
  1. package/dist/index.js +63 -3
  2. package/dist/web/404.html +1 -1
  3. package/dist/web/activity.html +1 -1
  4. package/dist/web/activity.txt +1 -1
  5. package/dist/web/changelog.html +1 -1
  6. package/dist/web/changelog.txt +7 -7
  7. package/dist/web/compare/claude-code-vs-codex-cli-tracking.html +1 -1
  8. package/dist/web/compare/claude-code-vs-codex-cli-tracking.txt +1 -1
  9. package/dist/web/compare/daily-vs-monthly-ai-usage-reports.html +1 -1
  10. package/dist/web/compare/daily-vs-monthly-ai-usage-reports.txt +1 -1
  11. package/dist/web/compare/local-vs-cloud-ai-analytics.html +1 -1
  12. package/dist/web/compare/local-vs-cloud-ai-analytics.txt +1 -1
  13. package/dist/web/compare/manual-tracking-vs-vibestats.html +1 -1
  14. package/dist/web/compare/manual-tracking-vs-vibestats.txt +1 -1
  15. package/dist/web/compare/querystring-shares-vs-stored-share-pages.html +1 -1
  16. package/dist/web/compare/querystring-shares-vs-stored-share-pages.txt +1 -1
  17. package/dist/web/compare/session-breakdown-vs-model-breakdown.html +1 -1
  18. package/dist/web/compare/session-breakdown-vs-model-breakdown.txt +1 -1
  19. package/dist/web/compare/single-source-vs-combined-tracking.html +1 -1
  20. package/dist/web/compare/single-source-vs-combined-tracking.txt +1 -1
  21. package/dist/web/compare/terminal-table-vs-json-output.html +1 -1
  22. package/dist/web/compare/terminal-table-vs-json-output.txt +1 -1
  23. package/dist/web/compare/token-volume-vs-cost-estimation.html +1 -1
  24. package/dist/web/compare/token-volume-vs-cost-estimation.txt +1 -1
  25. package/dist/web/compare/wrapped-vs-activity-heatmap.html +1 -1
  26. package/dist/web/compare/wrapped-vs-activity-heatmap.txt +1 -1
  27. package/dist/web/compare.html +1 -1
  28. package/dist/web/compare.txt +1 -1
  29. package/dist/web/dashboard/activity.html +1 -1
  30. package/dist/web/dashboard/activity.txt +1 -1
  31. package/dist/web/dashboard/usage.html +1 -1
  32. package/dist/web/dashboard/usage.txt +1 -1
  33. package/dist/web/dashboard/wrapped.html +1 -1
  34. package/dist/web/dashboard/wrapped.txt +1 -1
  35. package/dist/web/dashboard.html +1 -1
  36. package/dist/web/dashboard.txt +1 -1
  37. package/dist/web/docs/commands.html +1 -1
  38. package/dist/web/docs/commands.txt +1 -1
  39. package/dist/web/docs.html +1 -1
  40. package/dist/web/docs.txt +1 -1
  41. package/dist/web/features/ai-coding-activity-heatmap.html +1 -1
  42. package/dist/web/features/ai-coding-activity-heatmap.txt +1 -1
  43. package/dist/web/features/ai-coding-wrapped.html +1 -1
  44. package/dist/web/features/ai-coding-wrapped.txt +1 -1
  45. package/dist/web/features/claude-code-stats.html +1 -1
  46. package/dist/web/features/claude-code-stats.txt +1 -1
  47. package/dist/web/features/claude-diagnostics.html +1 -1
  48. package/dist/web/features/claude-diagnostics.txt +1 -1
  49. package/dist/web/features/codex-cli-stats.html +1 -1
  50. package/dist/web/features/codex-cli-stats.txt +1 -1
  51. package/dist/web/features/combined-ai-coding-stats.html +1 -1
  52. package/dist/web/features/combined-ai-coding-stats.txt +1 -1
  53. package/dist/web/features/json-and-automation-exports.html +1 -1
  54. package/dist/web/features/json-and-automation-exports.txt +1 -1
  55. package/dist/web/features/model-breakdown.html +1 -1
  56. package/dist/web/features/model-breakdown.txt +1 -1
  57. package/dist/web/features/privacy-first-analytics.html +1 -1
  58. package/dist/web/features/privacy-first-analytics.txt +1 -1
  59. package/dist/web/features/session-breakdown.html +1 -1
  60. package/dist/web/features/session-breakdown.txt +1 -1
  61. package/dist/web/features/share-pages.html +1 -1
  62. package/dist/web/features/share-pages.txt +1 -1
  63. package/dist/web/features/token-and-cost-tracking.html +1 -1
  64. package/dist/web/features/token-and-cost-tracking.txt +1 -1
  65. package/dist/web/features.html +1 -1
  66. package/dist/web/features.txt +1 -1
  67. package/dist/web/guides/how-to-build-ai-activity-heatmap.html +1 -1
  68. package/dist/web/guides/how-to-build-ai-activity-heatmap.txt +1 -1
  69. package/dist/web/guides/how-to-compare-model-usage.html +1 -1
  70. package/dist/web/guides/how-to-compare-model-usage.txt +1 -1
  71. package/dist/web/guides/how-to-create-ai-coding-wrapped.html +1 -1
  72. package/dist/web/guides/how-to-create-ai-coding-wrapped.txt +1 -1
  73. package/dist/web/guides/how-to-measure-ai-token-costs.html +1 -1
  74. package/dist/web/guides/how-to-measure-ai-token-costs.txt +1 -1
  75. package/dist/web/guides/how-to-read-claude-diagnostics.html +1 -1
  76. package/dist/web/guides/how-to-read-claude-diagnostics.txt +1 -1
  77. package/dist/web/guides/how-to-share-ai-coding-stats.html +1 -1
  78. package/dist/web/guides/how-to-share-ai-coding-stats.txt +1 -1
  79. package/dist/web/guides/how-to-track-claude-code-usage.html +1 -1
  80. package/dist/web/guides/how-to-track-claude-code-usage.txt +1 -1
  81. package/dist/web/guides/how-to-track-codex-cli-usage.html +1 -1
  82. package/dist/web/guides/how-to-track-codex-cli-usage.txt +1 -1
  83. package/dist/web/guides.html +1 -1
  84. package/dist/web/guides.txt +1 -1
  85. package/dist/web/index.html +1 -1
  86. package/dist/web/index.txt +1 -1
  87. package/dist/web/sitemap.xml +46 -46
  88. package/dist/web/use-cases/ai-agencies.html +1 -1
  89. package/dist/web/use-cases/ai-agencies.txt +1 -1
  90. package/dist/web/use-cases/consultants.html +1 -1
  91. package/dist/web/use-cases/consultants.txt +1 -1
  92. package/dist/web/use-cases/engineering-managers.html +1 -1
  93. package/dist/web/use-cases/engineering-managers.txt +1 -1
  94. package/dist/web/use-cases/freelancers.html +1 -1
  95. package/dist/web/use-cases/freelancers.txt +1 -1
  96. package/dist/web/use-cases/indie-hackers.html +1 -1
  97. package/dist/web/use-cases/indie-hackers.txt +1 -1
  98. package/dist/web/use-cases/monthly-reporting.html +1 -1
  99. package/dist/web/use-cases/monthly-reporting.txt +1 -1
  100. package/dist/web/use-cases/open-source-maintainers.html +1 -1
  101. package/dist/web/use-cases/open-source-maintainers.txt +1 -1
  102. package/dist/web/use-cases/personal-retrospectives.html +1 -1
  103. package/dist/web/use-cases/personal-retrospectives.txt +1 -1
  104. package/dist/web/use-cases/researchers.html +1 -1
  105. package/dist/web/use-cases/researchers.txt +1 -1
  106. package/dist/web/use-cases/weekly-reviews.html +1 -1
  107. package/dist/web/use-cases/weekly-reviews.txt +1 -1
  108. package/dist/web/use-cases.html +1 -1
  109. package/dist/web/use-cases.txt +1 -1
  110. package/dist/web/wrapped.html +1 -1
  111. package/dist/web/wrapped.txt +1 -1
  112. package/package.json +8 -7
  113. /package/dist/web/_next/static/{gPirvBMhpRSdtR0tsMj2H → 3pcP-Y7gHe02EnmTXxc9b}/_buildManifest.js +0 -0
  114. /package/dist/web/_next/static/{gPirvBMhpRSdtR0tsMj2H → 3pcP-Y7gHe02EnmTXxc9b}/_ssgManifest.js +0 -0
package/dist/index.js CHANGED
@@ -4,6 +4,7 @@
4
4
  import { defineCommand, runMain } from "citty";
5
5
 
6
6
  // src/codex-pricing.ts
7
+ var GPT_55_PRICING = { input: 5, output: 30, cachedInput: 0.5 };
7
8
  var GPT_54_PRICING = { input: 2.5, output: 15, cachedInput: 0.25 };
8
9
  var GPT_53_PRICING = { input: 1.75, output: 14, cachedInput: 0.175 };
9
10
  var GPT_51_PRICING = { input: 1.25, output: 10, cachedInput: 0.125 };
@@ -12,6 +13,15 @@ var GPT_5_NANO_PRICING = { input: 0.05, output: 0.4, cachedInput: 5e-3 };
12
13
  var GPT_4O_PRICING = { input: 2.5, output: 10, cachedInput: 1.25 };
13
14
  var GPT_4O_MINI_PRICING = { input: 0.15, output: 0.6, cachedInput: 0.075 };
14
15
  var CODEX_MODEL_DEFINITIONS = [
16
+ {
17
+ key: "gpt-5.5",
18
+ displayName: "GPT-5.5",
19
+ token: "g55",
20
+ sortPriority: 78,
21
+ pricing: GPT_55_PRICING,
22
+ aliases: ["GPT-5.5"],
23
+ exactNames: ["gpt-5.5"]
24
+ },
15
25
  {
16
26
  key: "gpt-5.4",
17
27
  displayName: "GPT-5.4",
@@ -4020,7 +4030,7 @@ async function runDashboard(args, config) {
4020
4030
  }
4021
4031
 
4022
4032
  // src/cli-intent.ts
4023
- var COMMANDS = /* @__PURE__ */ new Set(["usage", "limits", "limit", "pace"]);
4033
+ var COMMANDS = /* @__PURE__ */ new Set(["usage", "limits", "limit", "pace", "monitor"]);
4024
4034
  var SCOPES = /* @__PURE__ */ new Set(["claude", "codex", "all", "combined"]);
4025
4035
  var USAGE_COMMAND_FLAGS = /* @__PURE__ */ new Set([
4026
4036
  "activity",
@@ -4170,7 +4180,7 @@ function resolveCliIntent(argv) {
4170
4180
  const positionals = collectPositionals(argv);
4171
4181
  const first = positionals[0]?.toLowerCase();
4172
4182
  const parsedFlags = parseRawFlags(argv);
4173
- let command = first === "limits" || first === "limit" || first === "pace" ? "limits" : "usage";
4183
+ let command = first === "monitor" ? "monitor" : first === "limits" || first === "limit" || first === "pace" ? "limits" : "usage";
4174
4184
  const error = resolveIntentError(positionals);
4175
4185
  const scopeToken = positionals.find((token, index) => {
4176
4186
  const lower = token.toLowerCase();
@@ -5190,6 +5200,7 @@ function printCommandHelp(error) {
5190
5200
  console.error(" vibestats usage --combined --daily");
5191
5201
  console.error(" vibestats usage codex --total");
5192
5202
  console.error(" vibestats wrapped");
5203
+ console.error(" vibestats monitor --json");
5193
5204
  console.error("");
5194
5205
  console.error("Run `vibestats --help` for all flags.");
5195
5206
  }
@@ -5335,7 +5346,7 @@ async function publishArtifactWithFallback(artifact, baseUrl, fallbackUrl, prefe
5335
5346
  var main = defineCommand({
5336
5347
  meta: {
5337
5348
  name: "vibestats",
5338
- version: "1.4.1",
5349
+ version: "1.4.2",
5339
5350
  description: "AI coding stats - usage tracking and annual wrapped for Claude Code & Codex"
5340
5351
  },
5341
5352
  args: {
@@ -5517,6 +5528,10 @@ var main = defineCommand({
5517
5528
  await runLiveLimits(normalizedArgs, config);
5518
5529
  return;
5519
5530
  }
5531
+ if (intent.command === "monitor") {
5532
+ await runMonitor(normalizedArgs);
5533
+ return;
5534
+ }
5520
5535
  if (normalizedArgs.dashboard) {
5521
5536
  await runDashboard(normalizedArgs, config);
5522
5537
  return;
@@ -5530,6 +5545,51 @@ var main = defineCommand({
5530
5545
  }
5531
5546
  }
5532
5547
  });
5548
+ async function runMonitor(args) {
5549
+ const families = getSelectedModelFamilies(args);
5550
+ const scopeLabel = formatModelFamilyLabel(families);
5551
+ const cacheOptions = getUsageCacheOptions(args);
5552
+ const createdAt = (/* @__PURE__ */ new Date()).toISOString();
5553
+ const [claudeUsage, codexUsage, data] = await Promise.all([
5554
+ loadUsageStats({
5555
+ aggregation: "daily",
5556
+ codexOnly: false,
5557
+ combined: false,
5558
+ families,
5559
+ scopeLabel,
5560
+ ...cacheOptions
5561
+ }),
5562
+ loadUsageStats({
5563
+ aggregation: "daily",
5564
+ codexOnly: true,
5565
+ combined: false,
5566
+ families,
5567
+ scopeLabel,
5568
+ ...cacheOptions
5569
+ }),
5570
+ loadData({
5571
+ codexOnly: false,
5572
+ combined: true,
5573
+ families,
5574
+ scopeLabel,
5575
+ ...cacheOptions
5576
+ })
5577
+ ]);
5578
+ const claudeWrapped = data.claude ? computeWrappedStats(data.claude) : null;
5579
+ const codexWrapped = data.codex ? computeCodexWrappedStats(data.codex) : null;
5580
+ if (scopeLabel) {
5581
+ if (claudeWrapped) claudeWrapped.scopeLabel = scopeLabel;
5582
+ if (codexWrapped) codexWrapped.scopeLabel = scopeLabel;
5583
+ }
5584
+ console.log(JSON.stringify({
5585
+ schemaVersion: 1,
5586
+ createdAt,
5587
+ claude: claudeUsage,
5588
+ codex: codexUsage,
5589
+ wrapped: claudeWrapped,
5590
+ codexWrapped
5591
+ }, null, args.json === false ? 0 : 2));
5592
+ }
5533
5593
  async function runUsage(args, config) {
5534
5594
  const families = getSelectedModelFamilies(args);
5535
5595
  const scopeLabel = formatModelFamilyLabel(families);
package/dist/web/404.html CHANGED
@@ -1 +1 @@
1
- <!DOCTYPE html><!--gPirvBMhpRSdtR0tsMj2H--><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><link rel="preload" href="https://analytics.wolfai.dev/wolf-analytics.min.js" as="script"/><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>vibestats</title><meta name="description" content="Track Claude Code and OpenAI Codex CLI usage locally. Generate token, cost, wrapped, activity, and share reports without uploading prompts or responses."/><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"/><meta name="robots" content="index, follow"/><link rel="canonical" href="https://vibestats.wolfai.dev"/><meta property="og:title" content="vibestats"/><meta property="og:description" content="Track Claude Code and OpenAI Codex CLI usage locally. Generate token, cost, wrapped, activity, and share reports without uploading prompts or responses."/><meta property="og:url" content="https://vibestats.wolfai.dev"/><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="vibestats"/><meta name="twitter:description" content="Track Claude Code and OpenAI Codex CLI usage locally. Generate token, cost, wrapped, activity, and share reports without uploading prompts or responses."/><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><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>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)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><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,[],\"\"]\n5:I[496,[],\"OutletBoundary\"]\n7:I[3737,[],\"AsyncMetadataOutlet\"]\n9:I[496,[],\"ViewportBoundary\"]\nb:I[496,[],\"MetadataBoundary\"]\nc:\"$Sreact.suspense\"\ne:I[2207,[],\"\"]\n:HL[\"/_next/static/css/335de1248158d380.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"gPirvBMhpRSdtR0tsMj2H\",\"p\":\"\",\"c\":[\"\",\"_not-found\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"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\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],{\"children\":[\"/_not-found\",[\"$\",\"$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\":[[[\"$\",\"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.\"}]}]]}]}]],null,[\"$\",\"$L5\",null,{\"children\":[\"$L6\",[\"$\",\"$L7\",null,{\"promise\":\"$@8\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[[\"$\",\"$L9\",null,{\"children\":\"$La\"}],null],[\"$\",\"$Lb\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$c\",null,{\"fallback\":null,\"children\":\"$Ld\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"a:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n6:null\n"])</script><script>self.__next_f.push([1,"8:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"vibestats\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Track Claude Code and OpenAI Codex CLI usage locally. Generate token, cost, wrapped, activity, and share reports without uploading prompts or responses.\"}],[\"$\",\"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\"}],[\"$\",\"meta\",\"4\",{\"name\":\"robots\",\"content\":\"index, follow\"}],[\"$\",\"link\",\"5\",{\"rel\":\"canonical\",\"href\":\"https://vibestats.wolfai.dev\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:title\",\"content\":\"vibestats\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:description\",\"content\":\"Track Claude Code and OpenAI Codex CLI usage locally. Generate token, cost, wrapped, activity, and share reports without uploading prompts or responses.\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:url\",\"content\":\"https://vibestats.wolfai.dev\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:site_name\",\"content\":\"vibestats\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:locale\",\"content\":\"en_US\"}],[\"$\",\"meta\",\"11\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"12\",{\"name\":\"twitter:card\",\"content\":\"summary\"}],[\"$\",\"meta\",\"13\",{\"name\":\"twitter:title\",\"content\":\"vibestats\"}],[\"$\",\"meta\",\"14\",{\"name\":\"twitter:description\",\"content\":\"Track Claude Code and OpenAI Codex CLI usage locally. Generate token, cost, wrapped, activity, and share reports without uploading prompts or responses.\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"d:\"$8:metadata\"\n"])</script></body></html>
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><link rel="preload" href="https://analytics.wolfai.dev/wolf-analytics.min.js" as="script"/><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>vibestats</title><meta name="description" content="Track Claude Code and OpenAI Codex CLI usage locally. Generate token, cost, wrapped, activity, and share reports without uploading prompts or responses."/><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"/><meta name="robots" content="index, follow"/><link rel="canonical" href="https://vibestats.wolfai.dev"/><meta property="og:title" content="vibestats"/><meta property="og:description" content="Track Claude Code and OpenAI Codex CLI usage locally. Generate token, cost, wrapped, activity, and share reports without uploading prompts or responses."/><meta property="og:url" content="https://vibestats.wolfai.dev"/><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="vibestats"/><meta name="twitter:description" content="Track Claude Code and OpenAI Codex CLI usage locally. Generate token, cost, wrapped, activity, and share reports without uploading prompts or responses."/><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><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>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)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><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,[],\"\"]\n5:I[496,[],\"OutletBoundary\"]\n7:I[3737,[],\"AsyncMetadataOutlet\"]\n9:I[496,[],\"ViewportBoundary\"]\nb:I[496,[],\"MetadataBoundary\"]\nc:\"$Sreact.suspense\"\ne: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\":[\"\",\"_not-found\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"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\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],{\"children\":[\"/_not-found\",[\"$\",\"$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\":[[[\"$\",\"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.\"}]}]]}]}]],null,[\"$\",\"$L5\",null,{\"children\":[\"$L6\",[\"$\",\"$L7\",null,{\"promise\":\"$@8\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[[\"$\",\"$L9\",null,{\"children\":\"$La\"}],null],[\"$\",\"$Lb\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$c\",null,{\"fallback\":null,\"children\":\"$Ld\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"a:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n6:null\n"])</script><script>self.__next_f.push([1,"8:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"vibestats\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Track Claude Code and OpenAI Codex CLI usage locally. Generate token, cost, wrapped, activity, and share reports without uploading prompts or responses.\"}],[\"$\",\"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\"}],[\"$\",\"meta\",\"4\",{\"name\":\"robots\",\"content\":\"index, follow\"}],[\"$\",\"link\",\"5\",{\"rel\":\"canonical\",\"href\":\"https://vibestats.wolfai.dev\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:title\",\"content\":\"vibestats\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:description\",\"content\":\"Track Claude Code and OpenAI Codex CLI usage locally. Generate token, cost, wrapped, activity, and share reports without uploading prompts or responses.\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:url\",\"content\":\"https://vibestats.wolfai.dev\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:site_name\",\"content\":\"vibestats\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:locale\",\"content\":\"en_US\"}],[\"$\",\"meta\",\"11\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"12\",{\"name\":\"twitter:card\",\"content\":\"summary\"}],[\"$\",\"meta\",\"13\",{\"name\":\"twitter:title\",\"content\":\"vibestats\"}],[\"$\",\"meta\",\"14\",{\"name\":\"twitter:description\",\"content\":\"Track Claude Code and OpenAI Codex CLI usage locally. Generate token, cost, wrapped, activity, and share reports without uploading prompts or responses.\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"d:\"$8:metadata\"\n"])</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><!--gPirvBMhpRSdtR0tsMj2H--><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/activity/page-5d0587c1d5910e68.js" async=""></script><link rel="preload" href="https://analytics.wolfai.dev/wolf-analytics.min.js" as="script"/><title>AI Coding Activity Heatmaps | vibestats</title><meta name="description" content="Publish GitHub-style activity heatmaps for Claude Code and Codex CLI usage with daily totals, streaks, and image-friendly share pages."/><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,coding activity heatmap,Claude Code activity,Codex activity,developer streak tracker"/><link rel="canonical" href="https://vibestats.wolfai.dev/activity"/><meta property="og:title" content="AI Coding Activity Heatmaps | vibestats"/><meta property="og:description" content="Publish GitHub-style activity heatmaps for Claude Code and Codex CLI usage with daily totals, streaks, and image-friendly share pages."/><meta property="og:url" content="https://vibestats.wolfai.dev/activity"/><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="AI Coding Activity Heatmaps | vibestats"/><meta name="twitter:description" content="Publish GitHub-style activity heatmaps for Claude Code and Codex CLI usage with daily totals, streaks, and image-friendly share pages."/><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><script type="application/ld+json">{"@context":"https://schema.org","@type":"WebPage","name":"vibestats activity","description":"GitHub-style AI coding activity heatmaps for Claude Code and Codex CLI usage, with daily totals, streaks, and image-friendly sharing.","url":"https://vibestats.wolfai.dev/activity","isPartOf":{"@type":"WebSite","name":"vibestats","url":"https://vibestats.wolfai.dev/"}}</script><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%)] text-slate-900 px-4 py-8 md:px-8 md:py-12"><div class="mx-auto max-w-7xl"><header class="border border-white/70 bg-white/80 shadow-[0_30px_80px_rgba(191,104,24,0.12)] backdrop-blur mb-10 rounded-[2rem] px-6 py-8 md:px-10"><p class="text-[0.72rem] font-semibold uppercase tracking-[0.28em] text-slate-500">Vibestats Activity</p><h1 class="max-w-4xl font-[family-name:var(--font-display)] leading-none text-slate-950 mt-4 text-5xl md:text-7xl">GitHub-style activity heatmaps for AI coding.</h1><p class="mt-5 text-base leading-7 md:text-lg max-w-3xl text-slate-600">Generate calendar-style coding views from local Claude Code and Codex CLI usage. Share them as hosted pages or render them as images for updates and retrospectives.</p></header><div class="grid gap-4 lg:grid-cols-[1.15fr_0.85fr]"><article class="rounded-[2rem] 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">Command</p><code class="mt-4 block rounded-[1.2rem] bg-slate-100 px-4 py-4 text-sm text-slate-700">npx vibestats --activity --share --days 365</code><p class="mt-5 text-sm leading-7 text-slate-600">Activity pages summarize daily coding intensity, streaks, top models, sessions, and rolling totals from aggregate local usage data.</p></article><article class="rounded-[2rem] 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">Good for</p><ul class="mt-4 space-y-3 text-sm leading-7 text-slate-600"><li>Weekly or monthly coding retrospectives</li><li>Shareable streak and activity snapshots</li><li>Comparing input, output, session, and message patterns over time</li></ul></article></div><section class="mt-6 grid gap-4 md:grid-cols-3"><a class="rounded-[1.4rem] border border-slate-200 bg-white/95 px-5 py-5 shadow-[0_20px_40px_rgba(15,23,42,0.06)] transition hover:border-orange-300" href="/docs/commands#activity-wrapped"><strong class="block text-lg text-slate-950">Command reference</strong><span class="mt-2 block text-sm leading-6 text-slate-600">Find the activity flags, metrics, and share options.</span></a><a class="rounded-[1.4rem] border border-slate-200 bg-white/95 px-5 py-5 shadow-[0_20px_40px_rgba(15,23,42,0.06)] transition hover:border-orange-300" href="/wrapped"><strong class="block text-lg text-slate-950">Wrapped summaries</strong><span class="mt-2 block text-sm leading-6 text-slate-600">Combine yearly recap pages with a heatmap view of your coding rhythm.</span></a><a class="rounded-[1.4rem] border border-slate-200 bg-white/95 px-5 py-5 shadow-[0_20px_40px_rgba(15,23,42,0.06)] transition hover:border-orange-300" href="/changelog"><strong class="block text-lg text-slate-950">Recent releases</strong><span class="mt-2 block text-sm leading-6 text-slate-600">See when activity graphs, share artifacts, and web hosting landed.</span></a></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\":\"gPirvBMhpRSdtR0tsMj2H\",\"p\":\"\",\"c\":[\"\",\"activity\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"activity\",{\"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\":[\"activity\",[\"$\",\"$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],[\"$\",\"$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,"10:I[4816,[\"816\",\"static/chunks/816-8960921093d57453.js\",\"866\",\"static/chunks/app/activity/page-5d0587c1d5910e68.js\"],\"\"]\n"])</script><script>self.__next_f.push([1,"5:[[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"WebPage\\\",\\\"name\\\":\\\"vibestats activity\\\",\\\"description\\\":\\\"GitHub-style AI coding activity heatmaps for Claude Code and Codex CLI usage, with daily totals, streaks, and image-friendly sharing.\\\",\\\"url\\\":\\\"https://vibestats.wolfai.dev/activity\\\",\\\"isPartOf\\\":{\\\"@type\\\":\\\"WebSite\\\",\\\"name\\\":\\\"vibestats\\\",\\\"url\\\":\\\"https://vibestats.wolfai.dev/\\\"}}\"}}],[\"$\",\"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%)] text-slate-900 px-4 py-8 md:px-8 md:py-12\",\"children\":[\"$\",\"div\",null,{\"className\":\"mx-auto max-w-7xl\",\"children\":[[\"$\",\"header\",null,{\"className\":\"border border-white/70 bg-white/80 shadow-[0_30px_80px_rgba(191,104,24,0.12)] backdrop-blur mb-10 rounded-[2rem] px-6 py-8 md:px-10\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-[0.72rem] font-semibold uppercase tracking-[0.28em] text-slate-500\",\"children\":\"Vibestats Activity\"}],[\"$\",\"h1\",null,{\"className\":\"max-w-4xl font-[family-name:var(--font-display)] leading-none text-slate-950 mt-4 text-5xl md:text-7xl\",\"children\":\"GitHub-style activity heatmaps for AI coding.\"}],[\"$\",\"p\",null,{\"className\":\"mt-5 text-base leading-7 md:text-lg max-w-3xl text-slate-600\",\"children\":\"Generate calendar-style coding views from local Claude Code and Codex CLI usage. Share them as hosted pages or render them as images for updates and retrospectives.\"}]]}],[[\"$\",\"div\",null,{\"className\":\"grid gap-4 lg:grid-cols-[1.15fr_0.85fr]\",\"children\":[[\"$\",\"article\",null,{\"className\":\"rounded-[2rem] 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\":\"Command\"}],[\"$\",\"code\",null,{\"className\":\"mt-4 block rounded-[1.2rem] bg-slate-100 px-4 py-4 text-sm text-slate-700\",\"children\":\"npx vibestats --activity --share --days 365\"}],[\"$\",\"p\",null,{\"className\":\"mt-5 text-sm leading-7 text-slate-600\",\"children\":\"Activity pages summarize daily coding intensity, streaks, top models, sessions, and rolling totals from aggregate local usage data.\"}]]}],[\"$\",\"article\",null,{\"className\":\"rounded-[2rem] 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\":\"Good for\"}],[\"$\",\"ul\",null,{\"className\":\"mt-4 space-y-3 text-sm leading-7 text-slate-600\",\"children\":[[\"$\",\"li\",null,{\"children\":\"Weekly or monthly coding retrospectives\"}],[\"$\",\"li\",null,{\"children\":\"Shareable streak and activity snapshots\"}],[\"$\",\"li\",null,{\"children\":\"Comparing input, output, session, and message patterns over time\"}]]}]]}]]}],[\"$\",\"section\",null,{\"className\":\"mt-6 grid gap-4 md:grid-cols-3\",\"children\":[[\"$\",\"$L10\",null,{\"className\":\"rounded-[1.4rem] border border-slate-200 bg-white/95 px-5 py-5 shadow-[0_20px_40px_rgba(15,23,42,0.06)] transition hover:border-orange-300\",\"href\":\"/docs/commands#activity-wrapped\",\"children\":[[\"$\",\"strong\",null,{\"className\":\"block text-lg text-slate-950\",\"children\":\"Command reference\"}],[\"$\",\"span\",null,{\"className\":\"mt-2 block text-sm leading-6 text-slate-600\",\"children\":\"Find the activity flags, metrics, and share options.\"}]]}],[\"$\",\"$L10\",null,{\"className\":\"rounded-[1.4rem] border border-slate-200 bg-white/95 px-5 py-5 shadow-[0_20px_40px_rgba(15,23,42,0.06)] transition hover:border-orange-300\",\"href\":\"/wrapped\",\"children\":[[\"$\",\"strong\",null,{\"className\":\"block text-lg text-slate-950\",\"children\":\"Wrapped summaries\"}],[\"$\",\"span\",null,{\"className\":\"mt-2 block text-sm leading-6 text-slate-600\",\"children\":\"Combine yearly recap pages with a heatmap view of your coding rhythm.\"}]]}],\"$L11\"]}]]]}]}]]\n"])</script><script>self.__next_f.push([1,"11:[\"$\",\"$L10\",null,{\"className\":\"rounded-[1.4rem] border border-slate-200 bg-white/95 px-5 py-5 shadow-[0_20px_40px_rgba(15,23,42,0.06)] transition hover:border-orange-300\",\"href\":\"/changelog\",\"children\":[[\"$\",\"strong\",null,{\"className\":\"block text-lg text-slate-950\",\"children\":\"Recent releases\"}],[\"$\",\"span\",null,{\"className\":\"mt-2 block text-sm leading-6 text-slate-600\",\"children\":\"See when activity graphs, share artifacts, and web hosting landed.\"}]]}]\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\":\"AI Coding Activity Heatmaps | vibestats\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Publish GitHub-style activity heatmaps for Claude Code and Codex CLI usage with daily totals, streaks, and image-friendly share pages.\"}],[\"$\",\"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,coding activity heatmap,Claude Code activity,Codex activity,developer streak tracker\"}],[\"$\",\"link\",\"4\",{\"rel\":\"canonical\",\"href\":\"https://vibestats.wolfai.dev/activity\"}],[\"$\",\"meta\",\"5\",{\"property\":\"og:title\",\"content\":\"AI Coding Activity Heatmaps | vibestats\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:description\",\"content\":\"Publish GitHub-style activity heatmaps for Claude Code and Codex CLI usage with daily totals, streaks, and image-friendly share pages.\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:url\",\"content\":\"https://vibestats.wolfai.dev/activity\"}],[\"$\",\"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\":\"AI Coding Activity Heatmaps | vibestats\"}],[\"$\",\"meta\",\"13\",{\"name\":\"twitter:description\",\"content\":\"Publish GitHub-style activity heatmaps for Claude Code and Codex CLI usage with daily totals, streaks, and image-friendly share pages.\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"e:\"$9:metadata\"\n"])</script></body></html>
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/activity/page-5d0587c1d5910e68.js" async=""></script><link rel="preload" href="https://analytics.wolfai.dev/wolf-analytics.min.js" as="script"/><title>AI Coding Activity Heatmaps | vibestats</title><meta name="description" content="Publish GitHub-style activity heatmaps for Claude Code and Codex CLI usage with daily totals, streaks, and image-friendly share pages."/><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,coding activity heatmap,Claude Code activity,Codex activity,developer streak tracker"/><link rel="canonical" href="https://vibestats.wolfai.dev/activity"/><meta property="og:title" content="AI Coding Activity Heatmaps | vibestats"/><meta property="og:description" content="Publish GitHub-style activity heatmaps for Claude Code and Codex CLI usage with daily totals, streaks, and image-friendly share pages."/><meta property="og:url" content="https://vibestats.wolfai.dev/activity"/><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="AI Coding Activity Heatmaps | vibestats"/><meta name="twitter:description" content="Publish GitHub-style activity heatmaps for Claude Code and Codex CLI usage with daily totals, streaks, and image-friendly share pages."/><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><script type="application/ld+json">{"@context":"https://schema.org","@type":"WebPage","name":"vibestats activity","description":"GitHub-style AI coding activity heatmaps for Claude Code and Codex CLI usage, with daily totals, streaks, and image-friendly sharing.","url":"https://vibestats.wolfai.dev/activity","isPartOf":{"@type":"WebSite","name":"vibestats","url":"https://vibestats.wolfai.dev/"}}</script><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%)] text-slate-900 px-4 py-8 md:px-8 md:py-12"><div class="mx-auto max-w-7xl"><header class="border border-white/70 bg-white/80 shadow-[0_30px_80px_rgba(191,104,24,0.12)] backdrop-blur mb-10 rounded-[2rem] px-6 py-8 md:px-10"><p class="text-[0.72rem] font-semibold uppercase tracking-[0.28em] text-slate-500">Vibestats Activity</p><h1 class="max-w-4xl font-[family-name:var(--font-display)] leading-none text-slate-950 mt-4 text-5xl md:text-7xl">GitHub-style activity heatmaps for AI coding.</h1><p class="mt-5 text-base leading-7 md:text-lg max-w-3xl text-slate-600">Generate calendar-style coding views from local Claude Code and Codex CLI usage. Share them as hosted pages or render them as images for updates and retrospectives.</p></header><div class="grid gap-4 lg:grid-cols-[1.15fr_0.85fr]"><article class="rounded-[2rem] 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">Command</p><code class="mt-4 block rounded-[1.2rem] bg-slate-100 px-4 py-4 text-sm text-slate-700">npx vibestats --activity --share --days 365</code><p class="mt-5 text-sm leading-7 text-slate-600">Activity pages summarize daily coding intensity, streaks, top models, sessions, and rolling totals from aggregate local usage data.</p></article><article class="rounded-[2rem] 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">Good for</p><ul class="mt-4 space-y-3 text-sm leading-7 text-slate-600"><li>Weekly or monthly coding retrospectives</li><li>Shareable streak and activity snapshots</li><li>Comparing input, output, session, and message patterns over time</li></ul></article></div><section class="mt-6 grid gap-4 md:grid-cols-3"><a class="rounded-[1.4rem] border border-slate-200 bg-white/95 px-5 py-5 shadow-[0_20px_40px_rgba(15,23,42,0.06)] transition hover:border-orange-300" href="/docs/commands#activity-wrapped"><strong class="block text-lg text-slate-950">Command reference</strong><span class="mt-2 block text-sm leading-6 text-slate-600">Find the activity flags, metrics, and share options.</span></a><a class="rounded-[1.4rem] border border-slate-200 bg-white/95 px-5 py-5 shadow-[0_20px_40px_rgba(15,23,42,0.06)] transition hover:border-orange-300" href="/wrapped"><strong class="block text-lg text-slate-950">Wrapped summaries</strong><span class="mt-2 block text-sm leading-6 text-slate-600">Combine yearly recap pages with a heatmap view of your coding rhythm.</span></a><a class="rounded-[1.4rem] border border-slate-200 bg-white/95 px-5 py-5 shadow-[0_20px_40px_rgba(15,23,42,0.06)] transition hover:border-orange-300" href="/changelog"><strong class="block text-lg text-slate-950">Recent releases</strong><span class="mt-2 block text-sm leading-6 text-slate-600">See when activity graphs, share artifacts, and web hosting landed.</span></a></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\":[\"\",\"activity\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"activity\",{\"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\":[\"activity\",[\"$\",\"$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],[\"$\",\"$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,"10:I[4816,[\"816\",\"static/chunks/816-8960921093d57453.js\",\"866\",\"static/chunks/app/activity/page-5d0587c1d5910e68.js\"],\"\"]\n"])</script><script>self.__next_f.push([1,"5:[[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"WebPage\\\",\\\"name\\\":\\\"vibestats activity\\\",\\\"description\\\":\\\"GitHub-style AI coding activity heatmaps for Claude Code and Codex CLI usage, with daily totals, streaks, and image-friendly sharing.\\\",\\\"url\\\":\\\"https://vibestats.wolfai.dev/activity\\\",\\\"isPartOf\\\":{\\\"@type\\\":\\\"WebSite\\\",\\\"name\\\":\\\"vibestats\\\",\\\"url\\\":\\\"https://vibestats.wolfai.dev/\\\"}}\"}}],[\"$\",\"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%)] text-slate-900 px-4 py-8 md:px-8 md:py-12\",\"children\":[\"$\",\"div\",null,{\"className\":\"mx-auto max-w-7xl\",\"children\":[[\"$\",\"header\",null,{\"className\":\"border border-white/70 bg-white/80 shadow-[0_30px_80px_rgba(191,104,24,0.12)] backdrop-blur mb-10 rounded-[2rem] px-6 py-8 md:px-10\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-[0.72rem] font-semibold uppercase tracking-[0.28em] text-slate-500\",\"children\":\"Vibestats Activity\"}],[\"$\",\"h1\",null,{\"className\":\"max-w-4xl font-[family-name:var(--font-display)] leading-none text-slate-950 mt-4 text-5xl md:text-7xl\",\"children\":\"GitHub-style activity heatmaps for AI coding.\"}],[\"$\",\"p\",null,{\"className\":\"mt-5 text-base leading-7 md:text-lg max-w-3xl text-slate-600\",\"children\":\"Generate calendar-style coding views from local Claude Code and Codex CLI usage. Share them as hosted pages or render them as images for updates and retrospectives.\"}]]}],[[\"$\",\"div\",null,{\"className\":\"grid gap-4 lg:grid-cols-[1.15fr_0.85fr]\",\"children\":[[\"$\",\"article\",null,{\"className\":\"rounded-[2rem] 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\":\"Command\"}],[\"$\",\"code\",null,{\"className\":\"mt-4 block rounded-[1.2rem] bg-slate-100 px-4 py-4 text-sm text-slate-700\",\"children\":\"npx vibestats --activity --share --days 365\"}],[\"$\",\"p\",null,{\"className\":\"mt-5 text-sm leading-7 text-slate-600\",\"children\":\"Activity pages summarize daily coding intensity, streaks, top models, sessions, and rolling totals from aggregate local usage data.\"}]]}],[\"$\",\"article\",null,{\"className\":\"rounded-[2rem] 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\":\"Good for\"}],[\"$\",\"ul\",null,{\"className\":\"mt-4 space-y-3 text-sm leading-7 text-slate-600\",\"children\":[[\"$\",\"li\",null,{\"children\":\"Weekly or monthly coding retrospectives\"}],[\"$\",\"li\",null,{\"children\":\"Shareable streak and activity snapshots\"}],[\"$\",\"li\",null,{\"children\":\"Comparing input, output, session, and message patterns over time\"}]]}]]}]]}],[\"$\",\"section\",null,{\"className\":\"mt-6 grid gap-4 md:grid-cols-3\",\"children\":[[\"$\",\"$L10\",null,{\"className\":\"rounded-[1.4rem] border border-slate-200 bg-white/95 px-5 py-5 shadow-[0_20px_40px_rgba(15,23,42,0.06)] transition hover:border-orange-300\",\"href\":\"/docs/commands#activity-wrapped\",\"children\":[[\"$\",\"strong\",null,{\"className\":\"block text-lg text-slate-950\",\"children\":\"Command reference\"}],[\"$\",\"span\",null,{\"className\":\"mt-2 block text-sm leading-6 text-slate-600\",\"children\":\"Find the activity flags, metrics, and share options.\"}]]}],[\"$\",\"$L10\",null,{\"className\":\"rounded-[1.4rem] border border-slate-200 bg-white/95 px-5 py-5 shadow-[0_20px_40px_rgba(15,23,42,0.06)] transition hover:border-orange-300\",\"href\":\"/wrapped\",\"children\":[[\"$\",\"strong\",null,{\"className\":\"block text-lg text-slate-950\",\"children\":\"Wrapped summaries\"}],[\"$\",\"span\",null,{\"className\":\"mt-2 block text-sm leading-6 text-slate-600\",\"children\":\"Combine yearly recap pages with a heatmap view of your coding rhythm.\"}]]}],\"$L11\"]}]]]}]}]]\n"])</script><script>self.__next_f.push([1,"11:[\"$\",\"$L10\",null,{\"className\":\"rounded-[1.4rem] border border-slate-200 bg-white/95 px-5 py-5 shadow-[0_20px_40px_rgba(15,23,42,0.06)] transition hover:border-orange-300\",\"href\":\"/changelog\",\"children\":[[\"$\",\"strong\",null,{\"className\":\"block text-lg text-slate-950\",\"children\":\"Recent releases\"}],[\"$\",\"span\",null,{\"className\":\"mt-2 block text-sm leading-6 text-slate-600\",\"children\":\"See when activity graphs, share artifacts, and web hosting landed.\"}]]}]\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\":\"AI Coding Activity Heatmaps | vibestats\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Publish GitHub-style activity heatmaps for Claude Code and Codex CLI usage with daily totals, streaks, and image-friendly share pages.\"}],[\"$\",\"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,coding activity heatmap,Claude Code activity,Codex activity,developer streak tracker\"}],[\"$\",\"link\",\"4\",{\"rel\":\"canonical\",\"href\":\"https://vibestats.wolfai.dev/activity\"}],[\"$\",\"meta\",\"5\",{\"property\":\"og:title\",\"content\":\"AI Coding Activity Heatmaps | vibestats\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:description\",\"content\":\"Publish GitHub-style activity heatmaps for Claude Code and Codex CLI usage with daily totals, streaks, and image-friendly share pages.\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:url\",\"content\":\"https://vibestats.wolfai.dev/activity\"}],[\"$\",\"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\":\"AI Coding Activity Heatmaps | vibestats\"}],[\"$\",\"meta\",\"13\",{\"name\":\"twitter:description\",\"content\":\"Publish GitHub-style activity heatmaps for Claude Code and Codex CLI usage with daily totals, streaks, and image-friendly share pages.\"}]],\"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":"gPirvBMhpRSdtR0tsMj2H","p":"","c":["","activity"],"i":false,"f":[[["",{"children":["activity",{"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":["activity",["$","$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],["$","$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}
12
+ 0:{"P":null,"b":"3pcP-Y7gHe02EnmTXxc9b","p":"","c":["","activity"],"i":false,"f":[[["",{"children":["activity",{"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":["activity",["$","$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],["$","$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
  10:I[4816,["816","static/chunks/816-8960921093d57453.js","866","static/chunks/app/activity/page-5d0587c1d5910e68.js"],""]
14
14
  5:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"WebPage\",\"name\":\"vibestats activity\",\"description\":\"GitHub-style AI coding activity heatmaps for Claude Code and Codex CLI usage, with daily totals, streaks, and image-friendly sharing.\",\"url\":\"https://vibestats.wolfai.dev/activity\",\"isPartOf\":{\"@type\":\"WebSite\",\"name\":\"vibestats\",\"url\":\"https://vibestats.wolfai.dev/\"}}"}}],["$","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%)] text-slate-900 px-4 py-8 md:px-8 md:py-12","children":["$","div",null,{"className":"mx-auto max-w-7xl","children":[["$","header",null,{"className":"border border-white/70 bg-white/80 shadow-[0_30px_80px_rgba(191,104,24,0.12)] backdrop-blur mb-10 rounded-[2rem] px-6 py-8 md:px-10","children":[["$","p",null,{"className":"text-[0.72rem] font-semibold uppercase tracking-[0.28em] text-slate-500","children":"Vibestats Activity"}],["$","h1",null,{"className":"max-w-4xl font-[family-name:var(--font-display)] leading-none text-slate-950 mt-4 text-5xl md:text-7xl","children":"GitHub-style activity heatmaps for AI coding."}],["$","p",null,{"className":"mt-5 text-base leading-7 md:text-lg max-w-3xl text-slate-600","children":"Generate calendar-style coding views from local Claude Code and Codex CLI usage. Share them as hosted pages or render them as images for updates and retrospectives."}]]}],[["$","div",null,{"className":"grid gap-4 lg:grid-cols-[1.15fr_0.85fr]","children":[["$","article",null,{"className":"rounded-[2rem] 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":"Command"}],["$","code",null,{"className":"mt-4 block rounded-[1.2rem] bg-slate-100 px-4 py-4 text-sm text-slate-700","children":"npx vibestats --activity --share --days 365"}],["$","p",null,{"className":"mt-5 text-sm leading-7 text-slate-600","children":"Activity pages summarize daily coding intensity, streaks, top models, sessions, and rolling totals from aggregate local usage data."}]]}],["$","article",null,{"className":"rounded-[2rem] 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":"Good for"}],["$","ul",null,{"className":"mt-4 space-y-3 text-sm leading-7 text-slate-600","children":[["$","li",null,{"children":"Weekly or monthly coding retrospectives"}],["$","li",null,{"children":"Shareable streak and activity snapshots"}],["$","li",null,{"children":"Comparing input, output, session, and message patterns over time"}]]}]]}]]}],["$","section",null,{"className":"mt-6 grid gap-4 md:grid-cols-3","children":[["$","$L10",null,{"className":"rounded-[1.4rem] border border-slate-200 bg-white/95 px-5 py-5 shadow-[0_20px_40px_rgba(15,23,42,0.06)] transition hover:border-orange-300","href":"/docs/commands#activity-wrapped","children":[["$","strong",null,{"className":"block text-lg text-slate-950","children":"Command reference"}],["$","span",null,{"className":"mt-2 block text-sm leading-6 text-slate-600","children":"Find the activity flags, metrics, and share options."}]]}],["$","$L10",null,{"className":"rounded-[1.4rem] border border-slate-200 bg-white/95 px-5 py-5 shadow-[0_20px_40px_rgba(15,23,42,0.06)] transition hover:border-orange-300","href":"/wrapped","children":[["$","strong",null,{"className":"block text-lg text-slate-950","children":"Wrapped summaries"}],["$","span",null,{"className":"mt-2 block text-sm leading-6 text-slate-600","children":"Combine yearly recap pages with a heatmap view of your coding rhythm."}]]}],"$L11"]}]]]}]}]]
15
15
  11:["$","$L10",null,{"className":"rounded-[1.4rem] border border-slate-200 bg-white/95 px-5 py-5 shadow-[0_20px_40px_rgba(15,23,42,0.06)] transition hover:border-orange-300","href":"/changelog","children":[["$","strong",null,{"className":"block text-lg text-slate-950","children":"Recent releases"}],["$","span",null,{"className":"mt-2 block text-sm leading-6 text-slate-600","children":"See when activity graphs, share artifacts, and web hosting landed."}]]}]