anti-gambling-trader-tw
Free open-source investment anti-fraud, trading statistics and automated trading program tools: default PaperBroker, provides 14 broker/exchange options; trade record analysis runs locally.
AI translation
Interactive Sankey income statements for 235+ companies — 1,080+ quarterly & annual datasets traced from earnings infographics, pixel-verified in headless Chromium and published through a human-review
FinanceJavaScript · HTMLGitHub @CharlesLiuyxOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Interactive Sankey income statements for 235+ companies — 1,080+ quarterly & annual datasets traced from earnings infographics, pixel-verified in headless Chromium and published through a human-reviewed, auditable pipeline. Static d3 site with Sankey, trend & table views, comparison mode, EN/中文, SVG/PNG/CSV export — works offline.
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗Turn metric images and text into traceable company and product data. Trace turns company financials into the earnings infographics you see go viral — green for value retained, red for costs, teal for revenue collected — covering companies from NVIDIA, Apple, and Microsoft to TSMC, LVMH, Tencent, and SpaceX, across quarterly and annual periods.
Put a PNG or UTF-8 text file in input/pending/ and ask Codex or Claude Code
处理{文件名}. The agent records exact values in an isolated draft, runs the
automatic checks and replies with a review link; run pnpm dev to open it.
Your approval publishes locally; pushing is a separate instruction. Process:
asset workflow (graph);
workbench and concurrent Sessions: local environments.
index.html and it just works.nvm use # Node version matches CI (.nvmrc)
pnpm dev # local review workbench
# open http://127.0.0.1:8000
…or skip the server entirely and double-click index.html — all runtime
dependencies are vendored in vendor/, so the viewer runs offline.
In the viewer: pick a company and period from the left navigator, switch views with the top Sankey / Trend / Table buttons, and multi-select companies or periods to enter comparison mode. The toolbar toggles theme and language and hosts the SVG/PNG/CSV exports. Sankey comparisons normalize the painted monetary faces to one USD scale; charts with very different magnitudes may start sub-pixel at fit and can be inspected with comparison zoom. If any selected record lacks trustworthy geometry or money metadata, the whole comparison shows a calibration error instead of mixing scales.
The sidebar list, Table view, CSV export and localized names read the same fields for each sort mode. A company without a value for the mode sorts after those with one; ties fall back to localized name, canonical name, then latest period.
| sort mode | source fields |
|---|---|
| Alphabetical | name, or i18n.<language>.displayName (aliases only match financial records) |
| Recently updated | newest data/dataset-file-metadata.js entry of the company's registered datasets (latest Git author time; kept current by the hooks in commit messages, Dataset metadata) |
| Market cap | marketCap.valueUsd, else marketCap.value/currency/unit, normalized to USD with USD_FX_SNAPSHOT (src/trace-domain.js, applied by src/app/financial.js); unsupported currencies count as missing |
| Net profit | latest matching data/income-statements/<company-key>.js record's profit.net.value, converted to USD with the same snapshot |
| Founded date | first four-digit year in founded, ascending |
New companies and periods enter as Sources through the
asset workflow, never as hand-edited adapters. Field
formats are indexed in data/schema.md.
col per node), so the layout follows the
financial narrative — segments → revenue → gross → operating → net —
instead of whatever d3's auto-layering produces.type;
link color is a gradient derived from its endpoints. You never pick a link
color by hand.Every dataset lives under a verification pipeline; the fast gates run in seconds and are green on any fresh checkout:
pnpm check # syntax sweep, unit tests, manifest/SSOT/i18n/metadata gates
pnpm verify:app # boot-and-click smoke of the viewer in headless Chromium
Per-dataset diagnostics render the pure d3-sankey SVG in headless Chromium, screenshot it, and compute pixel metrics against the reference image:
pnpm install --frozen-lockfile && pnpm exec playwright install chromium
pnpm verify:dataset -- <dataset-key> # data + i18n + render for one dataset
Two production artifacts, each with its own budget-enforcing verifier:
pnpm build:site && pnpm verify:site # optimized GitHub Pages projection
pnpm build:standalone && pnpm verify:standalone # single self-contained HTML file
The Pages build boots from a light catalog and loads details on demand; see
the runtime data contract. The standalone
build inlines everything into the Git-ignored
output/trace-company-product-metric-visualizer.html. Local output cleanup is
described in artifact retention.
CI (.github/workflows/ci.yml) always runs
pnpm check, plans browser/render gates from the Git diff, and deploys the
verified Pages artifact. docs/ci-verification.zh-CN.md
documents every check.
New datasets follow the workflow above: claim a Source from input/pending/,
author the data SSOTs and dataset adapter, localize fixed-layout text, pass the
automated render gates once per locale, then your review. The rendered output
under comparison is always the SVG produced by SankeyEngine.render() — never
the source PNG or crops of it. Source directories: input/README.md.
The owning documents:
docs/asset-workflow.md — the processing
process: commands, check boundaries, review, publication, and delivery.docs/dynamic-dataset-workflow.md —
dataset modeling rules and hard constraints.docs/fidelity-loop-rules.md — machine
fidelity gates, the reviewer checklist, and the feedback protocol.CONTEXT.md and docs/architecture/ —
domain language and lifecycle architecture.data/assets/README.md — icon crop extraction,
reference-asset layout and runtime raster annotations.Commit messages follow docs/commit-messages.md.
No framework, no bundler at development time: a static shell, ordered classic scripts, and a hand-rolled d3-sankey engine.
| file | role |
|---|---|
index.html | static viewer shell and ordered script registration |
src/app.css | viewer layout, controls, sidebar, and responsive styles |
src/app/ | viewer app modules (classic scripts, ordered in index.html, shared top-level scope) |
src/app/dom.js · util.js · dataset-loader.js · hotkeys.js · i18n-runtime.js | DOM refs · generic helpers/formatters · on-demand + company-scope preload Adapter loading, intent prefetch, raster-annotation warm, and retry · modifier-combo shortcut registry · localization caches over SANKEY_I18N |
src/app/state.js · selectors.js · financial.js · chart-theme.js | prefs + mode rules + UI state/scope · display/search derivations · USD/FX totals + company sort values · shared Chart.js theme plus lazy runtime loading |
src/app/shell.js · controls.js | theme/language/sidebar/toolbar chrome · metric/view switching + renderAll() |
src/app/company-panel.js · period-panel.js | company list, sort menu, multi-select · period tree, timeline, multi-select |
src/app/tables.js · trend.js · sankey.js | virtualized tables · revenue trend charts · sankey single/comparison orchestration, fail-closed scale presentation + draw() |
src/app/comparison-zoom.js · comparison-metric-trend.js | comparison canvas zoom gestures with a connected SVG-free browser-geometry resolver · node/link metric trend panel |
src/app/metric-library.js | General observations, source inspection, search and exact JSON export |
src/app/exports.js · main.js | SVG/PNG/CSV downloads · global wiring + boot (loads last) |
src/comparison-scale.js | Deep Comparison Visual Scale Module: validates renderer anchor geometry against Metric SSOT revenue lineage + money dimensions and produces one group-atomic USD normalization plan |
meta.logoSvg for your own asset.src/sankey-engine.js| d3-sankey renderer: compiled fixed/dynamic graph geometry + custom nodes/links/labels/logo/interactions; owns the public compiled node-value Geometry Interface |
src/dataset-registry.js | manifest-driven dataset stubs + in-place adapter upgrades on DATASETS.push |
src/runtime-data.js · scripts/lib/site-data.mjs | Pages summary/detail projection, version/integrity validation, deduplication, retry, background preload and in-place data hydration; full source/standalone no-op |
src/i18n-dictionaries.js · src/i18n.js | per-language translation data · language-neutral rule pipeline + deny-by-default overlays and visible-financial-token guard |
src/icons.js | Lucide icon set (inline SVG) + the NVIDIA brand glyph |
scripts/build-site.mjs · verify-site.mjs | builds the optimized Pages projection and enforces request/on-demand-loading budgets plus the all-period monetary-scale oracle |
scripts/build-standalone.mjs | builds the self-contained HTML artifact (inlines all adapters) |
scripts/verify-standalone.mjs | opens the artifact via file:// and checks d3 rendering, inlined raster assets, and the all-period monetary-scale oracle |
scripts/lib/comparison-scale-browser.mjs | independent Adapter + Metric SSOT + painted-DOM oracle shared by source, Pages, and standalone browser gates |
scripts/verify-app-globals.mjs | static gate for shared-scope duplicate declarations and load order |
scripts/plan-ci.mjs · scripts/lib/ci-plan.mjs | Git diff Adapter + tested ChangeImpact planning Module for CI check selection |
scripts/verify-render-regression.mjs | batch render + similarity baseline gate (data/render-baselines.json) |
scripts/update-dataset-manifest.mjs | regenerates data/dataset-manifest.js (dataset registration SSOT) |
scripts/script-sources.mjs | shared script classification for page and verifier harnesses |
scripts/lib/ | shared verifier internals: project paths, VM loader, data-loading stacks, render harness, fonts, PNG diff, compare archive, d3 hard gates |
tests/*.test.mjs | node:test unit tests (pnpm test): engine layout + compiled scale, Comparison Visual Scale, trace-domain, i18n, png-diff, script sources, dataset registry, hard gates |
scripts/extract_icon_crops.py | spec-driven icon crop extraction and validation (deps: scripts/requirements.txt) |
data/income-statements/<company-key>.js | pure financial-statement SSOT for totals and line items |
data/company-metadata/<company-key>.js | company-profile SSOT for Table mode and onboarding checks |
data/datasets/*.js | datasets (one per company/period) |
data/dataset-manifest.js | generated dataset registration manifest (navigation stubs + script paths) |
data/assets/ | reusable icon references and validation records |
vendor/ | d3 v7 and d3-sankey — vendored for offline use |