Browser
Next.js + React
Accessible forms, filter controls, request-generation guards, and an isolated sample-data preview.
Behind the product
A full-stack engineering case study in financial precision, auditable edits, database concurrency, and honest market-data states.
Browser
Accessible forms, filter controls, request-generation guards, and an isolated sample-data preview.
API
JWT authorization → controller → service. Validate, lock, revise, replay, and commit.
Data
Ledger revisions, derived holdings, schema constraints, UTC execution times, and quality-labelled snapshots.
01
Creates, edits, and deletes replay active trade revisions into a holdings read model. Replacing an entry preserves the previous revision; invalid historical sells roll back the entire change.
02
An optional execution timestamp is stored in UTC, separately from the original audit timestamp. Replay orders by execution time, then stable ledger sequence. Backdating is supported; future trades and historical oversells are rejected.
03
Quantity uses eight decimal places; prices and average costs use twelve, with twenty-place cost basis and realised-profit allocation. USD totals round to cents at their defined output boundaries—not before multiplying a small unit price.
04
A database row lock serializes each user's writes. Active-revision and holding constraints protect invariants; concurrent users can safely introduce the same asset into the shared catalog.
05
Quotes expire, cached fallback has a maximum age, and upstream requests have timeouts and backoff. Stale, missing, or uncertified observations are labelled rather than shown as trustworthy zero-value history.
06
Owner-scoped symbol/type/date filters and allowlisted sorts run in PostgreSQL before pagination. CSV uses one bounded, repeatable-read snapshot so concurrent edits cannot shift rows between export pages.
Affected snapshots are invalidated, not invented retroactively. New observations resume after the committed change.
This is a personal tracker, not an exchange or tax engine. History is point-in-time valuation, not a cash-flow-adjusted investment return. Ledger replay remains linear; history/export is capped at 10,000 matching rows.
The public demos are deterministic frontend fixtures, not seeded customer accounts or proof of a live backend. Account verification/recovery, production restoration, trusted proxies, and deployment still have explicit launch gates.