@retiregolden/planner-ui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (298) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +181 -0
  3. package/package.json +77 -0
  4. package/src/App.tsx +246 -0
  5. package/src/RouteErrorBoundary.tsx +45 -0
  6. package/src/assets/hero.png +0 -0
  7. package/src/assets/react.svg +1 -0
  8. package/src/assets/vite.svg +1 -0
  9. package/src/data/fedInvestClient.ts +113 -0
  10. package/src/data/localStore.ts +42 -0
  11. package/src/data/planOrigin.ts +24 -0
  12. package/src/data/planStore.ts +165 -0
  13. package/src/data/v2Backup.ts +101 -0
  14. package/src/import/ImportPage.tsx +347 -0
  15. package/src/import/ReviewChecklistView.tsx +38 -0
  16. package/src/import/brokerCsv.ts +395 -0
  17. package/src/import/csv.ts +133 -0
  18. package/src/import/genericCsv.ts +224 -0
  19. package/src/import/projectionLab.ts +350 -0
  20. package/src/import/reviewChecklist.ts +33 -0
  21. package/src/import/tenForty.ts +275 -0
  22. package/src/index.css +630 -0
  23. package/src/index.ts +16 -0
  24. package/src/learn/ArticleBody.tsx +78 -0
  25. package/src/learn/ArticlePage.tsx +57 -0
  26. package/src/learn/GlossaryPage.tsx +33 -0
  27. package/src/learn/LearnAboutScreen.tsx +41 -0
  28. package/src/learn/LearnCards.tsx +41 -0
  29. package/src/learn/LearnLink.tsx +91 -0
  30. package/src/learn/LearningCenterPage.tsx +114 -0
  31. package/src/learn/SourcesPage.tsx +98 -0
  32. package/src/learn/components/ArticleFigure.tsx +34 -0
  33. package/src/learn/components/ArticleShell.tsx +86 -0
  34. package/src/learn/components/ComparisonTable.tsx +42 -0
  35. package/src/learn/components/FormulaBlock.tsx +34 -0
  36. package/src/learn/components/PurchasingPowerChart.tsx +41 -0
  37. package/src/learn/components/RelatedArticles.tsx +27 -0
  38. package/src/learn/components/ScenarioCard.tsx +24 -0
  39. package/src/learn/components/SourceList.tsx +23 -0
  40. package/src/learn/components/charts.tsx +21 -0
  41. package/src/learn/content/about-retiregolden.ts +100 -0
  42. package/src/learn/content/aca-premium-tax-credits-and-magi.ts +103 -0
  43. package/src/learn/content/account-types-overview.ts +106 -0
  44. package/src/learn/content/after-tax-estate.ts +111 -0
  45. package/src/learn/content/agi-magi-and-taxable-income.ts +112 -0
  46. package/src/learn/content/appealing-irmaa-ssa-44.ts +95 -0
  47. package/src/learn/content/assumption-general-inflation.ts +82 -0
  48. package/src/learn/content/assumption-healthcare-inflation.ts +85 -0
  49. package/src/learn/content/assumption-heir-tax-rate.ts +79 -0
  50. package/src/learn/content/assumption-investment-returns.ts +90 -0
  51. package/src/learn/content/assumption-longevity-planning-age.ts +78 -0
  52. package/src/learn/content/assumption-recent-magi.ts +83 -0
  53. package/src/learn/content/assumption-social-security-cola.ts +89 -0
  54. package/src/learn/content/assumption-social-security-trust-fund.ts +83 -0
  55. package/src/learn/content/assumption-state-tax-override.ts +79 -0
  56. package/src/learn/content/beneficiaries-and-account-titling.ts +99 -0
  57. package/src/learn/content/break-even-useful-lens.ts +94 -0
  58. package/src/learn/content/building-a-retirement-spending-budget.ts +100 -0
  59. package/src/learn/content/cola-and-inflation-protection.ts +102 -0
  60. package/src/learn/content/divorced-spousal-and-survivor-records.ts +104 -0
  61. package/src/learn/content/dynamic-spending-guardrails.ts +90 -0
  62. package/src/learn/content/earnings-test-before-fra.ts +100 -0
  63. package/src/learn/content/employer-match-and-contribution-order.ts +104 -0
  64. package/src/learn/content/examplePlanArticles.ts +525 -0
  65. package/src/learn/content/fees-expense-ratios-and-compounding-drag.ts +98 -0
  66. package/src/learn/content/fi-number-and-four-percent-rule.ts +64 -0
  67. package/src/learn/content/filling-a-tax-bracket-with-roth-conversions.ts +98 -0
  68. package/src/learn/content/funded-ratio.ts +70 -0
  69. package/src/learn/content/healthcare-after-65.ts +103 -0
  70. package/src/learn/content/healthcare-before-65.ts +104 -0
  71. package/src/learn/content/historical-vs-random-return-models.ts +101 -0
  72. package/src/learn/content/how-assumptions-change-the-answer.ts +105 -0
  73. package/src/learn/content/how-much-can-i-spend.ts +105 -0
  74. package/src/learn/content/how-social-security-is-taxed.ts +95 -0
  75. package/src/learn/content/how-the-optimizer-thinks.ts +102 -0
  76. package/src/learn/content/how-the-optimizer-values-after-tax-estate.ts +97 -0
  77. package/src/learn/content/how-to-model-accumulation.ts +67 -0
  78. package/src/learn/content/how-to-read-a-retirement-projection.ts +115 -0
  79. package/src/learn/content/hsas-and-qualified-medical-expenses.ts +108 -0
  80. package/src/learn/content/hsas-as-retirement-accounts.ts +101 -0
  81. package/src/learn/content/inflation-risk.ts +98 -0
  82. package/src/learn/content/inherited-ira-10-year-rule.ts +105 -0
  83. package/src/learn/content/insurance-in-your-retirement-plan.ts +103 -0
  84. package/src/learn/content/irmaa-two-year-lookback.ts +99 -0
  85. package/src/learn/content/long-term-care-costs-and-insurance.ts +103 -0
  86. package/src/learn/content/long-term-care-insurance-as-risk-transfer.ts +98 -0
  87. package/src/learn/content/longevity-risk.ts +99 -0
  88. package/src/learn/content/marginal-vs-effective-tax-rate.ts +98 -0
  89. package/src/learn/content/medicare-part-b-vs-part-d-irmaa.ts +102 -0
  90. package/src/learn/content/mortality-weighted-social-security.ts +113 -0
  91. package/src/learn/content/moving-to-retiregolden.ts +86 -0
  92. package/src/learn/content/niit-high-income-investment-tax.ts +98 -0
  93. package/src/learn/content/ordinary-income-vs-capital-gains.ts +103 -0
  94. package/src/learn/content/paying-conversion-taxes-taxable-vs-ira.ts +102 -0
  95. package/src/learn/content/pensions-and-annuities.ts +101 -0
  96. package/src/learn/content/permanent-life-insurance-in-a-plan.ts +106 -0
  97. package/src/learn/content/pia-aime-and-bend-points.ts +103 -0
  98. package/src/learn/content/planner-overview.ts +106 -0
  99. package/src/learn/content/planning-for-couples-and-survivor-years.ts +108 -0
  100. package/src/learn/content/privacy-what-stays-in-your-browser.ts +99 -0
  101. package/src/learn/content/qcds-qualified-charitable-distributions.ts +101 -0
  102. package/src/learn/content/reading-the-results-page.ts +96 -0
  103. package/src/learn/content/reading-the-social-security-analysis-page.ts +106 -0
  104. package/src/learn/content/real-estate-home-equity-and-debt.ts +100 -0
  105. package/src/learn/content/reports-csv-exports-and-sharing.ts +101 -0
  106. package/src/learn/content/risk-based-guardrails.ts +100 -0
  107. package/src/learn/content/rmds-required-minimum-distributions.ts +100 -0
  108. package/src/learn/content/roth-conversion-basics.ts +104 -0
  109. package/src/learn/content/rsus-and-espp.ts +101 -0
  110. package/src/learn/content/rule-of-55-and-72t.ts +107 -0
  111. package/src/learn/content/savings-rate-biggest-lever.ts +66 -0
  112. package/src/learn/content/seed-your-plan-from-your-tax-return.ts +93 -0
  113. package/src/learn/content/sensitivity-testing-what-changes-the-answer.ts +104 -0
  114. package/src/learn/content/sequence-of-returns-risk.ts +98 -0
  115. package/src/learn/content/social-security-bridge.ts +67 -0
  116. package/src/learn/content/social-security-claiming-age-basics.ts +113 -0
  117. package/src/learn/content/social-security-taxes-vs-benefits.ts +76 -0
  118. package/src/learn/content/spending-profiles-and-the-retirement-smile.ts +92 -0
  119. package/src/learn/content/spousal-and-survivor-benefits.ts +120 -0
  120. package/src/learn/content/ssdi-and-retirement-planning.ts +72 -0
  121. package/src/learn/content/standard-deduction-senior-deduction-and-itemizing.ts +97 -0
  122. package/src/learn/content/state-income-taxes-in-retirement.ts +97 -0
  123. package/src/learn/content/step-up-in-basis.ts +102 -0
  124. package/src/learn/content/survivor-planning-for-couples.ts +110 -0
  125. package/src/learn/content/survivor-spending-in-couple-plans.ts +98 -0
  126. package/src/learn/content/tax-cliffs-and-bracket-edges.ts +105 -0
  127. package/src/learn/content/tax-loss-and-gain-harvesting.ts +99 -0
  128. package/src/learn/content/taxable-brokerage-basis-and-capital-gains.ts +99 -0
  129. package/src/learn/content/three-big-questions-spending-time-risk.ts +103 -0
  130. package/src/learn/content/tips-ladders.ts +92 -0
  131. package/src/learn/content/todays-dollars-vs-future-dollars.ts +107 -0
  132. package/src/learn/content/traditional-vs-roth-contributions.ts +113 -0
  133. package/src/learn/content/troubleshooting-surprising-results.ts +105 -0
  134. package/src/learn/content/trust-fund-haircut-scenarios.ts +101 -0
  135. package/src/learn/content/understanding-monte-carlo-success-rate.ts +118 -0
  136. package/src/learn/content/understanding-your-plan-assumptions.ts +134 -0
  137. package/src/learn/content/using-assumptions-and-provenance.ts +98 -0
  138. package/src/learn/content/using-scenarios-to-compare-choices.ts +99 -0
  139. package/src/learn/content/what-changes-when-you-move-states.ts +141 -0
  140. package/src/learn/content/what-is-fire.ts +65 -0
  141. package/src/learn/content/what-monte-carlo-proves.ts +98 -0
  142. package/src/learn/content/what-retiregolden-models.ts +103 -0
  143. package/src/learn/content/what-retirement-healthcare-really-costs.ts +117 -0
  144. package/src/learn/content/why-95-percent-is-not-a-guarantee.ts +98 -0
  145. package/src/learn/content/why-roth-conversions-raise-other-costs.ts +106 -0
  146. package/src/learn/content/why-small-tax-cliffs-can-matter.ts +109 -0
  147. package/src/learn/content/widows-penalty-and-survivor-brackets.ts +106 -0
  148. package/src/learn/content/withdrawal-order-basics.ts +105 -0
  149. package/src/learn/glossary.ts +191 -0
  150. package/src/learn/inlineMarkdown.tsx +54 -0
  151. package/src/learn/learn.css +537 -0
  152. package/src/learn/learningRegistry.ts +502 -0
  153. package/src/longevity/LongevityResults.tsx +85 -0
  154. package/src/longevity/LongevityWizard.tsx +305 -0
  155. package/src/longevity/constants.ts +15 -0
  156. package/src/longevity/factors.ts +125 -0
  157. package/src/longevity/model.ts +31 -0
  158. package/src/longevity/persistedGuard.ts +129 -0
  159. package/src/longevity/storage.ts +40 -0
  160. package/src/mc/messages.ts +118 -0
  161. package/src/mc/monteCarlo.worker.ts +44 -0
  162. package/src/mc/pool.ts +267 -0
  163. package/src/mc/runRequest.ts +125 -0
  164. package/src/optimize/messages.ts +84 -0
  165. package/src/optimize/optimize.worker.ts +29 -0
  166. package/src/optimize/runOptimize.ts +92 -0
  167. package/src/optimize/runSpendingSolve.ts +47 -0
  168. package/src/optimize/runner.ts +21 -0
  169. package/src/optimize/spendingMessages.ts +44 -0
  170. package/src/optimize/spendingRunner.ts +21 -0
  171. package/src/optimize/spendingSolve.worker.ts +18 -0
  172. package/src/planner/AssumptionsCardPage.tsx +136 -0
  173. package/src/planner/BucketLensCard.tsx +114 -0
  174. package/src/planner/ComparePlansPage.tsx +219 -0
  175. package/src/planner/DisclaimerPage.tsx +88 -0
  176. package/src/planner/HowTestedPage.tsx +159 -0
  177. package/src/planner/LiveStatus.tsx +15 -0
  178. package/src/planner/LongevityModal.tsx +55 -0
  179. package/src/planner/Modal.tsx +97 -0
  180. package/src/planner/MonteCarloPage.tsx +907 -0
  181. package/src/planner/OptimizePage.tsx +611 -0
  182. package/src/planner/PlanContext.tsx +198 -0
  183. package/src/planner/PlanPickerPage.tsx +124 -0
  184. package/src/planner/PlanWorkspace.tsx +290 -0
  185. package/src/planner/ProvenancePanel.tsx +45 -0
  186. package/src/planner/RelocationComparePage.tsx +485 -0
  187. package/src/planner/ReportPage.tsx +375 -0
  188. package/src/planner/ResultsPage.tsx +817 -0
  189. package/src/planner/ScenariosPage.tsx +285 -0
  190. package/src/planner/SocialSecuritySection.tsx +556 -0
  191. package/src/planner/SpendingSolverPage.tsx +512 -0
  192. package/src/planner/SsAnalysisPage.tsx +1134 -0
  193. package/src/planner/SurvivalPercentileModal.tsx +161 -0
  194. package/src/planner/SurvivorTransitionPage.tsx +286 -0
  195. package/src/planner/assumptionsExport.ts +371 -0
  196. package/src/planner/bucketLens.ts +89 -0
  197. package/src/planner/chartFrame.ts +8 -0
  198. package/src/planner/chartStyle.ts +11 -0
  199. package/src/planner/dialogViews.tsx +184 -0
  200. package/src/planner/dialogs.tsx +133 -0
  201. package/src/planner/examples/ExampleLibrary.tsx +189 -0
  202. package/src/planner/examples/ExamplePreviewBanner.tsx +55 -0
  203. package/src/planner/examples/ExamplesPage.tsx +25 -0
  204. package/src/planner/examples/OpenExampleButton.tsx +61 -0
  205. package/src/planner/examples/buildAggressiveSaver.ts +102 -0
  206. package/src/planner/examples/buildAnnuityEstate.ts +137 -0
  207. package/src/planner/examples/buildBaristaFire.ts +115 -0
  208. package/src/planner/examples/buildBracketFillRoth.ts +65 -0
  209. package/src/planner/examples/buildBridgeEarlyRetirement.ts +94 -0
  210. package/src/planner/examples/buildBrokerageNoHsa.ts +109 -0
  211. package/src/planner/examples/buildCoastFire.ts +88 -0
  212. package/src/planner/examples/buildContext.ts +20 -0
  213. package/src/planner/examples/buildEarlyCareerMatch.ts +93 -0
  214. package/src/planner/examples/buildEarlyRetireeAca.ts +61 -0
  215. package/src/planner/examples/buildExampleCouple.ts +103 -0
  216. package/src/planner/examples/buildFixedTargetSpending.ts +74 -0
  217. package/src/planner/examples/buildGlidepathAllocation.ts +131 -0
  218. package/src/planner/examples/buildGuardrailsFlex.ts +120 -0
  219. package/src/planner/examples/buildHsaPropertyDepth.ts +109 -0
  220. package/src/planner/examples/buildHsaStealthRetirement.ts +97 -0
  221. package/src/planner/examples/buildLeanFatFire.ts +109 -0
  222. package/src/planner/examples/buildLtcShock.ts +62 -0
  223. package/src/planner/examples/buildMovingStateTax.ts +53 -0
  224. package/src/planner/examples/buildNoAnnuityBrokerage.ts +92 -0
  225. package/src/planner/examples/buildRmdIrmaa.ts +55 -0
  226. package/src/planner/examples/buildSalaryGrowthEscalation.ts +96 -0
  227. package/src/planner/examples/buildStaticAllocationControl.ts +96 -0
  228. package/src/planner/examples/buildSurvivorYears.ts +62 -0
  229. package/src/planner/examples/buildUnderSavedSingle.ts +51 -0
  230. package/src/planner/examples/exampleCopy.ts +23 -0
  231. package/src/planner/examples/loadExample.ts +90 -0
  232. package/src/planner/examples/registry.ts +313 -0
  233. package/src/planner/explainPanels.tsx +233 -0
  234. package/src/planner/fields.tsx +381 -0
  235. package/src/planner/format.ts +33 -0
  236. package/src/planner/home/DataAndPrivacyCard.tsx +56 -0
  237. package/src/planner/home/GettingStartedPaths.tsx +46 -0
  238. package/src/planner/home/GettingStartedReopener.tsx +32 -0
  239. package/src/planner/home/StartHereLinks.tsx +22 -0
  240. package/src/planner/home/WelcomeHero.tsx +39 -0
  241. package/src/planner/home/YourPlans.tsx +72 -0
  242. package/src/planner/home/importErrorMessage.ts +22 -0
  243. package/src/planner/home/startHereSlugs.ts +7 -0
  244. package/src/planner/home/useHomeData.ts +190 -0
  245. package/src/planner/home/useHomeMode.ts +47 -0
  246. package/src/planner/householdActions.ts +22 -0
  247. package/src/planner/insights/InsightCardView.tsx +340 -0
  248. package/src/planner/insights/InsightsPage.tsx +204 -0
  249. package/src/planner/insights/categoryLabels.ts +11 -0
  250. package/src/planner/learnLinks.ts +85 -0
  251. package/src/planner/marketModelPicker.ts +172 -0
  252. package/src/planner/optimizePageChart.ts +40 -0
  253. package/src/planner/optimizePageClaim.ts +64 -0
  254. package/src/planner/planCompleteness.ts +27 -0
  255. package/src/planner/planContextCore.ts +26 -0
  256. package/src/planner/planner.css +2304 -0
  257. package/src/planner/provenanceLinks.ts +25 -0
  258. package/src/planner/sections/AccountFields.tsx +872 -0
  259. package/src/planner/sections/AccountsSection.tsx +89 -0
  260. package/src/planner/sections/AllocationPanel.tsx +261 -0
  261. package/src/planner/sections/AssumptionsSection.tsx +256 -0
  262. package/src/planner/sections/HouseholdSection.tsx +243 -0
  263. package/src/planner/sections/IncomeFloorSection.tsx +418 -0
  264. package/src/planner/sections/IncomeSection.tsx +170 -0
  265. package/src/planner/sections/InsuranceSection.tsx +362 -0
  266. package/src/planner/sections/SpendingSection.tsx +904 -0
  267. package/src/planner/sections/StrategySection.tsx +349 -0
  268. package/src/planner/sections/UpdateBalancesPanel.tsx +182 -0
  269. package/src/planner/sections/sectionHelpers.ts +48 -0
  270. package/src/planner/sections/shared.tsx +15 -0
  271. package/src/planner/sections.tsx +15 -0
  272. package/src/planner/ssAnalysis.ts +325 -0
  273. package/src/planner/successBand.ts +20 -0
  274. package/src/planner/survivorAnalysis.ts +277 -0
  275. package/src/planner/usStates.ts +19 -0
  276. package/src/planner/useMcSuccessRate.ts +77 -0
  277. package/src/planner/useProjection.ts +63 -0
  278. package/src/relocation/messages.ts +21 -0
  279. package/src/relocation/relocation.worker.ts +18 -0
  280. package/src/relocation/runRelocation.ts +17 -0
  281. package/src/relocation/runner.ts +22 -0
  282. package/src/report/brandingContext.ts +15 -0
  283. package/src/report/downloadReport.ts +34 -0
  284. package/src/report/reportHtml.ts +547 -0
  285. package/src/routes/LearnRoutes.tsx +46 -0
  286. package/src/routes/PlanRoutes.tsx +55 -0
  287. package/src/routes/RouteFallback.tsx +9 -0
  288. package/src/socialSecurity/breakEven.ts +107 -0
  289. package/src/socialSecurity/expectedPv.ts +164 -0
  290. package/src/socialSecurity/explain.ts +92 -0
  291. package/src/socialSecurity/ficaReturn.ts +81 -0
  292. package/src/socialSecurity/persistedSsGuard.ts +138 -0
  293. package/src/socialSecurity/ssFormUtils.ts +48 -0
  294. package/src/socialSecurity/ssaStatementXml.ts +156 -0
  295. package/src/socialSecurity/storage.ts +69 -0
  296. package/src/socialSecurity/survivorSwitching.ts +153 -0
  297. package/src/testSupport/samplePlan.ts +2 -0
  298. package/src/workers/run.ts +45 -0
