Household plan card

The assistant's proposed batch of household data, reviewed and edited inline before an atomic accept, with settled and superseded states.

Your household picture

12 items to confirm

Goals

Retire at 60

Retirement · In about 18 years

For Eleanor Whitfield, Marcus Whitfield

£60,000/yr

People

Eleanor

Primary

Whitfield

Marcus

Partner

Whitfield

Companies

Whitfield Consulting Ltd

Ltd

09876543

Accounts

First Direct

Cash · current

Eleanor Whitfield, Marcus Whitfield

£18,400

Vanguard

Investment · stocks_and_shares

Eleanor Whitfield

£121,500

AJ Bell

Update

Investment · sipp

Eleanor Whitfield

£228,000

£243,000

Assets

Family home

Property

Eleanor Whitfield (50%), Marcus Whitfield (50%)

£850,000

Liabilities

Nationwide

Mortgage

Eleanor Whitfield, Marcus Whitfield

£420,000

Income

Eleanor Whitfield

Tax year 2025/26

Whitfield Consulting Ltd

Salary £12,570Dividend £37,700

Other income £4,200

Expenses

Household bills

Eleanor Whitfield · monthly

£2,400

School fees

Marcus Whitfield · annual

£18,000

Connect a bank for live balances and transactions.

<HouseholdPlanCarddata={plan}status={status}onAccept={(plan) => importHousehold(plan)}onDismiss={() => dismiss()}resolveName={(id) => names.get(id)}existing={{ accounts: existingAccounts }}/>

Usage

import { HouseholdPlanCard, type HouseholdPlanData } from "@reva/ui";

Renders the propose_household_data payload: people, companies, accounts, assets, liabilities, income, expenses and goals, wired together by proposal-local refs. The card owns the inline draft edits (Edit toggles every key figure into an input); the host owns persistence. onAccept receives the possibly edited plan, and the host reports progress back through accepting and error.

The lifecycle is controlled: pass status and anything but "open" renders the matching collapsed state. Rows that edit an existing entity carry an id; give the card existing maps and resolveName so those rows show the current values (the "current to new" figure) and existing owners read as real names.

The demo above wires accept and dismiss to local state, so try editing a figure and accepting.

Examples

Accepted

Saved 12 items to your household.

<HouseholdPlanCard data={plan} status="accepted" />

Dismissed

Dismissed. Nothing was saved.

<HouseholdPlanCard data={plan} status="dismissed" />

Superseded

A newer proposal in the same conversation replaced this one, so it collapses instead of leaving a second live confirmation.

Replaced by an updated picture below.

<HouseholdPlanCard data={plan} status="superseded" />

On this page