every model spec’d & versioned · Concordance-tested 2×changelog →

Lodestar kit

What your advisors would see

Lodestar works standing mandates on your households and files proposals for an advisor to decide. These are the components that put that in your app: the proposal inbox with approve and reject, the Anchor-verified mark on every figure, the ledger of approved value, and mandate setup. Below, each one runs on the fictional book from a week of Lodestar.

The components hold no key and decide nothing. Approve, reject and create hand the decision to your app; your server makes the API call with its own approver or developer key, so who may approve stays your decision, enforced by Worthune’s roles. Every frame takes your brand colors, checked for WCAG AA contrast when you set them.

Proposal inbox

What is waiting, worth how much, soonest deadline first. Each card shows why now, the steps, the alternatives considered and the caveats, with approve and reject. Try them: here they only show the call your server would make.

Proposals

2 proposals worth $102,614 waiting for a decision

Pre-retiree, traditional-heavy

Fill a tax bracket with Roth conversions: Fill the 12% bracket each year

Anchor-verified

Every figure here comes from one decision record computed by Worthune's published engines. Anyone can recompute its SHA-256, below, to show the figures were not changed.

9f09bba777c15623791e512d64fa621b16d796b1bff5f4934d96a8d84e58bcb8

$102,614 lower lifetime tax

The household's record changed · Expires in 26 days if no one decides

  1. Convert $100,800 from traditional to Roth in 2026, to the top of the 12% bracket.
  2. Convert $100,800 from traditional to Roth in 2027, to the top of the 12% bracket.
  3. Convert $100,800 from traditional to Roth in 2028, to the top of the 12% bracket.
  4. Convert $100,800 from traditional to Roth in 2029, to the top of the 12% bracket.
  5. Convert $100,800 from traditional to Roth in 2030, to the top of the 12% bracket.
Alternatives and caveats
  • No conversions: $0 lower lifetime tax

ending net worth: $0; lifetime tax: $420,200

converts $504,000 over 5 years

estimated IRMAA surcharges: $0; score = ending net worth − surcharges

vs. the current plan, lifetime federal and state tax through 2055, nominal dollars (not discounted), under profile demo-cma@1.0.0

Whole book

Move to the new assumption profile

A new assumption profile was published · Expires in 27 days if no one decides

Assumption profile demo-cma 1.1.0 was published (the book runs on 1.0.0). Moving to it changes the recommendations for 1 of 5 households; $127,726 of projected value moves. Nothing moves until this is approved.

<!-- one household's proposals, with a token from POST /api/v1/embed-tokens -->
<div data-worthune-embed="lodestar-inbox" data-token="wet_…"></div>
<script async src="https://worthune.com/embed.js"></script>

<script>
  document.addEventListener("worthune:proposal-decision", async (e) => {
    // e.detail = { proposalId, decision: "approve" | "reject", reason?, note? }
    await fetch("/your-api/lodestar/decide", { method: "POST", body: JSON.stringify(e.detail) });
    // your server: POST https://worthune.com/api/v1/proposals/{id}/approve (or /reject) with an approver key
  });
</script>

Proposal card, Anchor-verified

One proposal on its own, here in the dark theme. Open the Anchor-verified mark: every figure on the card comes from one stored decision record of Worthune's published engines, identified by its SHA-256, and signed where your deployment signs records.

Pre-retiree, traditional-heavy

Fill a tax bracket with Roth conversions: Fill the 12% bracket each year

Anchor-verified

Every figure here comes from one decision record computed by Worthune's published engines. Anyone can recompute its SHA-256, below, to show the figures were not changed.

9f09bba777c15623791e512d64fa621b16d796b1bff5f4934d96a8d84e58bcb8

$102,614 lower lifetime tax

The household's record changed · Expires in 26 days if no one decides

  1. Convert $100,800 from traditional to Roth in 2026, to the top of the 12% bracket.
  2. Convert $100,800 from traditional to Roth in 2027, to the top of the 12% bracket.
  3. Convert $100,800 from traditional to Roth in 2028, to the top of the 12% bracket.
  4. Convert $100,800 from traditional to Roth in 2029, to the top of the 12% bracket.
  5. Convert $100,800 from traditional to Roth in 2030, to the top of the 12% bracket.
Alternatives and caveats
  • No conversions: $0 lower lifetime tax

ending net worth: $0; lifetime tax: $420,200