@@ -0,0 +1,64 @@
1
+ import type { LearningArticle } from '../learningRegistry'
2
+
3
+ export const fiNumberAndFourPercentRuleArticle: LearningArticle = {
4
+ slug: 'fi-number-and-four-percent-rule',
5
+ title: 'The FI number and the 4% rule',
6
+ description: 'How to calculate your Financial Independence target portfolio using safe withdrawal rates.',
7
+ category: 'early-investing-fire',
8
+ tags: ['fi number', '4% rule', 'swr', 'safe withdrawal rate', 'sequence risk'],
9
+ audience: 'intermediate',
10
+ status: 'ready',
11
+ lastReviewed: '2026-06-29',
12
+ reviewCadence: 'stable',
13
+ sourceUrls: [
14
+ 'https://www.retireby40.org/safe-withdrawal-rate-swr-4-rule/',
15
+ ],
16
+ relatedArticles: [
17
+ 'what-is-fire',
18
+ 'savings-rate-biggest-lever',
19
+ 'sequence-of-returns-risk',
20
+ ],
21
+ relatedPlannerRoutes: ['/plan/:planId/results', '/plan/:planId/assumptions'],
22
+ currentYearSensitive: false,
23
+ priority: 'P1',
24
+ blocks: [
25
+ {
26
+ type: 'prose',
27
+ md: 'Your **FI Number** is the total portfolio balance you need to reach financial independence. Once your investable assets reach this target, you can theoretically stop working and live off withdrawals forever.',
28
+ },
29
+ { type: 'heading', text: 'Three key takeaways' },
30
+ {
31
+ type: 'list',
32
+ items: [
33
+ 'The 4% rule of thumb states you can safely withdraw 4% of your starting portfolio in year one, and adjust that dollar amount for inflation each year.',
34
+ 'SWR stands for Safe Withdrawal Rate. Lowering your SWR (e.g. to 3.5%) increases your FI number but adds safety.',
35
+ 'The formula to compute the target portfolio size is: FI Target = Annual Spending ÷ SWR.',
36
+ ],
37
+ },
38
+ {
39
+ type: 'formula',
40
+ expression: 'FI = S / SWR',
41
+ where: [
42
+ { symbol: 'FI', meaning: 'Financial Independence target portfolio (today\'s dollars)' },
43
+ { symbol: 'S', meaning: 'Annual retirement spending plus taxes and penalties' },
44
+ { symbol: 'SWR', meaning: 'Safe Withdrawal Rate (expressed as a decimal, e.g. 0.04)' },
45
+ ],
46
+ basis: 'today',
47
+ note: 'This formula assumes a flat withdrawal rate and does not account for variable spending phases.',
48
+ },
49
+ { type: 'heading', text: 'Common mistakes' },
50
+ {
51
+ type: 'list',
52
+ items: [
53
+ 'Treating the 4% rule as a guarantee instead of a planning lens.',
54
+ 'Using spending before taxes when your plan will need taxable withdrawals.',
55
+ 'Forgetting that a 40- or 50-year early retirement can be more fragile than a traditional 30-year horizon.',
56
+ ],
57
+ },
58
+ { type: 'heading', text: 'Where this shows up in RetireGolden' },
59
+ {
60
+ type: 'prose',
61
+ md: 'RetireGolden calculates your **FI Target Portfolio** based on the Safe Withdrawal Rate (SWR) you configure under the Assumptions section. By default, it uses a 4% rate, but you can customize this to see how a more conservative 3.25% or aggressive 4.5% affects your timeline.',
62
+ },
63
+ ],
64
+ }
@@ -0,0 +1,98 @@
1
+ /**
2
+ * "Filling a tax bracket with Roth conversions" - a Withdrawals and Roth P0 article.
3
+ */
4
+
5
+ import type { LearningArticle } from '../learningRegistry'
6
+
7
+ export const fillingTaxBracketArticle: LearningArticle = {
8
+ slug: 'filling-a-tax-bracket-with-roth-conversions',
9
+ title: 'Filling a tax bracket with Roth conversions',
10
+ description: 'Converting just enough to use up a low bracket without spilling over.',
11
+ category: 'withdrawals-roth',
12
+ tags: ['roth conversion', 'tax bracket', 'taxable income', 'marginal rate', 'fill to target'],
13
+ audience: 'intermediate',
14
+ status: 'ready',
15
+ lastReviewed: '2026-06-19',
16
+ reviewCadence: 'annual',
17
+ sourceUrls: ['https://www.irs.gov/filing/federal-income-tax-rates-and-brackets'],
18
+ relatedArticles: [
19
+ 'roth-conversion-basics',
20
+ 'marginal-vs-effective-tax-rate',
21
+ 'why-roth-conversions-raise-other-costs',
22
+ 'tax-cliffs-and-bracket-edges',
23
+ ],
24
+ relatedPlannerRoutes: ['/plan/:planId/strategy', '/plan/:planId/results', '/plan/:planId/optimize'],
25
+ currentYearSensitive: true,
26
+ priority: 'P0',
27
+ blocks: [
28
+ {
29
+ type: 'prose',
30
+ md: 'Filling a tax bracket means converting enough pre-tax money to use the remaining room in a chosen tax bracket, then stopping before the next bracket starts. It is a controlled way to ask: "How much can I convert before the next dollar gets more expensive?"',
31
+ },
32
+ { type: 'heading', text: 'Quick takeaways' },
33
+ {
34
+ type: 'list',
35
+ items: [
36
+ 'The target is usually **taxable income**, not gross income.',
37
+ 'The conversion fills the space between your baseline taxable income and the top of the chosen bracket.',
38
+ 'Bracket filling is only one lens. MAGI cliffs, IRMAA, ACA credits, and Social Security taxation can matter more than the bracket line.',
39
+ ],
40
+ },
41
+ { type: 'heading', text: 'The basic idea' },
42
+ {
43
+ type: 'prose',
44
+ md: 'Imagine taxable income as a stack of shelves. Your wages, pensions, taxable Social Security, RMDs, and other income already fill part of the stack. A Roth conversion adds more income. Filling a bracket means adding conversion dollars until the current shelf is full, then stopping.',
45
+ },
46
+ {
47
+ type: 'figure',
48
+ image: { src: '/learn/images/tax-bracket-fill.webp' },
49
+ caption:
50
+ 'Bracket filling uses the remaining space in a lower tax bracket before conversion income spills into the next bracket.',
51
+ alt: 'A stack of tax bracket shelves is partly filled by baseline income, with conversion dollars filling the remaining space below a higher bracket marker.',
52
+ },
53
+ { type: 'heading', text: 'A quick formula' },
54
+ {
55
+ type: 'formula',
56
+ expression: 'conversion room = bracket ceiling - baseline taxable income',
57
+ where: [
58
+ { symbol: 'bracket ceiling', meaning: 'the top of the tax bracket you are willing to fill' },
59
+ { symbol: 'baseline taxable income', meaning: 'taxable income before the discretionary conversion' },
60
+ { symbol: 'conversion room', meaning: 'the rough conversion amount that fits before crossing that ceiling' },
61
+ ],
62
+ basis: 'nominal',
63
+ note: 'The app uses the federal tax engine and year-specific plan details. This formula is only the mental model; Social Security taxation and deductions can make the real result kinked.',
64
+ },
65
+ { type: 'heading', text: 'Why RetireGolden sizes it carefully' },
66
+ {
67
+ type: 'prose',
68
+ md: 'RetireGolden\'s fill-to-target strategy sizes conversions by testing the federal tax result, not by using a one-line estimate. That matters because deductions, taxable Social Security, and other inputs can make taxable income move differently than the conversion amount itself.',
69
+ },
70
+ {
71
+ type: 'table',
72
+ caption: 'What can change the bracket-filling answer.',
73
+ columns: ['Input', 'Why it matters', 'Where to check'],
74
+ rows: [
75
+ ['Filing status', 'Bracket ceilings differ by filing status', 'Household'],
76
+ ['Existing income', 'Wages, pensions, RMDs, and taxable benefits may already fill the bracket', 'Income and Results'],
77
+ ['Deductions', 'Taxable income starts after deductions', 'Assumptions and Results'],
78
+ ['Capital gains', 'They sit on a separate ladder but can still interact with taxable income', 'Results'],
79
+ ['MAGI-sensitive costs', 'A bracket target can still cross an IRMAA or ACA boundary', 'Results and healthcare inputs'],
80
+ ],
81
+ },
82
+ { type: 'heading', text: 'Common mistakes' },
83
+ {
84
+ type: 'list',
85
+ items: [
86
+ 'Using gross income when the strategy targets taxable income.',
87
+ 'Stopping at the bracket line but ignoring MAGI-based costs.',
88
+ 'Assuming this year\'s best bracket-fill is the best lifetime strategy.',
89
+ 'Forgetting that tax brackets and other thresholds can change over time.',
90
+ ],
91
+ },
92
+ { type: 'heading', text: 'Where to use this in the app' },
93
+ {
94
+ type: 'prose',
95
+ md: 'Use **Strategy** to set a fill-to-target Roth conversion rule. Then use **Results** to inspect taxable income, tax, MAGI, conversions, and later RMDs year by year.',
96
+ },
97
+ ],
98
+ }
@@ -0,0 +1,70 @@
1
+ import type { LearningArticle } from '../learningRegistry'
2
+
3
+ export const fundedRatioArticle: LearningArticle = {
4
+ slug: 'funded-ratio',
5
+ title: 'The funded ratio: pension accounting for your household',
6
+ description:
7
+ 'What share of your essential retirement spending is already guaranteed? Discounting the floor on the TIPS curve answers it the way a pension actuary would.',
8
+ category: 'risk-uncertainty',
9
+ tags: ['funded ratio', 'safety-first', 'income floor', 'present value', 'tips', 'essential spending'],
10
+ audience: 'intermediate',
11
+ status: 'ready',
12
+ lastReviewed: '2026-07-08',
13
+ reviewCadence: 'stable',
14
+ sourceUrls: [
15
+ 'https://retirementresearcher.com/what-is-a-funded-ratio/',
16
+ 'https://www.financialplanningassociation.org/article/journal/JAN14-safety-first-retirement-planning',
17
+ 'https://home.treasury.gov/resource-center/data-chart-center/interest-rates',
18
+ ],
19
+ relatedArticles: ['tips-ladders', 'social-security-bridge', 'understanding-monte-carlo-success-rate', 'building-a-retirement-spending-budget'],
20
+ relatedPlannerRoutes: ['/plan/:planId/results', '/plan/:planId/income-floor', '/plan/:planId/spending'],
21
+ currentYearSensitive: false,
22
+ priority: 'P2',
23
+ featured: false,
24
+ blocks: [
25
+ {
26
+ type: 'prose',
27
+ md: 'A pension fund never describes itself with a success percentage. It states a **funded ratio**: the value of what it owns against the present value of what it has promised to pay. Wade Pfau and the safety-first school apply the same lens to a household: treat your essential spending as the pension you have promised *yourself*, value it honestly, and ask how much of it is already covered by income that arrives no matter what markets do.',
28
+ },
29
+ {
30
+ type: 'formula',
31
+ expression: 'funded ratio = PV(guaranteed real income) ÷ PV(essential spending)',
32
+ where: [
33
+ { symbol: 'PV', meaning: 'present value, discounting each future real dollar at the Treasury real-yield curve' },
34
+ { symbol: 'guaranteed income', meaning: 'Social Security, pensions, annuities, and TIPS-ladder payouts' },
35
+ { symbol: 'essential spending', meaning: 'the required floor: must-fund lifestyle plus healthcare, debt, property costs' },
36
+ ],
37
+ basis: 'today',
38
+ note: 'Discounting at TIPS yields is the honest rate: it is what a guaranteed real dollar actually costs today.',
39
+ },
40
+ { type: 'heading', text: 'Why the TIPS curve is the right discount rate' },
41
+ {
42
+ type: 'prose',
43
+ md: 'Discounting essential spending at an assumed portfolio return (say 6%) quietly assumes the portfolio delivers — which is precisely what cannot be assumed about spending you *must* fund. The defensible question is: **what would it cost today to guarantee this dollar?** That price is set by the Treasury real-yield curve, because a TIPS of matching maturity is the instrument that actually delivers a guaranteed real dollar on that date. Higher real yields make the floor cheaper to defease; lower ones make it dearer. Your funded ratio therefore moves with the bond market even when your spending doesn\'t — exactly like a real pension\'s.',
44
+ },
45
+ { type: 'heading', text: 'Reading your number' },
46
+ {
47
+ type: 'table',
48
+ columns: ['Funded ratio', 'What it says', 'Typical response'],
49
+ rows: [
50
+ ['≥ 100%', 'The essential floor is fully defeased by guaranteed income', 'Invest the rest for growth/legacy with a clear conscience'],
51
+ ['80–100%', 'Most of the floor is guaranteed; the gap rides on the portfolio', 'Decide deliberately how much of the gap to lock in (ladder, delayed SS, annuity)'],
52
+ ['< 80%', 'A large share of essentials depends on market outcomes', 'Look hard at the levers: delay Social Security, trim the floor, or dedicate assets'],
53
+ ],
54
+ },
55
+ {
56
+ type: 'prose',
57
+ md: 'RetireGolden computes both sides from your own projection — the same yearly ledger that already knows your Social Security (after any trust-fund haircut you assume), pensions, annuities, TIPS ladders, survivor years, healthcare, and debt — deflates them to today\'s dollars, and discounts on the embedded TIPS curve. The Results page shows the ratio, both present values, and the unfunded gap; the Insights page raises a card when the floor is materially underfunded.',
58
+ },
59
+ { type: 'heading', text: 'Funded ratio vs. Monte Carlo success' },
60
+ {
61
+ type: 'prose',
62
+ md: 'The two lenses answer different questions and disagree in useful ways. Monte Carlo asks *"how often does the whole plan work across simulated markets?"* — it rewards expected growth. The funded ratio asks *"how much of the essential part is guaranteed regardless of markets?"* — it ignores expected growth on purpose. A plan can show 95% success and a 60% funded ratio: it will probably work, **and** its essentials lean heavily on that "probably". Neither number is the verdict; together they tell you whether risk is being taken with money that can afford it.',
63
+ },
64
+ {
65
+ type: 'callout',
66
+ tone: 'note',
67
+ md: 'The ratio is only as meaningful as your floor definition. If you have not separated required spending from lifestyle on the Spending page, the "floor" is your entire budget and the ratio will read pessimistically low.',
68
+ },
69
+ ],
70
+ }
@@ -0,0 +1,103 @@
1
+ /**
2
+ * "Healthcare after age 65" - a Healthcare P1 article.
3
+ */
4
+
5
+ import type { LearningArticle } from '../learningRegistry'
6
+
7
+ export const healthcareAfter65Article: LearningArticle = {
8
+ slug: 'healthcare-after-65',
9
+ title: 'Healthcare after age 65',
10
+ description: 'How Medicare parts and premiums fit into spending.',
11
+ category: 'healthcare',
12
+ tags: ['medicare', 'part b', 'part d', 'medigap', 'medicare advantage', 'irmaa', 'healthcare spending'],
13
+ audience: 'beginner',
14
+ status: 'ready',
15
+ lastReviewed: '2026-06-19',
16
+ reviewCadence: 'annual',
17
+ sourceUrls: [
18
+ 'https://www.medicare.gov/basics/get-started-with-medicare/get-more-coverage/your-coverage-options',
19
+ 'https://www.medicare.gov/basics/get-started-with-medicare/sign-up',
20
+ 'https://www.medicare.gov/basics/costs/medicare-costs',
21
+ ],
22
+ relatedArticles: [
23
+ 'irmaa-two-year-lookback',
24
+ 'healthcare-before-65',
25
+ 'agi-magi-and-taxable-income',
26
+ 'long-term-care-costs-and-insurance',
27
+ ],
28
+ relatedPlannerRoutes: ['/plan/:planId/spending', '/plan/:planId/results', '/plan/:planId/assumptions'],
29
+ currentYearSensitive: true,
30
+ priority: 'P1',
31
+ blocks: [
32
+ {
33
+ type: 'prose',
34
+ md: 'At 65, healthcare planning usually shifts from a pre-Medicare bridge to Medicare. That does not mean healthcare becomes free. Premiums, drug coverage, supplemental coverage, out-of-pocket costs, and IRMAA can still be a major retirement expense.',
35
+ },
36
+ { type: 'heading', text: 'Quick takeaways' },
37
+ {
38
+ type: 'list',
39
+ items: [
40
+ 'Medicare has multiple parts and coverage choices, not one single premium.',
41
+ 'IRMAA can raise premiums when MAGI from two years earlier is above a tier.',
42
+ 'RetireGolden models premium pressure, but it does not replace Medicare plan shopping.',
43
+ ],
44
+ },
45
+ { type: 'heading', text: 'The basic idea' },
46
+ {
47
+ type: 'prose',
48
+ md: 'Many retirees pay a Part B premium. They may also pay for Part D drug coverage, Medicare Advantage, Medigap, dental, vision, hearing, or other supplemental coverage. Some costs are premiums; others are deductibles, copays, and uncovered services.\n\nA retirement projection does not need to pick the perfect Medicare plan to be useful. It does need a reasonable healthcare spending line, and it needs to understand when income can raise premiums through IRMAA.',
49
+ },
50
+ {
51
+ type: 'figure',
52
+ image: { src: '/learn/images/healthcare-after-65.webp' },
53
+ caption:
54
+ 'After 65, Medicare costs are a stack: base premiums, optional coverage, out-of-pocket assumptions, and possible IRMAA surcharges.',
55
+ alt: 'Coverage tiles for hospital, medical, drug, and supplemental care flow into a Medicare premium bucket, while an income-threshold marker sends a surcharge ribbon into the same bucket.',
56
+ },
57
+ { type: 'heading', text: 'What belongs in the planning estimate' },
58
+ {
59
+ type: 'table',
60
+ caption: 'Post-65 healthcare costs are not all modeled the same way.',
61
+ columns: ['Cost type', 'How to think about it', 'RetireGolden treatment'],
62
+ rows: [
63
+ ['Part B premium', 'Common monthly Medicare premium', 'Added automatically from the parameter pack at 65+'],
64
+ ['IRMAA', 'Income-related surcharge for higher MAGI', 'Modeled with the two-year lookback'],
65
+ ['Part D surcharge', 'Drug-plan-related IRMAA surcharge', 'Modeled from the parameter pack where available'],
66
+ ['Supplemental or Advantage premium', 'Plan-specific monthly cost', 'Enter as Medicare extras'],
67
+ ['Out-of-pocket medical costs', 'Deductibles, copays, uncovered care', 'Include in broader spending or a separate goal/assumption'],
68
+ ],
69
+ },
70
+ { type: 'heading', text: 'A worked example' },
71
+ {
72
+ type: 'scenario',
73
+ name: 'The Adams household',
74
+ assumptions: [
75
+ { label: 'Age', value: 'Both spouses are 67 and on Medicare' },
76
+ { label: 'Regular premium line', value: '$520 a month each for Part B, drug coverage, and supplemental coverage' },
77
+ { label: 'Lookback income event', value: 'A $90,000 Roth conversion two years earlier adds an estimated $180 a month each' },
78
+ ],
79
+ summary:
80
+ 'Their medical needs did not change, but the plan-year healthcare cost rises by about **$4,320** for the couple. That delayed premium jump belongs in the conversion trade-off.',
81
+ },
82
+ { type: 'heading', text: 'Why it matters in RetireGolden' },
83
+ {
84
+ type: 'prose',
85
+ md: 'RetireGolden automatically adds Part B and IRMAA for people age 65 and older. The **Medicare extras** input is where you can add monthly amounts for Part D, Medigap, Medicare Advantage, or other recurring coverage costs that are not automatically modeled.',
86
+ },
87
+ { type: 'heading', text: 'Common mistakes' },
88
+ {
89
+ type: 'list',
90
+ items: [
91
+ 'Assuming Medicare removes the need for a healthcare budget.',
92
+ 'Entering only supplemental premiums and forgetting that Part B is added automatically.',
93
+ 'Ignoring IRMAA when planning conversions around ages 63 and later.',
94
+ 'Using RetireGolden as a substitute for Medicare enrollment, provider-network, or drug-formulary research.',
95
+ ],
96
+ },
97
+ { type: 'heading', text: 'Where to use this in the app' },
98
+ {
99
+ type: 'prose',
100
+ md: 'Use **Spending** for Medicare extras, **Assumptions** for healthcare inflation and recent MAGI, and **Results** to see annual healthcare costs after Medicare begins.',
101
+ },
102
+ ],
103
+ }
@@ -0,0 +1,104 @@
1
+ /**
2
+ * "Healthcare before age 65" - a Healthcare P1 article.
3
+ */
4
+
5
+ import type { LearningArticle } from '../learningRegistry'
6
+
7
+ export const healthcareBefore65Article: LearningArticle = {
8
+ slug: 'healthcare-before-65',
9
+ title: 'Healthcare before age 65',
10
+ description: 'Covering the gap years before Medicare eligibility.',
11
+ category: 'healthcare',
12
+ tags: ['healthcare before 65', 'aca', 'marketplace', 'cobra', 'early retirement', 'magi'],
13
+ audience: 'beginner',
14
+ status: 'ready',
15
+ lastReviewed: '2026-06-19',
16
+ reviewCadence: 'annual',
17
+ sourceUrls: [
18
+ 'https://www.healthcare.gov/retirees/',
19
+ 'https://www.healthcare.gov/have-job-based-coverage/cobra/',
20
+ 'https://www.healthcare.gov/lower-costs/',
21
+ ],
22
+ relatedArticles: [
23
+ 'aca-premium-tax-credits-and-magi',
24
+ 'agi-magi-and-taxable-income',
25
+ 'why-roth-conversions-raise-other-costs',
26
+ 'healthcare-after-65',
27
+ ],
28
+ relatedPlannerRoutes: ['/plan/:planId/spending', '/plan/:planId/results', '/plan/:planId/assumptions'],
29
+ currentYearSensitive: true,
30
+ priority: 'P1',
31
+ blocks: [
32
+ {
33
+ type: 'prose',
34
+ md: 'Retiring before 65 often means solving a healthcare bridge. Medicare has not started yet, but employer coverage may have ended. The bridge can be affordable, expensive, or fragile depending on coverage options and income.',
35
+ },
36
+ { type: 'heading', text: 'Quick takeaways' },
37
+ {
38
+ type: 'list',
39
+ items: [
40
+ 'The pre-65 years need their own healthcare plan, not just a spending estimate.',
41
+ 'Marketplace premiums may be reduced by ACA premium tax credits, depending on MAGI.',
42
+ 'Roth conversions and withdrawals can change healthcare costs in the same years they change taxes.',
43
+ ],
44
+ },
45
+ { type: 'heading', text: 'The basic idea' },
46
+ {
47
+ type: 'prose',
48
+ md: 'A pre-65 retiree may use retiree coverage, a spouse\'s employer plan, COBRA continuation, a marketplace plan, or a direct plan outside the marketplace. Those options have different premium costs, networks, deductibles, and subsidy rules.\n\nFor retirement planning, the big question is cash flow: what full premium should the plan assume, and does income qualify the household for a premium tax credit?',
49
+ },
50
+ {
51
+ type: 'figure',
52
+ image: { src: '/learn/images/healthcare-before-65.webp' },
53
+ caption:
54
+ 'The pre-65 healthcare bridge can use several coverage paths before Medicare begins.',
55
+ alt: 'A bridge of coverage stations connects work coverage to a later Medicare bucket, with marketplace, continuation, spouse, and household icons along the way.',
56
+ },
57
+ { type: 'heading', text: 'Common bridge options' },
58
+ {
59
+ type: 'table',
60
+ caption: 'Pre-65 coverage choices to model or compare.',
61
+ columns: ['Option', 'What to check', 'Planning pressure'],
62
+ rows: [
63
+ ['Spouse or partner employer plan', 'Eligibility, premium share, networks', 'May be simpler if available'],
64
+ ['Retiree coverage', 'Employer rules and whether it coordinates with Medicare later', 'Can be valuable but is not universal'],
65
+ ['COBRA continuation', 'Duration and full premium cost', 'Can bridge a short gap but may be expensive'],
66
+ ['ACA marketplace plan', 'Premium tax credit, networks, deductibles', 'MAGI management can matter'],
67
+ ['Direct non-marketplace plan', 'Premium and coverage terms', 'May not qualify for marketplace credits'],
68
+ ],
69
+ },
70
+ { type: 'heading', text: 'A worked example' },
71
+ {
72
+ type: 'scenario',
73
+ name: 'The Lee household',
74
+ assumptions: [
75
+ { label: 'Retirement age', value: '62' },
76
+ { label: 'Bridge length', value: 'Three years before Medicare at age 65' },
77
+ { label: 'Coverage estimate', value: '$1,200 monthly marketplace premium before any credit' },
78
+ { label: 'Income choice', value: '$18,000 Roth withdrawal does not raise MAGI, but an $18,000 IRA withdrawal does' },
79
+ ],
80
+ summary:
81
+ 'The same $18,000 of spending money can land differently. If it comes from the IRA, the Lees may owe tax and may lose part of the healthcare credit; if it comes from Roth, the premium estimate may stay lower.',
82
+ },
83
+ { type: 'heading', text: 'Why it matters in RetireGolden' },
84
+ {
85
+ type: 'prose',
86
+ md: 'RetireGolden lets you enter the full pre-65 monthly premium per person and decide whether to apply the ACA credit. The model estimates premiums annually, not plan-by-plan. It does not choose networks, deductibles, providers, or drug coverage.',
87
+ },
88
+ { type: 'heading', text: 'Common mistakes' },
89
+ {
90
+ type: 'list',
91
+ items: [
92
+ 'Using today\'s employer payroll deduction as if it were the full retiree premium.',
93
+ 'Ignoring deductibles and out-of-pocket risk.',
94
+ 'Testing Roth conversions without checking MAGI-driven premiums.',
95
+ 'Assuming the same option will be best for every year before Medicare.',
96
+ ],
97
+ },
98
+ { type: 'heading', text: 'Where to use this in the app' },
99
+ {
100
+ type: 'prose',
101
+ md: 'Use **Spending** to enter pre-65 premiums and ACA credit settings. Use **Assumptions** for healthcare inflation and recent MAGI. Use **Results** to inspect healthcare costs year by year.',
102
+ },
103
+ ],
104
+ }
@@ -0,0 +1,101 @@
1
+ /**
2
+ * "Historical returns vs random return models" - a Risk and Uncertainty P1 article.
3
+ */
4
+
5
+ import type { LearningArticle } from '../learningRegistry'
6
+
7
+ export const historicalVsRandomReturnModelsArticle: LearningArticle = {
8
+ slug: 'historical-vs-random-return-models',
9
+ title: 'Historical returns vs random return models',
10
+ description: 'Two ways to generate possible futures and how they differ.',
11
+ category: 'risk-uncertainty',
12
+ tags: ['historical returns', 'random returns', 'monte carlo', 'market model', 'bootstrap'],
13
+ audience: 'intermediate',
14
+ status: 'ready',
15
+ lastReviewed: '2026-06-20',
16
+ reviewCadence: 'stable',
17
+ sourceUrls: [
18
+ 'https://www.investor.gov/introduction-investing/investing-basics/glossary/monte-carlo-simulation',
19
+ 'https://www.investor.gov/introduction-investing/investing-basics/what-risk',
20
+ ],
21
+ relatedArticles: [
22
+ 'understanding-monte-carlo-success-rate',
23
+ 'what-monte-carlo-proves',
24
+ 'sequence-of-returns-risk',
25
+ 'inflation-risk',
26
+ 'how-assumptions-change-the-answer',
27
+ ],
28
+ relatedPlannerRoutes: ['/plan/:planId/monte-carlo', '/plan/:planId/assumptions', '/plan/:planId/scenarios'],
29
+ currentYearSensitive: false,
30
+ priority: 'P1',
31
+ blocks: [
32
+ {
33
+ type: 'prose',
34
+ md: 'A retirement projection needs some way to create possible future market paths. RetireGolden offers a random lognormal model and several historical models. The choice matters because each model preserves different kinds of risk.',
35
+ },
36
+ { type: 'heading', text: 'Quick takeaways' },
37
+ {
38
+ type: 'list',
39
+ items: [
40
+ 'A random model starts from assumptions about expected return, volatility, inflation, and correlation.',
41
+ 'A historical model resamples actual market years, so it can preserve some real-world patterns from the historical record.',
42
+ 'No market model is the truth. The goal is to see whether the plan only works under one narrow version of risk.',
43
+ ],
44
+ },
45
+ { type: 'heading', text: 'The basic idea' },
46
+ {
47
+ type: 'prose',
48
+ md: 'A lognormal model generates new return and inflation paths around your assumptions. A historical model starts from actual years in the embedded data set and resamples them. Historical independent years shuffle the deck one year at a time. Historical blocks keep short streaks together. Full-sequence replay starts in a random historical year and lets the historical order unfold.',
49
+ },
50
+ {
51
+ type: 'figure',
52
+ image: { src: '/learn/images/historical-vs-random-return-models.webp' },
53
+ caption:
54
+ 'Random and historical models are two different machines for turning assumptions into retirement paths.',
55
+ alt: 'One machine draws smooth random market paths from a bell-shaped source, while another shuffles cards of historical market years into retirement paths.',
56
+ },
57
+ {
58
+ type: 'table',
59
+ caption: 'How RetireGolden market models differ.',
60
+ columns: ['Model', 'What it does', 'What to watch'],
61
+ rows: [
62
+ ['Lognormal', 'Draws each year around expected returns and inflation, with linked return and inflation shocks', 'Depends heavily on volatility and inflation assumptions'],
63
+ ['Historical independent years', 'Samples historical years one at a time', 'Can break real-world streaks apart'],
64
+ ['Historical 5-year blocks', 'Samples blocks so bad or good stretches can stay together', 'Still depends on the historical record available'],
65
+ ['Historical full-sequence replay', 'Starts in a random historical year and replays the sequence from there', 'Can overemphasize the limited set of historical paths'],
66
+ ],
67
+ },
68
+ { type: 'heading', text: 'A worked example' },
69
+ {
70
+ type: 'scenario',
71
+ name: 'The Chen household',
72
+ assumptions: [
73
+ { label: 'Lognormal result', value: '88% success when returns are sampled around the plan assumptions' },
74
+ { label: 'Historical block result', value: '74% success when rough market clusters stay together' },
75
+ { label: 'Difference', value: '14 percentage points of success rate' },
76
+ ],
77
+ summary:
78
+ 'The 14-point gap is the lesson. The plan is not simply good or bad; it is sensitive to whether bad market years arrive as isolated shocks or as a streak.',
79
+ },
80
+ { type: 'heading', text: 'Why it matters in RetireGolden' },
81
+ {
82
+ type: 'prose',
83
+ md: 'The **Monte Carlo** screen keeps your expected returns as the center of modeled returns. In lognormal mode, your inflation assumption is also the center of the inflation paths. In historical modes, inflation comes from the sampled historical years, so switching models can change both market variation and the inflation path source. If a strategy only looks good under one model, treat that as a reason to inspect the assumptions more closely.',
84
+ },
85
+ { type: 'heading', text: 'Common mistakes' },
86
+ {
87
+ type: 'list',
88
+ items: [
89
+ 'Calling historical results "more accurate" just because they use real years.',
90
+ 'Calling random results "fake" even though all future paths are unknown.',
91
+ 'Changing equity weight or volatility and then blaming the entire difference on the strategy.',
92
+ 'Ignoring inflation behavior when comparing market models.',
93
+ ],
94
+ },
95
+ { type: 'heading', text: 'Where to use this in the app' },
96
+ {
97
+ type: 'prose',
98
+ md: 'On **Monte Carlo**, run the same plan under lognormal, historical independent years, historical blocks, and historical full-sequence replay. If the conclusion changes materially, use **Scenarios** to test ways to add cushion.',
99
+ },
100
+ ],
101
+ }
@@ -0,0 +1,105 @@
1
+ /**
2
+ * "How assumptions change the answer" - a Start Here P1 article.
3
+ */
4
+
5
+ import type { LearningArticle } from '../learningRegistry'
6
+
7
+ export const howAssumptionsChangeAnswerArticle: LearningArticle = {
8
+ slug: 'how-assumptions-change-the-answer',
9
+ title: 'How assumptions change the answer',
10
+ description: 'How small changes to returns, inflation, spending, and longevity move the result.',
11
+ category: 'start-here',
12
+ tags: ['assumptions', 'sensitivity', 'inflation', 'returns', 'planning basics'],
13
+ audience: 'beginner',
14
+ status: 'ready',
15
+ lastReviewed: '2026-06-20',
16
+ reviewCadence: 'stable',
17
+ sourceUrls: [],
18
+ relatedArticles: [
19
+ 'three-big-questions-spending-time-risk',
20
+ 'using-assumptions-and-provenance',
21
+ 'sensitivity-testing-what-changes-the-answer',
22
+ 'inflation-risk',
23
+ 'longevity-risk',
24
+ ],
25
+ relatedPlannerRoutes: [
26
+ '/plan/:planId/assumptions',
27
+ '/plan/:planId/spending',
28
+ '/plan/:planId/results',
29
+ '/plan/:planId/scenarios',
30
+ '/plan/:planId/monte-carlo',
31
+ ],
32
+ currentYearSensitive: false,
33
+ priority: 'P1',
34
+ blocks: [
35
+ {
36
+ type: 'prose',
37
+ md: 'A retirement projection can feel precise because the output has exact dollars and exact years. The precision is useful, but the answer is still built from assumptions. When an assumption changes, the projection is answering a different question.',
38
+ },
39
+ { type: 'heading', text: 'Quick takeaways' },
40
+ {
41
+ type: 'list',
42
+ items: [
43
+ 'Assumptions are levers, not background decoration.',
44
+ 'The most important tests usually change spending, retirement age, return, inflation, and planning age.',
45
+ 'Change one lever at a time when you want to learn what actually moved the result.',
46
+ ],
47
+ },
48
+ { type: 'heading', text: 'The basic idea' },
49
+ {
50
+ type: 'prose',
51
+ md: 'A plan has two kinds of inputs: facts you can know now and assumptions about the future. Current balances, birth dates, and account types are facts. Future returns, inflation, healthcare inflation, lifespan, tax law, and spending behavior are assumptions. A projection is strongest when you know which inputs are facts, which are estimates, and which are stress tests.',
52
+ },
53
+ {
54
+ type: 'figure',
55
+ image: { src: '/learn/images/assumptions-change-answer.webp' },
56
+ caption:
57
+ 'Changing one major assumption at a time makes it easier to see which lever is driving the result.',
58
+ alt: 'An illustrated control panel with separate sliders for spending, inflation, return, and time feeding a retirement path.',
59
+ },
60
+ {
61
+ type: 'table',
62
+ caption: 'Common assumptions and how they tend to move the plan.',
63
+ columns: ['Assumption', 'What it changes', 'What to inspect'],
64
+ rows: [
65
+ ['Spending', 'The annual amount the portfolio must support', 'Shortfalls, depletion year, and withdrawal size'],
66
+ ['Retirement age', 'Years of saving and years of withdrawals', 'Account balances at retirement and Social Security timing'],
67
+ ['Return', 'Growth before and during retirement', 'Ending estate and Monte Carlo success rate'],
68
+ ['Inflation', 'Future cost of the same lifestyle', 'Today-dollar results and late-life spending pressure'],
69
+ ['Planning age', 'How long the plan must keep working', 'Late-life balances and survivor years'],
70
+ ],
71
+ },
72
+ { type: 'heading', text: 'A worked example' },
73
+ {
74
+ type: 'scenario',
75
+ name: 'The Kim household',
76
+ assumptions: [
77
+ { label: 'Baseline', value: 'Retire at 65, spend $92,000 per year, plan through age 95' },
78
+ { label: 'First test', value: 'Raise spending by 10%' },
79
+ { label: 'Second test', value: 'Keep spending unchanged, but lower the default return by 1 point' },
80
+ ],
81
+ summary:
82
+ 'If both tests weaken the plan, they should not be mixed together at first. Separate tests show whether the problem is lifestyle cost, return sensitivity, or both.',
83
+ },
84
+ { type: 'heading', text: 'Why it matters in RetireGolden' },
85
+ {
86
+ type: 'prose',
87
+ md: 'RetireGolden lets you use **Assumptions** for the plan-wide levers, **Spending** for lifestyle costs, **Scenarios** for named what-if changes, and **Monte Carlo** for market paths around the same plan. The deterministic Results page tells you what happens under one assumption set. Scenarios and Monte Carlo tell you how fragile that answer is.',
88
+ },
89
+ { type: 'heading', text: 'Common mistakes' },
90
+ {
91
+ type: 'list',
92
+ items: [
93
+ 'Changing several assumptions at once and then not knowing which one mattered.',
94
+ 'Using optimistic returns to compensate for spending that may be too high.',
95
+ 'Looking only at the ending estate and missing a shortfall in an earlier year.',
96
+ 'Treating planning age as a prediction instead of a resilience test.',
97
+ ],
98
+ },
99
+ { type: 'heading', text: 'Where to use this in the app' },
100
+ {
101
+ type: 'prose',
102
+ md: 'Start in **Assumptions** and **Spending**, read the baseline in **Results**, then make one named change in **Scenarios**. If the scenario changes the result a lot, it has earned more attention.',
103
+ },
104
+ ],
105
+ }