Money stays exact at every boundary
Raw amounts are exact integers. BigInt and strings carry money across boundaries instead of floating-point arithmetic. Conversion refuses unsupported precision rather than silently rounding.
Flagship / Engineering case study
Exact-money stablecoin bookkeeping with resumable blockchain ingestion.
Full-stack SaaS with PostgreSQL, authenticated workspaces and resumable data imports.
TypeScript / Next.js / PostgreSQL / Drizzle / Vercel
Imported from Arc. Uniqueness enforced by the database.
integer → BigInt → stringEdited by the business. Preserved when history is imported again.
No private key. No signing path.01 / The problem
A wallet records that money moved. A business still needs to know who paid, what it was for and how to hand that context to an accountant. Reconstructing it in a spreadsheet is repetitive and fragile.
02 / What I built
A business supplies a public wallet address. ArcLedger imports USDC activity from Arc, then adds categories, counterparties, internal-transfer identification, descriptions, notes and rules. Accountant-oriented CSV exports complete the workflow. It never requests a private key or seed phrase and has no transaction-signing path.
03 / Architecture
Follow the flow as you scroll, or select a step.
The business provides an address, never a private key or seed phrase. There is no transaction-signing path.
Adaptive page retrieval responds differently to provider range suggestions, oversized ranges and errors that require backoff.
An interrupted job resumes from its checkpoint instead of forcing the next sync to start from zero.
Amounts remain exact integers. PostgreSQL constraints enforce transfer identity, so retries do not duplicate a transfer.
Categories, counterparties, notes and rules belong to the workspace. A chain re-import does not overwrite this user work.
The business reviews the classified activity and exports CSV records for its accountant.
One read-only import path. User bookkeeping is stored separately from the chain facts it describes.
04 / Key decisions
Raw amounts are exact integers. BigInt and strings carry money across boundaries instead of floating-point arithmetic. Conversion refuses unsupported precision rather than silently rounding.
Raw chain records are separate from user classifications. Re-importing history cannot overwrite notes or categories; transfer identity is enforced by database constraints.
The importer distinguishes a provider-suggested range, a range that needs shrinking and an error requiring exponential backoff with the same range. Checkpoints let an interrupted import resume.
An architectural decision log preserves context, alternatives, reasoning, consequences and review triggers. Reversed decisions remain in the history so the trade-off is visible.
05 / What went wrong
06 / Evidence

07 / Current status & limitations
Deployed private beta, built against Arc testnet. No real users yet. The achievement here is the engineering, not adoption or mainnet operating history.
Evidence basis: project implementation review and research notes supplied for this portfolio, September 2026. Project tests described here are distinct from the portfolio’s own checks.