Skip to content

A real data table

Ledger

Clickable-header sorting, a live filter, and running totals — a spreadsheet-grade table written as one Markdown file. The numbers below are { … | money }; the dates are { … | date }; the totals are sum() / avg() / max().

Theme

Total spend

$1,109.35

Average

$138.67

Largest

$312.50

Entries

8

↻ live · 0 seconds on this page

Jun 22, 2026

Aurora Studio

Software

$149.00

Jun 20, 2026

Briza Coffee

Meals

$18.40

Jun 19, 2026

Cobalt Cloud

Hosting

$312.50

Jun 18, 2026

Dune Print Co

Office

$64.00

Jun 16, 2026

Aurora Studio

Software

$29.00

Jun 15, 2026

Ember Transit

Travel

$212.75

Jun 13, 2026

Briza Coffee

Meals

$11.20

Jun 11, 2026

Cobalt Cloud

Hosting

$312.50

8 entries · totalling $1,109.35 · sorted by amount (desc)

View source — it's Markdown
:store expenses = [ … ]
:state sortKey = "amount"
:state sortDir = "desc"
:state q = ""

:computed total = sum(expenses, amount)

# clickable headers set the sort column + direction
:button "Amount" -> sortKey = "amount" ; sortDir = "desc"
:button "▲" -> sortDir = "asc"

:bind q placeholder="Filter by merchant…"

@loop expenses into e where e.merchant contains q sort by { sortKey } { sortDir }
| { e.date | date:"medium" } | { e.merchant } | { e.amount | money } |
:button "✕" -> expenses remove e
@endloop

Total: { total | money }