Tags: tt-a1i/tokenfolio
Tags
v0.10: receipt template — a working year, itemized
13th template — long thermal-paper receipt format. Single tall column
(380px wide), cream paper with jagged tear-off edges (conic-gradient
sawtooth), Courier Prime monospace, hand-set details:
Header: "TOKENFOLIO · STORE · EST. 2024 · REG #1" plus a
rotated "PAID IN FULL" rubber stamp in red ink
Metadata: receipt no. (TF-{year}-{nnnn}), date+time, cashier name,
member handle, dept "AI ENGINEERING", deterministic 8-char
auth code derived from year + total
Items: top projects rendered as line items with leader-dot rules
between name and price ("LARK-CLI .... 12,400,000"); a
session-count + language meta line below each
Bundles: by_model rendered as "BUNDLE OPUS-4.7 × 142 24,000,000"
Subtotals: subtotal, discounts (0), coupons (0), tax rate "0.00%",
tax (0), all aligned right with tabular-nums
Total: 19px headline between two double rules — "TOTAL 47,221,890"
with "TOKENS · 2025" caption below
Tender: "TENDER: HOURS & ATTN", "CHANGE: — · KEEP THE TIME"
Stats: sessions / projects / avg-session / peak month
Note: peak-month note quoted under "/ / CASHIER NOTE / /"
Barcode: 56 deterministic-but-random-looking varying-width bars in
pure CSS (no SVG asset), with EAN-style guard bars every
13th position; digits below
Footer: "RETURN POLICY: Tokens are final sale", a 56px CSS QR
code stub, "SCAN TO REPLAY 2025"
Background is warm dark wood — wood-grain stripes via two repeating
linear gradients overlaid on a brown radial. The receipt is centered
with a deep box-shadow to anchor it on the surface.
13 templates · 7 CLI subcommands · 1.4 MB package.
v0.9: synthwave template + animated README demo + Satori OG
- New 12th template `synthwave` — 1985 arcade outrun aesthetic. Wireframe-
grid horizon receding to a banded Outrun sun, hot pink + electric cyan,
chromatic-aberration headline number, CRT scanlines + VHS bezel, and a
cycling `INSERT COIN TO CONTINUE` footer. Pure CSS art, no JS libs.
- New `previews/demo.svg` — a self-contained SMIL-animated terminal
recording that walks `init → pick → deploy → live URL` in ~12 seconds.
Embedded at the top of both READMEs as the cold-visitor "what does this
do" hook. ~8 KB.
- New `scripts/gen-og.js` — Node ESM OG renderer using Satori +
@resvg/resvg-js. Both are OPTIONAL deps loaded via dynamic import; no
change to the tokenfolio install footprint. Resolves global installs
across CJS/ESM interop shapes (`{default: {default: fn}}` from
createRequire was the gotcha). Inter WOFF lazily fetched + cached in
os.tmpdir(). `tokenfolio og` now defaults to the JS path for users
without Python and falls back to Pillow automatically when Satori
isn't installed.
- `bin/tokenfolio.js` gains `--js` / `--python` engine flags for the
`og` subcommand (default: auto). Help text updated. CI grows a step
that exercises the Satori path end-to-end with `npm i -g`.
- README hero grid now shows 12 cells (every template gets a tile);
gallery `index.html` adds the synthwave card and bumps to v0.9.
v0.8: visual layer — README hero grid + static gallery Cold-visitor first impression was the #2 unaddressed item from the original shareability audit. Fixed in this release. - 11 high-quality 1280×800 JPEG previews of every template under previews/ (~110 KB each, 1.2 MB total — kept under npm package limits) - README hero grid (3×4 HTML table) showing every template at the top of both README.md and README.en.md, each thumbnail linked to its live page - Replaced the iframe-based gallery in index.html with static <img> previews. Old gallery: 11 iframes loading 11× Google Fonts + JS = 5–10 s LCP. New gallery: 11 lazy-loaded JPEGs = instant. Hover scale-up keeps the interactive feel. - previews/ added to package files whitelist so the npm page renders the hero grid too (it's a key acquisition surface). - CI now asserts every template has a non-empty preview.
v0.7: vinyl LP template + share command New 11th template: vinyl — back of an LP sleeve. Square 1:1 (made for IG screenshots), Helvetica-tight name + "TWENTY TWENTY-FIVE" album title, two- column track listing where top_projects are tracks with token-derived "runtimes," "Produced by / Engineered by / Mastered by" credits drawn from top three by_model entries, real-looking EAN-style barcode (pure CSS, no SVG asset), catalog number derived from year, and a run-out groove text. New CLI: `tokenfolio share` — auto-detects the deploy URL from `git remote origin`, then opens both the deploy and a pre-filled X intent URL in the default browser. Also prints a LinkedIn share URL. `--no-open` prints without launching, `--text` overrides the share copy. Closes the loop between `init`, `pick`, and "tell people about it." CI now serves and lints all 11 templates and exercises the share subcommand for sane URL output.
v0.6: shareable by default
In-page share verb — every template now ships with a floating Save-as-PNG /
Web-Share FAB (lazy-loads html2canvas-pro) plus a "Built with tokenfolio"
chip top-right that survives screenshot crops. The chip and FAB self-install
from a shared share.js.
New CLI subcommands:
tokenfolio badge → emits ./badge.svg (shields-style) + ./card.svg
(github-readme-stats-style with monthly sparkline);
prints a markdown snippet ready to paste into a
GitHub profile README. Pure Node, zero deps.
tokenfolio pick <template>
→ rewrites ./index.html as a redirect to the chosen
template (replaces the hand-edit instruction in the
README).
New 10th template: tcg — a Pokémon-style trading card with gold border,
psychic frame, energy-typed attacks, mouse-tracked tilt + foil overlay.
Surgical fixes per shareability audit:
terminal — hero animation no longer delays first frame; added a giant
47.2M hero block above the totals grid (the grid itself stays
aligned because the bump is decoupled from rpad-based cells).
almanac — hero token count is now dark red ink at clamp(72px, 12vw, 120px);
paper grain alpha bumped 0.04 → 0.09 so the parchment reads in
screenshots.
aurora — hero stat card gains a purple border; hero number font-weight
200 → 300; gradient endpoint changed to #fff for thumbnail
legibility.
CI now exercises both new subcommands and asserts every template loads
share.js + declares data-tf-capture.
v0.5.1 · security + UX hardening CRITICAL - XSS: add esc() + escape every user-controlled field across the 8 templates that previously injected user.name / project.name / etc. straight into innerHTML (terminal already had escaping). Public deploys are now safe even when a directory name happens to contain HTML. HIGH - og:meta auto-rebrand. New `tokenfolio brand` subcommand rewrites the hardcoded tt-a1i.github.io URLs in template HTMLs to the user's own deploy URL (auto-detected from `git remote origin`, or supplied via --site-url). `tokenfolio init` also runs the rebrand at the end when it sees a non-upstream remote. - gen-og.py no longer falls back to the bundled demo data.js when ./data.js is missing — users who didn't run `init` now get a clear error instead of silently publishing Ada Lovelace's stats. - Codex parser: refactor the line filter into an explicit payload-type allowlist (token_count + turn_context only). Privacy becomes structural rather than a side-effect of which fields we happened to read. - ccusage pinned to `ccusage@^18`; --year now requires a 4-digit int. POLISH - new --bio and --site-url flags; --output warns when the path resolves outside cwd - numeric handles (QQ-style email prefix → @2801884530) print a hint to override via --handle - gen-og.py: argv replaces the OG_OUT env var, explicit utf-8 reads, restore accidentally-removed `os` import - README (中 + EN): warn against copying templates to root (relative ../../data.js breaks); add a "hand-edit when not on Claude/Codex" section pointing at Cursor / Copilot / Aider token sources - data.js: drop the stale "in a future release init will…" comment - package.json: homepage → demo URL; bump to 0.5.1 - repo: add 10 GitHub topics (ai / claude-code / codex / portfolio / …) 14 files changed; +370 / −162.