Skip to main content

Sample

  • BTC $67,234.50, +2.82% over 24 hours
  • ETH $3,521.80, +2.60% over 24 hours
  • SOL $172.45, -1.82% over 24 hours
  • VOO $498.32, +0.43% over 24 hours
  • AAPL $198.50, -0.65% over 24 hours
  • NVDA $924.60, +3.91% over 24 hours
  • BND $72.40, +0.12% over 24 hours
  • VXUS $58.20, +0.28% over 24 hours

Sample data · no brokerage connection

Your portfolio, from one file.

One workspace file in. Allocation, performance, risk, a ledger, exports and a typed API out.

No brokerage connection · no signup · no client money

Setup service · price on request

The one live price call, and the two branches it can takeThe page makes one live price request, to api.coingecko.com/simple/price, inside an 8-second abort budget. If the upstream answers inside the budget, the dashboard shows its live quotes. If the budget runs out, the resolver falls back to the workspace file’s own quotes, so no panel ever renders blank. Zero real accounts are linked: no OAuth and no keys.Price feedapi.coingecko.com/simple/price8 s abort budgetanswered earlylive quotes · 4 of 4budget spentthe file’s own quotes0 real accounts linked· no OAuth, no keys
sample

Sample portfolio balance

$2,408,000.00

sample workspace

+$17,997.20 +0.75% today

Allocation
4CLASSES
  • U.S. Equity$860k35.7%
  • Fixed Income$600k24.9%
  • Crypto$588k24.4%
  • Intl Equity$360k15.0%
Risk
  • Sharpe0.92
  • Sortino1.56
  • Max Drawdown9.64
Last 30 days
30d agotoday

One file in · six things out

One workspace file in, six things outThe workspace file data/portfolio.json holds six positions, eight quotes and twenty transactions; data/balances.json holds 730 daily closes. One read of those two files fills the dashboard, which shows allocation, performance, risk, the transaction ledger, CSV, JSON, HTML and PNG exports, and the typed JSON API at GET /api/portfolio. Every figure shown is sample data from the shipped sample workspace.Workspace filedata/portfolio.jsonpositions [ 6 ]quotes [ 8 ]transactions [ 20 ]data/balances.json730 daily closes2024-10-19 → 2026-10-18SAMPLEOne readSAMPLEAllocationPerformanceRiskLedgerExportsTyped API

Sample workspace · replace the file and every panel follows

The dashboard · sample workspace

the engineering write-up ↗
Performance730 closes + today
$2.41M+$609,084.62+33.86% over 2 years
low $1.71Mnow
Holdings6 positions · 4 classes
U.S. Equity$860k35.7%
  • VOOVanguard S&P 500 ETF$540k22.4%
  • AAPLApple Inc.$320k13.3%
Fixed Income$600k24.9%
  • BNDVanguard Total Bond ETF$600k24.9%
Crypto$588k24.4%
  • BTCBitcoin$336k14.0%
  • ETHEthereum$252k10.5%
Intl Equity$360k15.0%
  • VXUSVanguard Total Intl ETF$360k14.9%
Market tableworkspace quotes · 24h
  • BTCBitcoin$67,234.50+2.82%
  • ETHEthereum$3,521.80+2.60%
  • SOLSolana$172.45-1.82%
  • VOOS&P 500 ETF$498.32+0.43%
  • AAPLApple Inc.$198.50-0.65%
  • NVDANVIDIA Corp.$924.60+3.91%
  • BNDTotal Bond ETF$72.40+0.12%
  • VXUSTotal Intl ETF$58.20+0.28%
Ledger6 of 20 rows
  • BuyBitcoin$17kCompleted
  • SellTesla Motors$4kCompleted
  • DividendApple Inc.$143Completed
  • DepositWire Transfer from Bank$10kCompleted
  • BuyEthereum$9kPending
  • SellNVIDIA Corp.$7kCompleted

Sample data throughout · no real accounts · no client money

Inside the build

Four properties, not four promises.

What this one does when the feed misbehaves.

Never a blank chart

Live quotes inside an 8-second budget, with the workspace’s table behind them.

Feed resolution

Request budget · 8 sanswered earlybudget exhausted
Quotes used
4 of 40 · seeded
Portfolio base
$2,408,000.00

Sample data, re-enacted: a quiet upstream changes what the feed reports, never what the portfolio is worth.

Checking feed…
Portfolio total
—

Resolving the feed…

One request, not twelve

One download, every chart; one bad chart, not the page.

Chart downloads

twelve separate downloads · avoided

