Olive dashboard showing demo allocation, performance, attribution, positions, and concentration panels.
Dashboard and concentration view, rendered from Olive's demo-seed portfolio.
Olive transaction ledger showing demo buys, dividends, notes, linked journals, and bulk edit controls.
Transaction ledger as the source of truth for lots, cash movement, and derived positions.
Olive private-company security page showing valuation marks, forward exposure, vest events, signals, and catalysts.
Private-company and future-vest surface. Forward exposure is kept out of live NAV.
Olive rebalance assistant showing allocation targets, durable constraints, and privacy boundary copy.
Rebalance assistant shell, including the percentage-only privacy boundary for model-assisted sessions.

Screenshot note: these images are from Olive's local demo seed. They do not show personal balances, private transactions, employer data, or real financial assumptions.

Problem

Concentrated employer stock is not a one-time rebalance problem. RSUs vest, ESPP purchases add exposure quietly, tax lots age, and future compensation changes the decision about the shares already sitting in the account.

The recurring question is simple to ask and annoyingly hard to answer with a broker page or spreadsheet: how much should I sell, when should I sell it, and what after-tax tradeoff am I actually making?

Operating Philosophy

The portfolio is closer to a living thing you tend than a static object you optimize once.

Olive is built around reducing decision drift. The important state should be explicit: what I own, what it cost, what vested, what is still scheduled to vest, what assumptions I am using, what scenario I am considering, and what I believed when I made the decision.

The tool should help compare careful trims over time. It should not pretend to be a broker, tax preparer, or investment adviser, and it should not turn an LLM into a black-box source of instructions.

System

Truth layer Transactions, lots, cash, vest events, prices, theses, journals, and valuation marks.
Planning layer Concentration views, after-tax NAV estimates, forward exposure, targets, constraints, and scenario rows.
Inference layer Privacy-limited synthesis over explicit state, with raw dollars, prices, accounts, basis ratios, and shares kept local.
HTTP route -> use case -> D1 repos -> domain math -> JSX view

Scheduled jobs refresh provider data separately; demo screenshots are rendered from local seed rows.

What It Proves

  1. Domain model A portfolio tool is not generic CRUD. Lots, vests, cash, basis, source tags, and future exposure need explicit semantics because the app can otherwise imply money or liquidity that does not exist.
  2. Product judgment The wedge is employer-stock deconcentration. The sharp problem is not "track my portfolio"; it is "help me move from concentrated equity compensation toward the portfolio I meant to own."
  3. AI boundary Models synthesize; users decide. The useful AI layer is constrained by explicit user-owned state. It should surface tradeoffs, citations, and questions, not recommendations or automated actions.

Tradeoffs

Olive favors a small, inspectable Cloudflare-native stack over a heavier backend. That keeps the operational surface manageable for a personal cockpit, but it also means integration breadth and enterprise-style controls are intentionally out of scope for now.

The current public artifact is the writeup and sanitized screenshots. The codebase remains private because the app handles personal financial workflows and the interesting public signal is the system shape, not the raw repository.