Tickmark hero: the cream and gold mark rendered in 3D beside the line "Finance controls that show their work"
Work archiveFlagship · Finance systems / AI evaluation

Live product · Real public data · Grew out of Run Replay

TickmarkFinance controls that show their work

A finance-controls workbench for month-end close, payroll review, controls on real 10-K filings, and a grader for financial-model answers—and a tool you can point at your own CSV files. Rules calculate, evidence stays attached, people release.

Open the live sitetickmark-martinzhang.vercel.appThe prototype: Run Replay
Role
Product · Financial controls · Data sourcing · Evaluation · Design · Front end · QA
Format
Live static site · Two pages · Seven-view workbench · Runs on your own CSV

Product idea

An auditor ticks every figure. Software should too.

A tick mark is the pen stroke an auditor leaves when a number has been traced to its source. Tickmark builds that habit into software: every amount is calculated by a tested rule, every exception carries the evidence that raised it, and only a person can release.

Run Replay proved the idea on synthetic data. Tickmark points the same controls at real public data—eight companies’ latest 10-K filings, Bank of Canada exchange rates, and the FinQA benchmark—and turns the prototype into a product someone can use in a browser.

8Real 10-K filings checked, with 3 findings: 1 untestable fact, 2 revenue swings over 15%
141Automated checks passing: 25 unit tests in CI plus 116 browser checks at desktop and phone width
2Checks you can run on your own CSV files, which never leave your browser
1,147Real FinQA questions, with a grader validated on every executable answer

Highlights

Real data where it matters. Honest labels where it isn’t.

01

Controls on real filings.

Assets = Liabilities + Equity, the cash roll-forward, and revenue flux run on SEC EDGAR XBRL data. Walmart doesn’t tag total liabilities, so the identity can’t be tested from tags alone—the workbench says so instead of guessing.

02

A grader for financial-model answers.

A deterministic FinQA grader executes each question’s gold program and grades any answer within 0.5%. It also flags a gold label that calls an 82/18 asset allocation a “debt-to-equity ratio”: benchmarks need auditing too.

03

A close that runs itself, a release that doesn’t.

The month-end close runs a five-stage pipeline on first view. High-severity exceptions block sign-off until a person decides; an override needs a written reason, and every action lands in the audit log.

04

A tool, not only a demo.

The “Your data” tab runs the same payroll rules and bank match on your own CSV files, with templates, drag and drop, and errors that name the row. Files never leave the browser. Decisions and the audit log survive a reload, and every table exports to CSV.

How I used AI

AI built fast. Tests decided what shipped.

  1. Sourced real data, kept it honest

    Directed an AI agent to pull SEC, Bank of Canada and FinQA data into a dated snapshot, and to label everything synthetic as synthetic—including planned evaluation suites marked “Planned”, not “written”.

  2. Validated the grader before using it

    The FinQA grader had to reproduce all 1,108 executable gold answers before it was allowed to grade anything.

  3. QA with a real mouse

    A script-driven QA pass missed an invisible overlay that blocked every click. Adding a real-pointer hit test caught it; the fix and the test both shipped.

Technical foundation

A static site that runs the rules in your browser.

Front end
HTML · CSS · vanilla JavaScript · SVG charts · no build step · rules in a separate tested engine
Real data
SEC EDGAR XBRL companyfacts · Bank of Canada Valet · FinQA test set (MIT)
Contact
FormSubmit to email, with validation, a spam trap and a mailto fallback
Delivery
GitHub Actions runs 25 unit tests on every push → Vercel · Blender for the 3D mark · headless-Chrome QA

Boundary

Real public data, synthetic company data.

Filings, exchange rates and FinQA are real and cited. The demo’s close, payroll and bank lines are synthetic and labelled that way; files you upload stay in your browser. Paid model comparisons have not been run, and there are no user-study results yet.

Back to all workRead the project logDiscuss the project