one shared download · every chart

  • Portfolio performanceisolated
  • Asset allocationisolated
  • Profit & lossisolated
Downloads per visit
1
Charts on the dashboard
3
Chart failures that reach the page
0

A blank that is a number, never a reach

$0.00 counts up. A missing value is an em dash, never a gap.

Portfolio summary

sample data

Settled balance
$2,408,000.00
Empty position
$0.00
Not yet computed
—
empty series · $0.00
Decimals shown
2, always
Third decimal
cut, never leaked
Missing figure
em dash
Zeros that were not there
none

Compacted on a phone, never amputated

A drawer on a phone, a rail on a desktop. The KPI grid reflows 4 → 2 → 1.

measured at 375 px · no horizontal scrollevery visible control ≥ 44 px tall

Sample workspace — no real accounts, no client assets. Holdings, totals and quotes: one file.

Data & privacy

Everything this build holds.

The inventory, and the policy behind it.

No brokerage connection, no client money. Custody and KYC are a different product.

Server-side store

In-memory

Resets on a cold start. Stripe’s Checkout Session record is the durable copy.

User accounts

None

No sign-up, sign-in, user session or user record.

Credentials

Server-side only

The payment key stays on the server; the price feed carries no key.

Browser storage

One key

tellerswindow:welcome-dismissed — one flag, workspace-scoped.

Cookies set

None

Only Stripe’s checkout page sets its own.

Remote requests

Two hosts at most

CoinGecko for a quote on four symbols; Stripe only for a checkout.

Payments

Stripe, where configured

The card form is Stripe’s page — no card field here. A purchase is recorded only after Stripe’s signature checks out.

Certifications

None claimed

No SOC 2, no ISO 27001, no pen test, no insurance.

The page’s own limitsin effect
  • TrackersNone— no analytics, no pixel, no tag
  • Browser requestsThis origin, then Stripe— the quote runs on the server; checkout is Stripe’s
  • Framing & pluginsRefused— the page cannot be framed or embedded
  • Images from elsewhereNone— every image is served from this origin

Firewalled twice: an 8-second abort on the server, and a browser whose only script connection is this origin. Checkout is a navigation to Stripe, not a connection.

FAQ

Asked, and answered plainly.

If something here reads like marketing, that is a bug.

Ask something else
  • A portfolio dashboard. One file — positions, quotes, a ledger — becomes allocation, performance, risk, exports and an API.

  • Sample data, labelled wherever a number appears. The live call covers four symbols inside an 8-second abort, and the page names the source.

  • Yes. Replace the two files and rebuild; every surface reads them. Settings’ Data panel names and downloads both.

  • The live feed timed out, was rate-limited or sent something unusable, so the quote came from the workspace’s own table — and the page said so.

  • No. There is no Plaid, Yodlee, OAuth or exchange key in the build, so there is no path to a real account.

  • No, and it could not be: no brokerage accounts, no client records, no assets — nothing to insure, secure or audit.

  • Yes — holdings as CSV, JSON or HTML, any chart as a PNG, the ledger as CSV, and the Data panel downloads both files.

  • No. No analytics, no pixel, no tag. One flag in your browser records that you closed the welcome panel.

  • The dashboard is free, and pointing it at your own data is a file replacement you can do yourself. What can be paid for is having that done for you: the setup service, priced by the deployment.

Scope

What it covers, and where it stops.

What it does today, and the edges it does not cross.

Covers

what you get

The product

Ships in this repo
  • One file: positions, quotes, ledger
  • One balance file of closes
  • Allocation, performance, risk — computed
  • CSV, JSON, HTML, PNG exports; a typed JSON API
  • Responsive from 375 px, keyboard path

Pointed at your data

A file away
  • Replace the two files; every surface follows
  • Settings’ Data panel names and downloads both
  • The workspace reports whether its files agree
  • Malformed rows are skipped and reported, never fatal
  • No brokerage link, so nothing to reconcile

Have it done for you

Your two workspace files in place of the sample’s, rebuilt and checked.

Checking whether payment is switched on…

Does not

not claimed
  • No user accounts, sign-in sessions or a database
  • No brokerage, exchange or custodian connection
  • No trade execution, order routing or cash movement
  • No SOC 2, insurance, KYC or AML review
  • No support desk behind the contact address

Not a backlog and not a promise — this is what the product does not do.

Open the dashboard. Nothing to sign up for.

One workspace file in, one live price call that names its branch, and a chart that never renders blank. The dashboard is free; the setup service costs money.

  • 8s abort budget
  • workspace fallback on failure
  • 0 real accounts
  • one browser key, no tracking