3-Year Action Plan
3 consecutive years · select any start
Year-by-Year Summary
▼
click to collapse
Balance Trajectories
Personal Information
If ages look wrong, use Export tab → Reset All Data to clear cached values
Key Variables (Global Defaults)
Total return (price + dividends). Can be overridden by year range in Override Tables.
Dividend yield on brokerage/securities account only. Can be overridden with Cash Interest Rate by year range.
Interest on cash balance (e.g. HYSA rate). Can be overridden with Brokerage Dividend Rate by year range.
Brokerage only — retirement accounts (IRA/Roth) always reinvest internally. If paid out: brokerage price growth = Growth Rate − Dividend Rate. If reinvested: dividends stay in brokerage, no separate cash income.
Applies when dividends are paid out. Ordinary = regular income rates; Qualified = 0/15/20% preferential LTCG rates
e.g. 3 = 3% annual increase. Can be overridden by year range in Spending overrides.
Annual Social Security cost-of-living adjustment
Default annual wage & self-employment income growth. Can be overridden by year range in Override Tables.
e.g. 30 = 30% of security sale proceeds is taxable gain. Can be overridden by year range.
Minimum cash balance to maintain. Can be overridden by year range.
Social Security
Age benefits begin (62–70)
At start age
9999 = indefinite. Overridden by Widow(er) Override when active.
9999 = indefinite. Overridden by Widow(er) Override when active.
Widow(er) Override
Models one spouse dying while the survivor keeps retirement balances and, when selected below, the higher Social Security benefit.
Applied starting the year after death. Use negative for lower spending, positive for higher spending. Explicit Spending overrides still take priority.
Death year remains MFJ. Starting the following year, federal and CA tax brackets, standard deductions, taxable Social Security, Medicare/IRMAA count, and senior deductions use Single.
IRA, RMDs & Medicare
—
Auto: age 73 if born 1951–1959, age 75 if born 1960+ (SECURE 2.0)
—
Auto: age 73 if born 1951–1959, age 75 if born 1960+ (SECURE 2.0)
Balance split equally to zero by this year. 9999 = not applicable
MEDICARE / IRMAA
Select the Medicare income tier ceiling to target. Off disables global IRMAA targeting unless Max Bracket is selected.
Stay this far below the selected IRMAA tier limit
Optional global federal bracket cap for IRA-to-Roth conversions. Overrides can replace this by year range.
Stay this far below the selected federal bracket cap
Sets IRMAA surcharge for plan year 1 (2-yr lookback)
Sets IRMAA surcharge for plan year 2 (2-yr lookback)
Employee Inputs — Person 1
e.g. 6 = 6% — global default
9999 = ongoing
1099/consulting end year · 9999 = ongoing
Employee Inputs — Person 2
9999 = ongoing
Starting Balances
All balances are entered on the Start of Year tab. The model starts with zero for any year not entered. Go there to enter your actual opening balances for 2026.
Start of Year Entry — Click any year row to enter actual balances and income for that year.
Entered values override the projection for that year and all subsequent years resume from those balances.
Rows highlighted green have data entered.
Overview — All Years
Edit Year
Click a year in the table above to edit it.
Override any variable for a specific year range — enter only the fields you want to change and leave the rest blank.
Last matching row wins when ranges overlap, so you can layer a narrow range on top of a wider one.
Use 9999 as End Year to mean "forever." Changes take effect immediately.
▶
Spending & Taxes
Lock in spending amounts, tax funding, or deductions for specific years
Spending
Override the amount of spending and/or the amount withheld for taxes for one or more years. Spending will increase from this amount the following year unless reset.
| Spend Amount ($) | Pct Change (%) | Tax Override ($) | Start Year | End Year | Notes |
|---|
Tax Deductions
Itemized deductions: use Fed/CA Itemized only when you want to test itemizing. Non-itemizer charity: leave itemized fields blank, choose Yes, and enter eligible cash gifts only; the app applies it only when the standard deduction is used and caps it by filing status.
| Fed Itemized ($) optional itemizing | CA Itemized ($) blank = CA standard | Use Non-itemizer Charity? | Eligible Cash Charity ($) ignored unless Yes | Start Year | End Year | Notes |
|---|
▶
Roth Conversion Strategy
Control IRA-to-Roth conversions and Medicare income targeting
IRMAA Target Cap
Sets the Medicare IRMAA tier ceiling for a year range — the model converts IRA to Roth to stay just below that tier's income threshold. Off disables IRMAA targeting unless Max Bracket is selected; then it fills to that federal bracket target less Bracket HR. Level 0 = Base, 1 = Tier 1, up to 4 = Tier 4. Fill mode (F) fills toward the next tier only when no Max Bracket is selected; Roth mode (R) draws Roth to avoid exceeding the active target.
| IRMAA Target Cap threshold before headroom | Fill Mode (F/R) | Max Bracket tax target vs prior IRMAA | Bracket HR ($) | Start Year | End Year | Notes |
|---|
Income Level (ACA / Pre-Medicare)
Sets a MAGI ceiling before Medicare kicks in — useful for staying below ACA subsidy cliffs or bracket ceilings. Converts IRA to Roth up to but not above this target. Ignored once IRMAA target is active.
| MAGI Target ($) | Start Year | End Year | Notes |
|---|
Tax Bracket Fill
Converts IRA → Roth to fill up to the top of your current tax bracket. The model finds which bracket your existing income falls in and fills to that ceiling minus headroom — only if IRA funds are available. Draws from the larger IRA first. IRMAA and Income Level take priority when active in the same year — a warning is shown if they overlap.
| T Fill | Headroom ($) | Start Year | End Year | Notes |
|---|
▶
Portfolio & Accounts
Growth, income rates, funding order, cash floor, HSA deposits
Growth Rate
Override the portfolio growth rate for a specific year range. Enter as a percentage — e.g. 5 = 5%, −15 = down 15%. Useful for modeling a down-market sequence or a conservative early-retirement period.
| Growth Rate (%) | Start Year | End Year | Notes |
|---|
Brokerage Dividend & Cash Interest Rates
Override taxable income rates for a year range. Enter either rate or both: brokerage dividend rate affects taxable brokerage dividends and paid-out securities cash flow; cash interest rate affects taxable cash interest.
| Brokerage Dividend Rate (%) | Cash Interest Rate (%) | Start Year | End Year | Notes |
|---|
Stock Sales Taxable Gain
Override the taxable-gain percentage applied to brokerage stock sales for a year range. Enter as a percentage — e.g. 30 = 30% of securities sold is treated as taxable capital gain.
| Taxable Gain (%) | Start Year | End Year | Notes |
|---|
Wage Growth Rate
Override the annual wage & self-employment income growth rate for a year range. Useful for modeling career stages — e.g. 6% during rapid advancement, 3% at mid-career, 2% near retirement. SOY entries always take priority over this rate.
| Growth (%) | Start Year | End Year | Notes |
|---|
Funding Order
Controls whether the waterfall draws from Securities or IRA first at Step 3 (after SS/RMDs/wages). Default is Securities. Switch to IRA to accelerate IRA drawdown in specific years.
| Choice | Start Year | End Year | Notes |
|---|
Cash Floor
Override the minimum cash balance for a year range. Useful for periods with known large cash needs — the waterfall will draw from other accounts to maintain this floor.
| Cash Floor ($) | Start Year | End Year | Notes |
|---|
HSA Deposits
Schedule annual HSA contributions by year range. Only applies while enrolled in an HSA-eligible high-deductible health plan.
| Annual Deposit ($) | Start Year | End Year | Notes |
|---|
State Tax Override
Override the state for tax purposes for a year range — useful for a move to a tax-free state (enter "NONE") or to a different supported state. Currently supported: CA, NONE (no state tax). Future: NY, TX, FL, etc.
| State | Start Year | End Year | Notes |
|---|
—
Complete Year-by-Year Cash Flow
Tax Breakdown by Year
Effective & Marginal Rates
Tax Detail Table
| Year | Ages | AGI | Deduction | Sr. Bonus | Charity | Taxable Inc | Filing | Fed Ord | LTCG/QDI | CA State | Total Tax | Eff % | Marginal | Blended | Prior MAGI | IRMAA Surcharge | Medicare Part B | IRMAA Tier |
|---|
All Account Balances
Net Worth vs Annual Taxes
Social Security — Gross & Taxable
RMDs Over Time
Roth Balances & Conversions
Funding Waterfall Use
Tax Table Settings
Each year uses exact brackets entered. Years between defined years use the prior year's table.
How fast tax brackets grow each year. Default 2.5% matches historical IRS CPI-W adjustments. Use 0% only as a stress-test (frozen brackets overstate long-term taxes).
How fast IRMAA thresholds and surcharges grow. Default 2.0% matches historical SSA adjustment pace. Use 0% to stress-test frozen Medicare surcharges.
Each November: Click + Add, enter the new year, then fill in updated IRS brackets from irs.gov/newsroom and IRMAA thresholds from cms.gov. Prior year tables are preserved exactly and used for historical calculations.
Tax Brackets —
FEDERAL ORDINARY INCOME
FEDERAL LTCG / QUALIFIED DIVIDENDS
FEDERAL STANDARD DEDUCTION
Federal only · cash gifts · applies only when using standard deduction
FEDERAL ENHANCED SENIOR DEDUCTION (2025-2028)
This is separate from the existing senior standard deduction add-on and also applies when itemizing.
CA ORDINARY INCOME
IRMAA Thresholds
MAGI threshold where each tier begins. Surcharge is additional annual cost per person above standard Part B premium.
TIER
MFJ MAGI ABOVE ($)
SINGLE MAGI ABOVE ($)
HOH MAGI ABOVE ($)
SURCHARGE/YR/PERSON
Projected Values Preview
Shows thresholds for any projection year, using defined tables then inflating beyond the last one.
☁ GitHub Sync
Connect a private GitHub repository to automatically back up your data and access it from any device or browser. How to create a token →
One-time setup — follow these steps exactly:
Step 1 — Create a GitHub account
Go to github.com and sign up for a free account if you don't have one.
Step 2 — Create a private repository
Click the + icon (top right) → New repository.
• Name it anything, e.g.
• ⚠️ Under visibility, select Private (not Public — this app will reject public repos)
• Leave all other options at defaults and click Create repository
Step 3 — Create a Personal Access Token
Click your profile photo (top right) → Settings.
Scroll to the very bottom of the left sidebar → click Developer settings.
Click Personal access tokens → Tokens (classic) → Generate new token (classic).
• Note: type a name like
• Expiration: set to No expiration
• Scopes: check the repo checkbox (first one in the list)
• Scroll down and click Generate token
• ⚠️ Copy the token immediately — GitHub only shows it once
Step 4 — Connect below
Paste your GitHub username, repository name, and token into the fields below, then click Connect & Verify.
Step 1 — Create a GitHub account
Go to github.com and sign up for a free account if you don't have one.
Step 2 — Create a private repository
Click the + icon (top right) → New repository.
• Name it anything, e.g.
my-retirement-data• ⚠️ Under visibility, select Private (not Public — this app will reject public repos)
• Leave all other options at defaults and click Create repository
Step 3 — Create a Personal Access Token
Click your profile photo (top right) → Settings.
Scroll to the very bottom of the left sidebar → click Developer settings.
Click Personal access tokens → Tokens (classic) → Generate new token (classic).
• Note: type a name like
retirement-model• Expiration: set to No expiration
• Scopes: check the repo checkbox (first one in the list)
• Scroll down and click Generate token
• ⚠️ Copy the token immediately — GitHub only shows it once
Step 4 — Connect below
Paste your GitHub username, repository name, and token into the fields below, then click Connect & Verify.
Manual Backup
Export or import a JSON snapshot. Useful for sharing data, moving to a new version of the file, or keeping an offline backup.
📄 Print Report
Opens a print-ready report in a new tab. Use File → Print → Save as PDF to save it.
Clear Data
Reset everything to defaults. This cannot be undone — export first if you want to keep your data.
Data & Privacy
How to fully remove this data
- Use ⚠ Reset All Data above to wipe values (recommended)
- Or: Browser Settings → Clear Browsing Data → Cached/Site Data
- Or: DevTools (F12) → Application → Local Storage → delete the key shown below
Loading…