Open source · MIT · v0.10 · 13 templates

An AI-usage portfolio, made readable.

Drop in your numbers, pick one of thirteen designs, deploy a page. Show recruiters what working with machines actually looks like — not just that you do it.

~ npx tokenfolio init  ·  reads Claude Code + Codex  ·  ships to GitHub Pages, Vercel, Netlify
Live preview Open ↗
wrapped
spotify wrapped · social
01 / 13
§ 01 / The ritual

Pick. Edit one file. Deploy.

A static page with no runtime, no auth, no telemetry. Your tokens stay on your machine until you deploy. The CLI reads from local logs you already have — no API keys, no signups.

i

Generate

One command reads your local ~/.claude and ~/.codex sessions and writes a data.js with your numbers — by month, by model, by project.

$ npx tokenfolio init
ii

Pick

Thirteen aesthetic worlds reading from the same data. Switch templates with zero data changes — your year, repainted in another language.

$ npx tokenfolio pick wrapped
iii

Deploy

One-click to Vercel or Netlify; or enable GitHub Pages on the repo you just cloned. Auto-generates an OG image and a README badge for your profile.

$ npx tokenfolio share
§ 02 / Thirteen worlds

One year, thirteen ways to tell it.

From Spotify-Wrapped maximalism to a thermal-paper receipt. Each template reads the same window.RESUME_DATA — swap aesthetics without rewriting a line.

§ 02·5 / What a year looks like sample data · data.js · 2025
47.2Mtokens
Forty-seven million tokens, twelve months. The same shape of work — every template just renders it in a different dialect.
Sessions
312
avg 151k tokens / session
Projects
28
across 4 languages
Peak month
Mar
8.4M tokens · token-resume shipped
Spend
$1.2k
opus 51% · sonnet 39% · haiku 11%
§ 03 / Where it reads from

Numbers only. Never prompts.

tokenfolio reads token counts, model names, project paths and dates from your local sessions. The contents of your conversations are never parsed, sent, or stored.

SUPPORTED SOURCES
01
Claude Code
● live
~/.claude/projects/ · via ccusage
02
Codex
● live
~/.codex/sessions/ · built-in JSONL parser
03
Cursor
○ soon
Settings → Usage · monthly breakdown
04
Aider · Continue.dev
○ soon
where token counts exist · PRs welcome

The privacy red line

Only counts, names, paths and dates are read. Prompt content — message lines in Claude JSONL, response_item lines in Codex — is never touched. Audit the parser yourself: it's a single file in bin/.

THE DATA SHAPE
data.js window.RESUME_DATA
// One file. Every template reads from it.
window.RESUME_DATA = {
  user:    { name, handle, title, location, bio, links },
  year:    2025,
  totals:  {
    tokens: 47221890,
    sessions: 312,
    projects: 28,
    cost_usd: 1247.50,
    avg_session_tokens: 151352
  },
  by_month:    [{ month, tokens, sessions, top_project, peak }, …],
  by_model:    [{ name, tokens, color }, …],
  top_projects:[{ name, tokens, language, description }, …],
  highlights:  [{ label, value, detail }, …]
};
§ 04 / The CLI

Six small commands. That's the whole tool.

A single npm package, written in plain Node. No build step on your side, nothing to host.

init⌘ start
Read your sessions
npx tokenfolio init --dry

Scans Claude Code and Codex logs, merges them, and previews the resulting data.js without writing it.

pick⌘ home
Choose a homepage
npx tokenfolio pick aurora --force

Rewrites the root index.html as a redirect to your chosen template — so links point to the look you want.

og⌘ social
Mint an OG image
npx tokenfolio og --js

1200×630 PNG containing your real numbers. Tries Satori first, falls back to Pillow. Drop it at og:image and share away.

badge⌘ profile
README badge + sparkline
npx tokenfolio badge

Pure-Node SVG: a shields-style chip and a github-readme-stats-style card with a monthly sparkline. Paste into your profile.

share⌘ post
One-line release
npx tokenfolio share

Auto-detects your GitHub Pages URL and opens an X intent pre-filled with your stats. Prints a LinkedIn URL to copy.

help⌘ ?
Read the source
cat bin/tokenfolio.js

The whole CLI is a single readable Node file with no transitive dependencies. Audit it. Patch it. Submit a PR.

v0.10 — receipt template just shipped

Ship your year, by tomorrow.

Fork the template, edit one file, push. The whole loop is under five minutes if your sessions are already on disk.

npx tokenfolio init --dry