converts $504,000 over 5 years

estimated IRMAA surcharges: $0; score = ending net worth − surcharges

vs. the current plan, lifetime federal and state tax through 2055, nominal dollars (not discounted), under profile demo-cma@1.0.0

<worthune-lodestar widget="inbox" theme="dark" token="wet_…"></worthune-lodestar>
<script async src="https://worthune.com/elements.js"></script>

Ledger of approved value

What advisors approved, and the projected value of it, each line tied to its decision record. Projected, in nominal dollars under the assumptions each decision names; never presented as realized.

Approved moves

$898,326 of projected value approved across 4 decisions

ApprovedHouseholdMoveProjected value
Jul 4, 2026Retired couple, unequal earnings recordsChange the withdrawal order$33,143
Anchor-verified

Every figure here comes from one decision record computed by Worthune's published engines. Anyone can recompute its SHA-256, below, to show the figures were not changed.

197bcc8494fce69ad43c93c44433635da79c02d539f2ed9b7e5744fc9212f602

Jul 4, 2026Retired couple, unequal earnings recordsSocial Security claiming age$763,213
Anchor-verified

Every figure here comes from one decision record computed by Worthune's published engines. Anyone can recompute its SHA-256, below, to show the figures were not changed.

c7c5c32b60af425716e9480cdd88faf6a5d89a373aab4e3b64bd2d64e7d262f9

Jul 4, 2026Retired donor taking RMDsChange how gifts are given$4,840
Anchor-verified

Every figure here comes from one decision record computed by Worthune's published engines. Anyone can recompute its SHA-256, below, to show the figures were not changed.

dc115442145df8c01cb7329c765b723b6589409fd35ee979321cb03eedb70837

Jul 4, 2026The conversion windowFill a tax bracket with Roth conversions$97,130
Anchor-verified

Every figure here comes from one decision record computed by Worthune's published engines. Anyone can recompute its SHA-256, below, to show the figures were not changed.

c5296e7990c9f9c0e34f6c1be6bb04591641032810181ab4cb954ebf54f48e79

Projected value is an estimate in nominal dollars under the assumptions each decision names, not a realized return.

<div data-worthune-embed="lodestar-ledger" data-token="wet_…"></div>

Mandate, in words

A mandate's standing instructions as an advisor or a client reads them: what it watches, when it proposes, how often it looks, and that nothing happens without approval.

Mandate · active

Tax Optimization · The conversion window

Minimize lifetime tax.

  • Watches: Fill a tax bracket with Roth conversions.
  • Proposes a move only when it is worth at least $1,000, at most 3 at a time.
  • After a decision, waits 30 days before raising the same strategy again.
  • Reviews the household quarterly, and whenever something changes.
  • Deterministic: every proposal that clears the checks is filed.
  • Nothing happens until an approver approves; Lodestar never moves money.
// From GET /api/v1/mandates/{id}, rendered by your app, or shown inside the inbox embed.

Mandate setup

A form that builds a valid mandate, checked as you type by the same validator the API runs. Open “The request this builds” to see exactly what your server would send.

Set up a mandate

Strategies to watch (none ticked means all of this type's)
The request this builds
POST /api/v1/mandates
{
  "householdId": 1,
  "type": "tax-optimization",
  "objective": {
    "target": "minimize-lifetime-tax"
  },
  "constraints": {
    "profile": {
      "id": "firm-cma",
      "version": "2026.10"
    },
    "horizonYears": 30,
    "strategies": [
      "roth-ladder",
      "bracket-fill"
    ],
    "materialityFloorUsd": 1000,
    "cooldownDays": 30,
    "maxOpenProposals": 3,
    "reviewCadence": "quarterly"
  }
}
<div data-worthune-embed="lodestar-mandate-setup" data-token="wet_…"></div>
<script>
  document.addEventListener("worthune:mandate-spec", (e) => {
    // e.detail.body is a POST /api/v1/mandates body; send it from your server with a developer key
  });
</script>

Putting it in your app

  1. Set your brand colors and allowed domains once: PUT /api/v1/tenant-config (Growth).
  2. For each advisor view, mint a short-lived token for the household: POST /api/v1/embed-tokens with widget: "lodestar-inbox".
  3. Drop in the element, listen for the decision event, and call the API from your server with the advisor’s approver key.

Without a token every widget shows this fictional book, labeled as such. See the embed docs and your console.