Personal financeLive2026

Charten

Know exactly what you're worth.

A private net-worth ledger. Read-only bank and brokerage sync, plus the assets a bank cannot see — property, vehicles, crypto — resolved into one number and a history you can scroll back through.

Live
public signup, today
Read-only
no write access, ever
Encrypted
at rest, with access logs

The problem

Your money is in eleven places and your net worth is in none of them

Bank, brokerage, pension, the house, the car, a crypto wallet or two. Every one of them knows its own number and none of them knows the total. People end up maintaining a spreadsheet that is accurate on the day they update it and wrong every day after that.

How it was built

In order, and why.

  1. 01

    Ledger first

    Before any sync, the data model: an append-only ledger of balances over time rather than a table of current values. Net worth is a question about history, and a schema that only stores 'now' can never answer it.

  2. 02

    Read-only sync

    Daily aggregation from banks and brokerages, scoped read-only at the token level. The application is architecturally incapable of moving money, which is the only version of this worth building.

  3. 03

    The rest of it

    Manual assets for everything an aggregator cannot reach — property, vehicles, private holdings — with their own valuation history rather than a single number somebody typed once.

  4. 04

    Prove it is private

    2FA, access logging, encryption at rest, and full export. A product asking for this data has to be able to show its work, not assert trustworthiness in a footer.

The part that was actually hard

Net worth is a time series, not a number

The naive build stores a current balance per account and computes a total. It works for a week and then someone asks what they were worth last March, and there is no answer because history was never kept. Charten stores balance events and derives every total by replaying them, which also means a corrected balance updates the past correctly instead of creating a fictional jump on the day of the fix.

What it does

The features that carry it.

01

Read-only account sync

Daily balance pulls from banks and brokerages, with read-only scopes. Nothing in the system can initiate a transfer.

02

Assets a bank cannot see

Property, vehicles, crypto and private holdings, each with its own valuation history rather than a figure that was right once.

03

Multi-currency

Holdings in several currencies resolved to one reporting currency, with the rate on the day rather than today's rate applied to history.

04

Access logging

Every session and every read recorded, and visible to the account owner. If you cannot see who opened it, it is not really private.

05

Export

Full data export in a format a spreadsheet opens. Leaving is a supported operation, not a support ticket.

06

Free tier, no card

A genuinely free tier that does not ask for payment details, because asking for a card to look at your own money is a strange trade.

Outcome

What actually changed.

01

Live, with open signup

Publicly available with a free tier that does not ask for card details. Anyone can create an account and see the product working rather than take our word for it.

02

History that survives a correction

Because totals are replayed from balance events, fixing a wrong figure updates the past correctly instead of creating a step change on the day of the fix.

03

Read-only by architecture

Scoped at the token level rather than enforced by policy, so the application is structurally incapable of moving money even if something went wrong.

In hindsight

What we would do differently.

Multi-currency should have been in the schema on day one. We added it after the ledger already assumed a single reporting currency, which meant reprocessing every stored event to attach the rate that applied on the day. Deciding it up front would have cost an afternoon; retrofitting it cost most of a week and a migration we had to rehearse twice.

Built with

The stack underneath.

Application
Next.js, React, TypeScript
Backend
NestJS, Prisma, PostgreSQL, BullMQ
Security
2FA, access logging, encryption at rest
Infrastructure
Scheduled sync workers, daily aggregation

Where it stands today

Publicly live with open signup, and the one piece of our work you can evaluate without a call. What it demonstrates is event-sourced financial data, read-only integrations and a security model built to be inspected — the same foundations we bring to regulated and finance-adjacent engagements.

Practice areas this evidences

Tell us what you’re trying to build.

If something here looks like the problem you have, say so and we’ll tell you how close it actually is.

Reply time

One business day, from an engineer

Based in

Orlando, Florida · serving the United States

What happens next

  • A reply within one business day, from an engineer
  • A thirty-minute call, with no qualifying call before it
  • A written scope and a fixed number, if it fits