vibestats 1.4.6 → 1.4.7

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 (148) hide show
  1. package/README.md +12 -0
  2. package/dist/index.js +267 -6
  3. package/dist/web/404.html +1 -1
  4. package/dist/web/_next/static/chunks/app/_not-found/{page-91f35a114767b957.js → page-eb494efa9a20b86f.js} +1 -1
  5. package/dist/web/_next/static/chunks/app/{changelog/page-5d0587c1d5910e68.js → activity/page-08fe89950f57d6cd.js} +1 -1
  6. package/dist/web/_next/static/chunks/app/{compare/[slug]/page-5d0587c1d5910e68.js → changelog/page-08fe89950f57d6cd.js} +1 -1
  7. package/dist/web/_next/static/chunks/app/compare/{page-5d0587c1d5910e68.js → [slug]/page-08fe89950f57d6cd.js} +1 -1
  8. package/dist/web/_next/static/chunks/app/{activity/page-5d0587c1d5910e68.js → compare/page-08fe89950f57d6cd.js} +1 -1
  9. package/dist/web/_next/static/chunks/app/dashboard/activity/{page-160297e59ddc3e90.js → page-597da0061c40aff7.js} +1 -1
  10. package/dist/web/_next/static/chunks/app/dashboard/page-bb38b9b3268267b0.js +1 -0
  11. package/dist/web/_next/static/chunks/app/dashboard/usage/{page-1dc2f581c9259a42.js → page-29910d99bd414ff6.js} +1 -1
  12. package/dist/web/_next/static/chunks/app/dashboard/wrapped/{page-9474fad21b940fd3.js → page-7da52e4debfc621e.js} +1 -1
  13. package/dist/web/_next/static/chunks/app/docs/commands/page-08fe89950f57d6cd.js +1 -0
  14. package/dist/web/_next/static/chunks/app/docs/page-08fe89950f57d6cd.js +1 -0
  15. package/dist/web/_next/static/chunks/app/features/[slug]/page-08fe89950f57d6cd.js +1 -0
  16. package/dist/web/_next/static/chunks/app/features/page-08fe89950f57d6cd.js +1 -0
  17. package/dist/web/_next/static/chunks/app/guides/[slug]/page-08fe89950f57d6cd.js +1 -0
  18. package/dist/web/_next/static/chunks/app/guides/page-08fe89950f57d6cd.js +1 -0
  19. package/dist/web/_next/static/chunks/app/layout-c7aeab43f7457d3e.js +1 -0
  20. package/dist/web/_next/static/chunks/app/page-b2258b57bd62febe.js +1 -0
  21. package/dist/web/_next/static/chunks/app/use-cases/[slug]/page-08fe89950f57d6cd.js +1 -0
  22. package/dist/web/_next/static/chunks/app/use-cases/page-08fe89950f57d6cd.js +1 -0
  23. package/dist/web/_next/static/chunks/app/wrapped/page-72228fb75ef67e72.js +1 -0
  24. package/dist/web/_next/static/chunks/{main-app-6619364ab1f13fb7.js → main-app-f5021d739a517f33.js} +1 -1
  25. package/dist/web/activity.html +1 -1
  26. package/dist/web/activity.txt +16 -17
  27. package/dist/web/changelog.html +1 -1
  28. package/dist/web/changelog.txt +66 -62
  29. package/dist/web/compare/claude-code-vs-codex-cli-tracking.html +1 -1
  30. package/dist/web/compare/claude-code-vs-codex-cli-tracking.txt +22 -23
  31. package/dist/web/compare/daily-vs-monthly-ai-usage-reports.html +1 -1
  32. package/dist/web/compare/daily-vs-monthly-ai-usage-reports.txt +21 -22
  33. package/dist/web/compare/local-vs-cloud-ai-analytics.html +1 -1
  34. package/dist/web/compare/local-vs-cloud-ai-analytics.txt +22 -23
  35. package/dist/web/compare/manual-tracking-vs-vibestats.html +1 -1
  36. package/dist/web/compare/manual-tracking-vs-vibestats.txt +21 -22
  37. package/dist/web/compare/querystring-shares-vs-stored-share-pages.html +1 -1
  38. package/dist/web/compare/querystring-shares-vs-stored-share-pages.txt +22 -23
  39. package/dist/web/compare/session-breakdown-vs-model-breakdown.html +1 -1
  40. package/dist/web/compare/session-breakdown-vs-model-breakdown.txt +22 -23
  41. package/dist/web/compare/single-source-vs-combined-tracking.html +1 -1
  42. package/dist/web/compare/single-source-vs-combined-tracking.txt +22 -23
  43. package/dist/web/compare/terminal-table-vs-json-output.html +1 -1
  44. package/dist/web/compare/terminal-table-vs-json-output.txt +21 -22
  45. package/dist/web/compare/token-volume-vs-cost-estimation.html +1 -1
  46. package/dist/web/compare/token-volume-vs-cost-estimation.txt +21 -22
  47. package/dist/web/compare/wrapped-vs-activity-heatmap.html +1 -1
  48. package/dist/web/compare/wrapped-vs-activity-heatmap.txt +22 -23
  49. package/dist/web/compare.html +1 -1
  50. package/dist/web/compare.txt +29 -30
  51. package/dist/web/dashboard/activity.html +1 -1
  52. package/dist/web/dashboard/activity.txt +17 -18
  53. package/dist/web/dashboard/usage.html +1 -1
  54. package/dist/web/dashboard/usage.txt +17 -18
  55. package/dist/web/dashboard/wrapped.html +1 -1
  56. package/dist/web/dashboard/wrapped.txt +17 -18
  57. package/dist/web/dashboard.html +1 -1
  58. package/dist/web/dashboard.txt +17 -18
  59. package/dist/web/docs/commands.html +1 -1
  60. package/dist/web/docs/commands.txt +25 -31
  61. package/dist/web/docs.html +1 -1
  62. package/dist/web/docs.txt +19 -23
  63. package/dist/web/features/ai-coding-activity-heatmap.html +1 -1
  64. package/dist/web/features/ai-coding-activity-heatmap.txt +22 -23
  65. package/dist/web/features/ai-coding-wrapped.html +1 -1
  66. package/dist/web/features/ai-coding-wrapped.txt +21 -22
  67. package/dist/web/features/claude-code-stats.html +1 -1
  68. package/dist/web/features/claude-code-stats.txt +21 -22
  69. package/dist/web/features/claude-diagnostics.html +1 -1
  70. package/dist/web/features/claude-diagnostics.txt +21 -22
  71. package/dist/web/features/codex-cli-stats.html +1 -1
  72. package/dist/web/features/codex-cli-stats.txt +21 -22
  73. package/dist/web/features/combined-ai-coding-stats.html +1 -1
  74. package/dist/web/features/combined-ai-coding-stats.txt +22 -23
  75. package/dist/web/features/json-and-automation-exports.html +1 -1
  76. package/dist/web/features/json-and-automation-exports.txt +22 -23
  77. package/dist/web/features/model-breakdown.html +1 -1
  78. package/dist/web/features/model-breakdown.txt +21 -22
  79. package/dist/web/features/privacy-first-analytics.html +1 -1
  80. package/dist/web/features/privacy-first-analytics.txt +22 -23
  81. package/dist/web/features/session-breakdown.html +1 -1
  82. package/dist/web/features/session-breakdown.txt +21 -22
  83. package/dist/web/features/share-pages.html +1 -1
  84. package/dist/web/features/share-pages.txt +21 -22
  85. package/dist/web/features/token-and-cost-tracking.html +1 -1
  86. package/dist/web/features/token-and-cost-tracking.txt +21 -22
  87. package/dist/web/features.html +1 -1
  88. package/dist/web/features.txt +30 -31
  89. package/dist/web/guides/how-to-build-ai-activity-heatmap.html +1 -1
  90. package/dist/web/guides/how-to-build-ai-activity-heatmap.txt +21 -22
  91. package/dist/web/guides/how-to-compare-model-usage.html +1 -1
  92. package/dist/web/guides/how-to-compare-model-usage.txt +21 -22
  93. package/dist/web/guides/how-to-create-ai-coding-wrapped.html +1 -1
  94. package/dist/web/guides/how-to-create-ai-coding-wrapped.txt +21 -22
  95. package/dist/web/guides/how-to-measure-ai-token-costs.html +1 -1
  96. package/dist/web/guides/how-to-measure-ai-token-costs.txt +21 -22
  97. package/dist/web/guides/how-to-read-claude-diagnostics.html +1 -1
  98. package/dist/web/guides/how-to-read-claude-diagnostics.txt +21 -22
  99. package/dist/web/guides/how-to-share-ai-coding-stats.html +1 -1
  100. package/dist/web/guides/how-to-share-ai-coding-stats.txt +21 -22
  101. package/dist/web/guides/how-to-track-claude-code-usage.html +1 -1
  102. package/dist/web/guides/how-to-track-claude-code-usage.txt +21 -22
  103. package/dist/web/guides/how-to-track-codex-cli-usage.html +1 -1
  104. package/dist/web/guides/how-to-track-codex-cli-usage.txt +21 -22
  105. package/dist/web/guides.html +1 -1
  106. package/dist/web/guides.txt +24 -25
  107. package/dist/web/index.html +1 -1
  108. package/dist/web/index.txt +20 -21
  109. package/dist/web/sitemap.xml +46 -46
  110. package/dist/web/use-cases/ai-agencies.html +1 -1
  111. package/dist/web/use-cases/ai-agencies.txt +20 -21
  112. package/dist/web/use-cases/consultants.html +1 -1
  113. package/dist/web/use-cases/consultants.txt +20 -21
  114. package/dist/web/use-cases/engineering-managers.html +1 -1
  115. package/dist/web/use-cases/engineering-managers.txt +21 -22
  116. package/dist/web/use-cases/freelancers.html +1 -1
  117. package/dist/web/use-cases/freelancers.txt +20 -21
  118. package/dist/web/use-cases/indie-hackers.html +1 -1
  119. package/dist/web/use-cases/indie-hackers.txt +20 -21
  120. package/dist/web/use-cases/monthly-reporting.html +1 -1
  121. package/dist/web/use-cases/monthly-reporting.txt +20 -21
  122. package/dist/web/use-cases/open-source-maintainers.html +1 -1
  123. package/dist/web/use-cases/open-source-maintainers.txt +21 -22
  124. package/dist/web/use-cases/personal-retrospectives.html +1 -1
  125. package/dist/web/use-cases/personal-retrospectives.txt +21 -22
  126. package/dist/web/use-cases/researchers.html +1 -1
  127. package/dist/web/use-cases/researchers.txt +20 -21
  128. package/dist/web/use-cases/weekly-reviews.html +1 -1
  129. package/dist/web/use-cases/weekly-reviews.txt +20 -21
  130. package/dist/web/use-cases.html +1 -1
  131. package/dist/web/use-cases.txt +28 -29
  132. package/dist/web/wrapped.html +1 -1
  133. package/dist/web/wrapped.txt +17 -18
  134. package/package.json +1 -1
  135. package/dist/web/_next/static/chunks/app/dashboard/page-4834f263664e8663.js +0 -1
  136. package/dist/web/_next/static/chunks/app/docs/commands/page-5d0587c1d5910e68.js +0 -1
  137. package/dist/web/_next/static/chunks/app/docs/page-5d0587c1d5910e68.js +0 -1
  138. package/dist/web/_next/static/chunks/app/features/[slug]/page-5d0587c1d5910e68.js +0 -1
  139. package/dist/web/_next/static/chunks/app/features/page-5d0587c1d5910e68.js +0 -1
  140. package/dist/web/_next/static/chunks/app/guides/[slug]/page-5d0587c1d5910e68.js +0 -1
  141. package/dist/web/_next/static/chunks/app/guides/page-5d0587c1d5910e68.js +0 -1
  142. package/dist/web/_next/static/chunks/app/layout-6ebd9b17af55ec02.js +0 -1
  143. package/dist/web/_next/static/chunks/app/page-dfb7bbdb5999dc75.js +0 -1
  144. package/dist/web/_next/static/chunks/app/use-cases/[slug]/page-5d0587c1d5910e68.js +0 -1
  145. package/dist/web/_next/static/chunks/app/use-cases/page-5d0587c1d5910e68.js +0 -1
  146. package/dist/web/_next/static/chunks/app/wrapped/page-66b00de7736097db.js +0 -1
  147. /package/dist/web/_next/static/{OTOSYSO_lYg8uryMGgC0P → O1feF7gPLeHeL0mJlyXjP}/_buildManifest.js +0 -0
  148. /package/dist/web/_next/static/{OTOSYSO_lYg8uryMGgC0P → O1feF7gPLeHeL0mJlyXjP}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[919],{539:(e,t,n)=>{"use strict";n.d(t,{Xv:()=>i,b6:()=>u,zP:()=>l}),n(5603);var s=n(471).Buffer;function a(e){let t=Number.parseFloat(e);return e.endsWith("B")?1e9*t:e.endsWith("M")?1e6*t:e.endsWith("K")?1e3*t:t}function o(e){let t=e.trim().toLowerCase(),n=(e,n)=>{let s=n.replace(/\./g,"[\\s._-]*"),a=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),o="(?:^|[^a-z0-9])",r="(?:[^a-z0-9]|$)";return new RegExp("".concat(o).concat(a,"(?:[^a-z0-9]+)?").concat(s).concat(r)).test(t)||new RegExp("".concat(o).concat(s,"(?:[^a-z0-9]+)?").concat(a).concat(r)).test(t)};return t.includes("accounts/fireworks/routers/kimi-k2p5-turbo")||t.includes("accounts/fireworks/models/kimi-k2p5-turbo")||t.includes("custom:kimi-k2.5-turbo")||t.includes("custom:kimi-k2p5-turbo")||t.includes("kimi")&&(t.includes("k2.5")||t.includes("k2p5"))&&t.includes("turbo")?"Kimi K2.5 Turbo":t.includes("custom:minimax-m2.7")||t.includes("custom:minimax-m2-7")||t.includes("minimax-m2.7")||t.includes("minimax-m2-7")?"MiniMax-M2.7":t.includes("fable")?"Claude Fable":n("opus","4.8")?"Opus 4.8":n("opus","4.7")?"Opus 4.7":n("opus","4.6")?"Opus 4.6":n("opus","4.5")?"Opus 4.5":n("opus","4.1")?"Opus 4.1":t.includes("opus")?"Opus 4.8":n("sonnet","4.6")?"Sonnet 4.6":n("sonnet","4.5")?"Sonnet 4.5":n("sonnet","3.5")?"Sonnet 3.5":t.includes("sonnet")?"Sonnet":n("haiku","4.5")?"Haiku 4.5":n("haiku","3.5")?"Haiku 3.5":t.includes("haiku")?"Haiku":e}function r(e){var t;if(e.startsWith("raw_"))try{return o(decodeURIComponent(e.slice(4)))}catch(t){return o(e.slice(4))}return o(null!=(t=({fable:"Claude Fable",o48:"Opus 4.8",o47:"Opus 4.7",o46:"Opus 4.6",o45:"Opus 4.5",o41:"Opus 4.1",opus:"Opus 4.8",s46:"Sonnet 4.6",s45:"Sonnet 4.5",s35:"Sonnet 3.5",sonnet:"Sonnet",h45:"Haiku 4.5",h35:"Haiku 3.5",haiku:"Haiku",g54:"GPT-5.4",g53s:"GPT-5.3 Codex Spark",g53c:"GPT-5.3 Codex",g53:"GPT-5.3",g52c:"GPT-5.2 Codex",g52:"GPT-5.2",g51cm:"GPT-5.1 Codex Max",g51m:"GPT-5.1 Max",g51cn:"GPT-5.1 Codex Mini",g51n:"GPT-5.1 Mini",g51c:"GPT-5.1 Codex",g51:"GPT-5.1",g5:"GPT-5",g5n:"GPT-5 Mini",g4o:"GPT-4o",g4om:"GPT-4o Mini"})[e])?t:e)}function c(e){if(e)try{if(void 0!==s)return JSON.parse(s.from(e,"base64url").toString("utf-8"));let t=e.replace(/-/g,"+").replace(/_/g,"/");return JSON.parse(atob(t))}catch(e){return}}function i(e){var t;let n=e.get("s");if(!n)return null;let s=e.get("src"),o=(e.get("mb")||"").split(",").map(e=>{let[t,n]=e.split(":");return t?{model:r(t),percentage:Number.parseInt(null!=n?n:"0",10)||0}:null}).filter(e=>!!e);return{sessions:Number.parseInt(n,10),messages:0,totalTokens:a(e.get("t")||"0"),totalCost:Number.parseFloat(e.get("c")||"0"),daysActive:Number.parseInt(e.get("d")||"0",10),longestStreak:Number.parseInt(e.get("ls")||"0",10),currentStreak:Number.parseInt(e.get("cs")||"0",10),peakHour:Number.parseInt(e.get("ph")||"12",10),peakDay:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"][Number.parseInt(e.get("pd")||"0",10)]||"Monday",busiestMonth:"",favoriteModel:r(e.get("fm")||""),modelBreakdown:o,wordsGenerated:a(e.get("wg")||"0"),firstSessionDate:e.get("fad")||"",topProject:e.get("tp")||void 0,projectCount:e.get("pc")?Number.parseInt(e.get("pc"),10):void 0,topTools:(null==(t=e.get("tt"))?void 0:t.split(","))||void 0,source:"codex"===s?"codex":"combined"===s?"combined":"claude",activity:c(e.get("act"))}}function u(e){if(!(e.get("tot")||e.get("agg")))return null;let t=e.get("src"),n=e.get("agg")||"d",s="m"===n?"monthly":"mo"===n?"model":"t"===n?"total":"daily",[o,c]=(e.get("dr")||"").split("-"),i=(e.get("rows")||"").split("|").filter(Boolean).map(e=>{let t=e.split(":"),n=t[0]||"";return{key:"daily"===s&&4===n.length?"".concat(new Date().getFullYear(),"-").concat(n.slice(0,2),"-").concat(n.slice(2,4)):n,inputTokens:a(t[1]||"0"),outputTokens:a(t[2]||"0"),cacheWriteTokens:a(t[3]||"0"),cacheReadTokens:a(t[4]||"0"),totalTokens:a(t[5]||"0"),cost:Number.parseFloat(t[6]||"0")}}),u=(e.get("tot")||"").split(":"),l=(e.get("mb")||"").split(",").filter(Boolean).map(e=>{let[t,n,s]=e.split(":");return{model:r(t||""),tokens:0,cost:Number.parseFloat(s||"0"),percentage:Number.parseInt(n||"0",10)||0}});return{rows:i,totals:{inputTokens:a(u[0]||"0"),outputTokens:a(u[1]||"0"),cacheWriteTokens:a(u[2]||"0"),cacheReadTokens:a(u[3]||"0"),totalTokens:a(u[4]||"0"),cost:Number.parseFloat(u[5]||"0")},source:"codex"===t?"codex":"combined"===t?"combined":"claude",aggregation:s,dateRange:{start:o?"".concat(o.slice(0,4),"-").concat(o.slice(4,6),"-").concat(o.slice(6,8)):"",end:c?"".concat(c.slice(0,4),"-").concat(c.slice(4,6),"-").concat(c.slice(6,8)):""},modelBreakdown:l}}function l(e){return c(e.get("activity"))||null}},3438:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>u});var s=n(8481),a=n(8526),o=n(3973),r=n(5832),c=n(539);function i(){let e=(0,o.useSearchParams)(),[t,n]=(0,a.useState)(null),[i,u]=(0,a.useState)(null);return((0,a.useEffect)(()=>{let t=e.get("w");if(!t)return void u("no wrapped payload in URL");if(t.startsWith("json:")){let e=t.slice(5);fetch("/data/".concat(e,".json")).then(e=>e.ok?e.json():Promise.reject(Error("fetch failed"))).then(e=>n(e)).catch(e=>u(e.message));return}let s=new URLSearchParams(t),a=(0,c.Xv)(s);a?n(a):u("could not decode wrapped payload")},[e]),i)?(0,s.jsxs)("main",{className:"p-8 text-red-400",children:["Error: ",i]}):t?(0,s.jsx)(r.WrappedLegacyPage,{payload:t,shaderVariant:"grid"}):(0,s.jsx)("main",{className:"p-8 text-stone-400",children:"Loading…"})}function u(){return(0,s.jsx)(a.Suspense,{fallback:(0,s.jsx)("main",{className:"p-8 text-stone-400",children:"Loading…"}),children:(0,s.jsx)(i,{})})}},3484:(e,t,n)=>{Promise.resolve().then(n.bind(n,3438))}},e=>{e.O(0,[971,832,59,498,358],()=>e(e.s=3484)),_N_E=e.O()}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[919],{539:(e,t,n)=>{"use strict";n.d(t,{Xv:()=>i,b6:()=>u,zP:()=>l}),n(5603);var s=n(471).Buffer;function a(e){let t=Number.parseFloat(e);return e.endsWith("B")?1e9*t:e.endsWith("M")?1e6*t:e.endsWith("K")?1e3*t:t}function o(e){let t=e.trim().toLowerCase(),n=(e,n)=>{let s=n.replace(/\./g,"[\\s._-]*"),a=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),o="(?:^|[^a-z0-9])",r="(?:[^a-z0-9]|$)";return new RegExp("".concat(o).concat(a,"(?:[^a-z0-9]+)?").concat(s).concat(r)).test(t)||new RegExp("".concat(o).concat(s,"(?:[^a-z0-9]+)?").concat(a).concat(r)).test(t)};return t.includes("accounts/fireworks/routers/kimi-k2p5-turbo")||t.includes("accounts/fireworks/models/kimi-k2p5-turbo")||t.includes("custom:kimi-k2.5-turbo")||t.includes("custom:kimi-k2p5-turbo")||t.includes("kimi")&&(t.includes("k2.5")||t.includes("k2p5"))&&t.includes("turbo")?"Kimi K2.5 Turbo":t.includes("custom:minimax-m2.7")||t.includes("custom:minimax-m2-7")||t.includes("minimax-m2.7")||t.includes("minimax-m2-7")?"MiniMax-M2.7":t.includes("fable")?"Claude Fable":n("opus","4.8")?"Opus 4.8":n("opus","4.7")?"Opus 4.7":n("opus","4.6")?"Opus 4.6":n("opus","4.5")?"Opus 4.5":n("opus","4.1")?"Opus 4.1":t.includes("opus")?"Opus 4.8":n("sonnet","4.6")?"Sonnet 4.6":n("sonnet","4.5")?"Sonnet 4.5":n("sonnet","3.5")?"Sonnet 3.5":t.includes("sonnet")?"Sonnet":n("haiku","4.5")?"Haiku 4.5":n("haiku","3.5")?"Haiku 3.5":t.includes("haiku")?"Haiku":e}function r(e){var t;if(e.startsWith("raw_"))try{return o(decodeURIComponent(e.slice(4)))}catch(t){return o(e.slice(4))}return o(null!=(t=({fable:"Claude Fable",o48:"Opus 4.8",o47:"Opus 4.7",o46:"Opus 4.6",o45:"Opus 4.5",o41:"Opus 4.1",opus:"Opus 4.8",s46:"Sonnet 4.6",s45:"Sonnet 4.5",s35:"Sonnet 3.5",sonnet:"Sonnet",h45:"Haiku 4.5",h35:"Haiku 3.5",haiku:"Haiku",g54:"GPT-5.4",g53s:"GPT-5.3 Codex Spark",g53c:"GPT-5.3 Codex",g53:"GPT-5.3",g52c:"GPT-5.2 Codex",g52:"GPT-5.2",g51cm:"GPT-5.1 Codex Max",g51m:"GPT-5.1 Max",g51cn:"GPT-5.1 Codex Mini",g51n:"GPT-5.1 Mini",g51c:"GPT-5.1 Codex",g51:"GPT-5.1",g5:"GPT-5",g5n:"GPT-5 Mini",g4o:"GPT-4o",g4om:"GPT-4o Mini"})[e])?t:e)}function c(e){if(e)try{if(void 0!==s)return JSON.parse(s.from(e,"base64url").toString("utf-8"));let t=e.replace(/-/g,"+").replace(/_/g,"/");return JSON.parse(atob(t))}catch(e){return}}function i(e){var t;let n=e.get("s");if(!n)return null;let s=e.get("src"),o=(e.get("mb")||"").split(",").map(e=>{let[t,n]=e.split(":");return t?{model:r(t),percentage:Number.parseInt(null!=n?n:"0",10)||0}:null}).filter(e=>!!e);return{sessions:Number.parseInt(n,10),messages:0,totalTokens:a(e.get("t")||"0"),totalCost:Number.parseFloat(e.get("c")||"0"),daysActive:Number.parseInt(e.get("d")||"0",10),longestStreak:Number.parseInt(e.get("ls")||"0",10),currentStreak:Number.parseInt(e.get("cs")||"0",10),peakHour:Number.parseInt(e.get("ph")||"12",10),peakDay:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"][Number.parseInt(e.get("pd")||"0",10)]||"Monday",busiestMonth:"",favoriteModel:r(e.get("fm")||""),modelBreakdown:o,wordsGenerated:a(e.get("wg")||"0"),firstSessionDate:e.get("fad")||"",topProject:e.get("tp")||void 0,projectCount:e.get("pc")?Number.parseInt(e.get("pc"),10):void 0,topTools:(null==(t=e.get("tt"))?void 0:t.split(","))||void 0,source:"codex"===s?"codex":"combined"===s?"combined":"claude",activity:c(e.get("act"))}}function u(e){if(!(e.get("tot")||e.get("agg")))return null;let t=e.get("src"),n=e.get("agg")||"d",s="m"===n?"monthly":"mo"===n?"model":"t"===n?"total":"daily",[o,c]=(e.get("dr")||"").split("-"),i=(e.get("rows")||"").split("|").filter(Boolean).map(e=>{let t=e.split(":"),n=t[0]||"";return{key:"daily"===s&&4===n.length?"".concat(new Date().getFullYear(),"-").concat(n.slice(0,2),"-").concat(n.slice(2,4)):n,inputTokens:a(t[1]||"0"),outputTokens:a(t[2]||"0"),cacheWriteTokens:a(t[3]||"0"),cacheReadTokens:a(t[4]||"0"),totalTokens:a(t[5]||"0"),cost:Number.parseFloat(t[6]||"0")}}),u=(e.get("tot")||"").split(":"),l=(e.get("mb")||"").split(",").filter(Boolean).map(e=>{let[t,n,s]=e.split(":");return{model:r(t||""),tokens:0,cost:Number.parseFloat(s||"0"),percentage:Number.parseInt(n||"0",10)||0}});return{rows:i,totals:{inputTokens:a(u[0]||"0"),outputTokens:a(u[1]||"0"),cacheWriteTokens:a(u[2]||"0"),cacheReadTokens:a(u[3]||"0"),totalTokens:a(u[4]||"0"),cost:Number.parseFloat(u[5]||"0")},source:"codex"===t?"codex":"combined"===t?"combined":"claude",aggregation:s,dateRange:{start:o?"".concat(o.slice(0,4),"-").concat(o.slice(4,6),"-").concat(o.slice(6,8)):"",end:c?"".concat(c.slice(0,4),"-").concat(c.slice(4,6),"-").concat(c.slice(6,8)):""},modelBreakdown:l}}function l(e){return c(e.get("activity"))||null}},2449:(e,t,n)=>{Promise.resolve().then(n.bind(n,3438))},3438:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>u});var s=n(8481),a=n(8526),o=n(3973),r=n(5832),c=n(539);function i(){let e=(0,o.useSearchParams)(),[t,n]=(0,a.useState)(null),[i,u]=(0,a.useState)(null);return((0,a.useEffect)(()=>{let t=e.get("w");if(!t)return void u("no wrapped payload in URL");if(t.startsWith("json:")){let e=t.slice(5);fetch("/data/".concat(e,".json")).then(e=>e.ok?e.json():Promise.reject(Error("fetch failed"))).then(e=>n(e)).catch(e=>u(e.message));return}let s=new URLSearchParams(t),a=(0,c.Xv)(s);a?n(a):u("could not decode wrapped payload")},[e]),i)?(0,s.jsxs)("main",{className:"p-8 text-red-400",children:["Error: ",i]}):t?(0,s.jsx)(r.WrappedLegacyPage,{payload:t,shaderVariant:"grid"}):(0,s.jsx)("main",{className:"p-8 text-stone-400",children:"Loading…"})}function u(){return(0,s.jsx)(a.Suspense,{fallback:(0,s.jsx)("main",{className:"p-8 text-stone-400",children:"Loading…"}),children:(0,s.jsx)(i,{})})}}},e=>{e.O(0,[971,832,59,498,358],()=>e(e.s=2449)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6,40,54,74,180,402,546,679,683,866,874,944],{7066:(e,s,_)=>{Promise.resolve().then(_.t.bind(_,4816,23))}},e=>{e.O(0,[816,59,498,358],()=>e(e.s=7066)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6,40,54,74,180,402,546,679,683,866,874,944],{7066:(e,s,_)=>{Promise.resolve().then(_.t.bind(_,4816,23))}},e=>{e.O(0,[816,59,498,358],()=>e(e.s=7066)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6,40,54,74,180,402,546,679,683,866,874,944],{7066:(e,s,_)=>{Promise.resolve().then(_.t.bind(_,4816,23))}},e=>{e.O(0,[816,59,498,358],()=>e(e.s=7066)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6,40,54,74,180,402,546,679,683,866,874,944],{7066:(e,s,_)=>{Promise.resolve().then(_.t.bind(_,4816,23))}},e=>{e.O(0,[816,59,498,358],()=>e(e.s=7066)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6,40,54,74,180,402,546,679,683,866,874,944],{7066:(e,s,_)=>{Promise.resolve().then(_.t.bind(_,4816,23))}},e=>{e.O(0,[816,59,498,358],()=>e(e.s=7066)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6,40,54,74,180,402,546,679,683,866,874,944],{7066:(e,s,_)=>{Promise.resolve().then(_.t.bind(_,4816,23))}},e=>{e.O(0,[816,59,498,358],()=>e(e.s=7066)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[177],{4495:(e,t,n)=>{Promise.resolve().then(n.t.bind(n,7437,23)),Promise.resolve().then(n.t.bind(n,8183,23))},7437:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{default:function(){return g},handleClientScriptLoad:function(){return _},initScriptLoader:function(){return y}});let r=n(9843),l=n(9768),i=n(8481),a=r._(n(4955)),s=l._(n(8526)),o=n(8884),u=n(4908),c=n(8776),d=new Map,f=new Set,p=e=>{let{src:t,id:n,onLoad:r=()=>{},onReady:l=null,dangerouslySetInnerHTML:i,children:s="",strategy:o="afterInteractive",onError:c,stylesheets:p}=e,_=n||t;if(_&&f.has(_))return;if(d.has(t)){f.add(_),d.get(t).then(r,c);return}let y=()=>{l&&l(),f.add(_)},b=document.createElement("script"),g=new Promise((e,t)=>{b.addEventListener("load",function(t){e(),r&&r.call(this,t),y()}),b.addEventListener("error",function(e){t(e)})}).catch(function(e){c&&c(e)});i?(b.innerHTML=i.__html||"",y()):s?(b.textContent="string"==typeof s?s:Array.isArray(s)?s.join(""):"",y()):t&&(b.src=t,d.set(t,g)),(0,u.setAttributesFromProps)(b,e),"worker"===o&&b.setAttribute("type","text/partytown"),b.setAttribute("data-nscript",o),p&&(e=>{if(a.default.preinit)return e.forEach(e=>{a.default.preinit(e,{as:"style"})});{let t=document.head;e.forEach(e=>{let n=document.createElement("link");n.type="text/css",n.rel="stylesheet",n.href=e,t.appendChild(n)})}})(p),document.body.appendChild(b)};function _(e){let{strategy:t="afterInteractive"}=e;"lazyOnload"===t?window.addEventListener("load",()=>{(0,c.requestIdleCallback)(()=>p(e))}):p(e)}function y(e){e.forEach(_),[...document.querySelectorAll('[data-nscript="beforeInteractive"]'),...document.querySelectorAll('[data-nscript="beforePageRender"]')].forEach(e=>{let t=e.id||e.getAttribute("src");f.add(t)})}function b(e){let{id:t,src:n="",onLoad:r=()=>{},onReady:l=null,strategy:u="afterInteractive",onError:d,stylesheets:_,...y}=e,{updateScripts:b,scripts:g,getIsSsr:h,appDir:m,nonce:v}=(0,s.useContext)(o.HeadManagerContext);v=y.nonce||v;let O=(0,s.useRef)(!1);(0,s.useEffect)(()=>{let e=t||n;O.current||(l&&e&&f.has(e)&&l(),O.current=!0)},[l,t,n]);let I=(0,s.useRef)(!1);if((0,s.useEffect)(()=>{if(!I.current){if("afterInteractive"===u)p(e);else"lazyOnload"===u&&("complete"===document.readyState?(0,c.requestIdleCallback)(()=>p(e)):window.addEventListener("load",()=>{(0,c.requestIdleCallback)(()=>p(e))}));I.current=!0}},[e,u]),("beforeInteractive"===u||"worker"===u)&&(b?(g[u]=(g[u]||[]).concat([{id:t,src:n,onLoad:r,onReady:l,onError:d,...y,nonce:v}]),b(g)):h&&h()?f.add(t||n):h&&!h()&&p({...e,nonce:v})),m){if(_&&_.forEach(e=>{a.default.preinit(e,{as:"style"})}),"beforeInteractive"===u)if(!n)return y.dangerouslySetInnerHTML&&(y.children=y.dangerouslySetInnerHTML.__html,delete y.dangerouslySetInnerHTML),(0,i.jsx)("script",{nonce:v,dangerouslySetInnerHTML:{__html:"(self.__next_s=self.__next_s||[]).push("+JSON.stringify([0,{...y,id:t}])+")"}});else return a.default.preload(n,y.integrity?{as:"script",integrity:y.integrity,nonce:v,crossOrigin:y.crossOrigin}:{as:"script",nonce:v,crossOrigin:y.crossOrigin}),(0,i.jsx)("script",{nonce:v,dangerouslySetInnerHTML:{__html:"(self.__next_s=self.__next_s||[]).push("+JSON.stringify([n,{...y,id:t}])+")"}});"afterInteractive"===u&&n&&a.default.preload(n,y.integrity?{as:"script",integrity:y.integrity,nonce:v,crossOrigin:y.crossOrigin}:{as:"script",nonce:v,crossOrigin:y.crossOrigin})}return null}Object.defineProperty(b,"__nextScript",{value:!0});let g=b;("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},8183:()=>{},8776:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{cancelIdleCallback:function(){return r},requestIdleCallback:function(){return n}});let n="undefined"!=typeof self&&self.requestIdleCallback&&self.requestIdleCallback.bind(window)||function(e){let t=Date.now();return self.setTimeout(function(){e({didTimeout:!1,timeRemaining:function(){return Math.max(0,50-(Date.now()-t))}})},1)},r="undefined"!=typeof self&&self.cancelIdleCallback&&self.cancelIdleCallback.bind(window)||function(e){return clearTimeout(e)};("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)}},e=>{e.O(0,[680,59,498,358],()=>e(e.s=4495)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[974],{9015:(e,s,n)=>{Promise.resolve().then(n.t.bind(n,4816,23)),Promise.resolve().then(n.bind(n,5832))}},e=>{e.O(0,[816,832,59,498,358],()=>e(e.s=9015)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6,40,54,74,180,402,546,679,683,866,874,944],{7066:(e,s,_)=>{Promise.resolve().then(_.t.bind(_,4816,23))}},e=>{e.O(0,[816,59,498,358],()=>e(e.s=7066)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6,40,54,74,180,402,546,679,683,866,874,944],{7066:(e,s,_)=>{Promise.resolve().then(_.t.bind(_,4816,23))}},e=>{e.O(0,[816,59,498,358],()=>e(e.s=7066)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[772],{257:(e,s,n)=>{Promise.resolve().then(n.t.bind(n,4816,23)),Promise.resolve().then(n.bind(n,5832))}},e=>{e.O(0,[816,832,59,498,358],()=>e(e.s=257)),_N_E=e.O()}]);
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[358],{3854:()=>{},6852:(e,s,n)=>{Promise.resolve().then(n.t.bind(n,2207,23)),Promise.resolve().then(n.t.bind(n,1684,23)),Promise.resolve().then(n.t.bind(n,476,23)),Promise.resolve().then(n.t.bind(n,3597,23)),Promise.resolve().then(n.t.bind(n,5965,23)),Promise.resolve().then(n.t.bind(n,3737,23)),Promise.resolve().then(n.t.bind(n,3609,23)),Promise.resolve().then(n.t.bind(n,496,23)),Promise.resolve().then(n.bind(n,8009))}},e=>{var s=s=>e(e.s=s);e.O(0,[59,498],()=>(s(9769),s(6852))),_N_E=e.O()}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[358],{3854:()=>{},5005:(e,s,n)=>{Promise.resolve().then(n.t.bind(n,2207,23)),Promise.resolve().then(n.t.bind(n,1684,23)),Promise.resolve().then(n.t.bind(n,476,23)),Promise.resolve().then(n.t.bind(n,3597,23)),Promise.resolve().then(n.t.bind(n,5965,23)),Promise.resolve().then(n.t.bind(n,3737,23)),Promise.resolve().then(n.t.bind(n,3609,23)),Promise.resolve().then(n.t.bind(n,496,23)),Promise.resolve().then(n.bind(n,8009))}},e=>{var s=s=>e(e.s=s);e.O(0,[59,498],()=>(s(9769),s(5005))),_N_E=e.O()}]);
@@ -1 +1 @@
1
- <!DOCTYPE html><!--OTOSYSO_lYg8uryMGgC0P--><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\":\"OTOSYSO_lYg8uryMGgC0P\",\"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><!--O1feF7gPLeHeL0mJlyXjP--><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-f5021d739a517f33.js" async=""></script><script src="/_next/static/chunks/816-8960921093d57453.js" async=""></script><script src="/_next/static/chunks/app/activity/page-08fe89950f57d6cd.js" async=""></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 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[5965,[],\"\"]\n3: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\":\"O1feF7gPLeHeL0mJlyXjP\",\"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\":null}],[\"$\",\"body\",null,{\"className\":\"antialiased min-h-screen bg-background text-foreground\",\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",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,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[\"$L4\",null,[\"$\",\"$L5\",null,{\"children\":[\"$L6\",[\"$\",\"$L7\",null,{\"promise\":\"$@8\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$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,"f:I[4816,[\"816\",\"static/chunks/816-8960921093d57453.js\",\"866\",\"static/chunks/app/activity/page-08fe89950f57d6cd.js\"],\"\"]\n"])</script><script>self.__next_f.push([1,"4:[[\"$\",\"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\":[[\"$\",\"$Lf\",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.\"}]]}],[\"$\",\"$Lf\",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.\"}]]}],\"$L10\"]}]]]}]}]]\n"])</script><script>self.__next_f.push([1,"10:[\"$\",\"$Lf\",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,"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\":\"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,"d:\"$8:metadata\"\n"])</script></body></html>
@@ -1,19 +1,18 @@
1
1
  1:"$Sreact.fragment"
2
- 2:I[7437,["177","static/chunks/app/layout-6ebd9b17af55ec02.js"],""]
3
- 3:I[5965,[],""]
4
- 4:I[3609,[],""]
5
- 6:I[496,[],"OutletBoundary"]
6
- 8:I[3737,[],"AsyncMetadataOutlet"]
7
- a:I[496,[],"ViewportBoundary"]
8
- c:I[496,[],"MetadataBoundary"]
9
- d:"$Sreact.suspense"
10
- f:I[2207,[],""]
2
+ 2:I[5965,[],""]
3
+ 3:I[3609,[],""]
4
+ 5:I[496,[],"OutletBoundary"]
5
+ 7:I[3737,[],"AsyncMetadataOutlet"]
6
+ 9:I[496,[],"ViewportBoundary"]
7
+ b:I[496,[],"MetadataBoundary"]
8
+ c:"$Sreact.suspense"
9
+ e:I[2207,[],""]
11
10
  :HL["/_next/static/css/335de1248158d380.css","style"]
12
- 0:{"P":null,"b":"OTOSYSO_lYg8uryMGgC0P","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
- 10:I[4816,["816","static/chunks/816-8960921093d57453.js","866","static/chunks/app/activity/page-5d0587c1d5910e68.js"],""]
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
- 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."}]]}]
16
- b:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
17
- 7:null
18
- 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"}
19
- e:"$9:metadata"
11
+ 0:{"P":null,"b":"O1feF7gPLeHeL0mJlyXjP","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":null}],["$","body",null,{"className":"antialiased min-h-screen bg-background text-foreground","children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",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,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":["$L4",null,["$","$L5",null,{"children":["$L6",["$","$L7",null,{"promise":"$@8"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$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}
12
+ f:I[4816,["816","static/chunks/816-8960921093d57453.js","866","static/chunks/app/activity/page-08fe89950f57d6cd.js"],""]
13
+ 4:[["$","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":[["$","$Lf",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."}]]}],["$","$Lf",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."}]]}],"$L10"]}]]]}]}]]
14
+ 10:["$","$Lf",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."}]]}]
15
+ a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
16
+ 6:null
17
+ 8:{"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"}
18
+ d:"$8:metadata"