@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,106 @@
1
+ /**
2
+ * "Reading the Social Security analysis page" - a Using RetireGolden P1 article.
3
+ */
4
+
5
+ import type { LearningArticle } from '../learningRegistry'
6
+
7
+ export const readingSocialSecurityAnalysisPageArticle: LearningArticle = {
8
+ slug: 'reading-the-social-security-analysis-page',
9
+ title: 'Reading the Social Security analysis page',
10
+ description: 'How to interpret break-even and whole-plan claiming results.',
11
+ category: 'using-retiregolden',
12
+ tags: ['retiregolden', 'social security', 'claiming age', 'break-even', 'survivor benefits'],
13
+ audience: 'beginner',
14
+ status: 'ready',
15
+ lastReviewed: '2026-06-20',
16
+ reviewCadence: 'rule-change',
17
+ sourceUrls: [
18
+ 'https://www.ssa.gov/benefits/retirement/planner/agereduction.html',
19
+ 'https://www.ssa.gov/benefits/survivors/',
20
+ ],
21
+ relatedArticles: [
22
+ 'social-security-claiming-age-basics',
23
+ 'break-even-useful-lens',
24
+ 'spousal-and-survivor-benefits',
25
+ 'planning-for-couples-and-survivor-years',
26
+ 'widows-penalty-and-survivor-brackets',
27
+ ],
28
+ relatedPlannerRoutes: [
29
+ '/plan/:planId/social-security-analysis',
30
+ '/plan/:planId/social-security',
31
+ '/plan/:planId/results',
32
+ '/plan/:planId/monte-carlo',
33
+ ],
34
+ currentYearSensitive: false,
35
+ priority: 'P1',
36
+ blocks: [
37
+ {
38
+ type: 'prose',
39
+ md: 'The Social Security analysis page is not one calculator. It gives you three lenses on the same claiming decision: the whole retirement plan, the benefits-only insurance value, and the simple break-even chart.',
40
+ },
41
+ { type: 'heading', text: 'Quick takeaways' },
42
+ {
43
+ type: 'list',
44
+ items: [
45
+ '**In your plan** ranks claim ages by after-tax estate after rerunning the full projection.',
46
+ '**Benefits only** isolates Social Security value from the rest of the portfolio.',
47
+ '**Break-even** is educational, but it ignores taxes, portfolio withdrawals, spousal benefits, and survivor value.',
48
+ ],
49
+ },
50
+ { type: 'heading', text: 'The basic idea' },
51
+ {
52
+ type: 'prose',
53
+ md: 'Claiming age is both a cash-flow choice and an insurance choice. Claiming early can bring money sooner. Waiting can raise the monthly check and, for a couple, may raise the survivor check. The best choice depends on the rest of the plan, not only the total Social Security dollars.',
54
+ },
55
+ {
56
+ type: 'figure',
57
+ image: { src: '/learn/images/social-security-analysis-page.webp' },
58
+ caption:
59
+ 'The page compares claiming choices through whole-plan, benefits-only, and break-even lenses.',
60
+ alt: 'Three illustrated panels compare a household plan ledger, a Social Security benefit stream, and crossing break-even lines.',
61
+ },
62
+ {
63
+ type: 'table',
64
+ caption: 'How to read the three tabs.',
65
+ columns: ['Tab', 'What it answers', 'Best use'],
66
+ rows: [
67
+ ['In your plan', 'Which claim-age combination leaves the strongest after-tax plan result', 'Primary decision lens for RetireGolden users'],
68
+ ['Benefits only', 'Which strategy has higher Social Security value before the rest of the portfolio', 'Insurance and longevity context'],
69
+ ['Break-even', 'When cumulative benefits from one claim age catch up to another', 'Simple teaching lens, not the full decision'],
70
+ ['Robustness check', 'Whether top whole-plan choices still work across sampled markets', 'Tie-breaker when top choices are close'],
71
+ ],
72
+ },
73
+ { type: 'heading', text: 'A worked example' },
74
+ {
75
+ type: 'scenario',
76
+ name: 'The Chen household',
77
+ assumptions: [
78
+ { label: 'Break-even lens', value: 'Claiming at 62 improves near-term cash flow by about $20,000 a year' },
79
+ { label: 'Whole-plan lens', value: 'Delaying the higher benefit raises the survivor floor by about $700 a month' },
80
+ { label: 'Robustness check', value: 'Top strategies have similar estate values, but 82% vs 87% Monte Carlo success' },
81
+ ],
82
+ summary:
83
+ 'The simple break-even answer favors near-term cash. The whole-plan view shows the cost of that choice: about **$700** less survivor income and a lower risk score in this example.',
84
+ },
85
+ { type: 'heading', text: 'Why it matters in RetireGolden' },
86
+ {
87
+ type: 'prose',
88
+ md: 'The **In your plan** tab includes taxes, withdrawals, Roth conversions, IRMAA, ACA, RMDs, and ending after-tax estate. For couples, the heatmap helps show how one spouse\'s age and the other spouse\'s age interact. The page can also refine a whole-year choice to the month.',
89
+ },
90
+ { type: 'heading', text: 'Common mistakes' },
91
+ {
92
+ type: 'list',
93
+ items: [
94
+ 'Treating break-even as the final answer.',
95
+ 'Ignoring survivor benefit protection for the lower-income spouse.',
96
+ 'Applying a strategy before checking whether the plan inputs are credible.',
97
+ 'Overreacting to a tiny ranking difference when several claim ages are effectively close.',
98
+ ],
99
+ },
100
+ { type: 'heading', text: 'Where to use this in the app' },
101
+ {
102
+ type: 'prose',
103
+ md: 'Enter benefits and claim ages on **Social Security**, then use **Social Security analysis** to sweep claim-age choices. After applying a choice, return to **Results** and **Monte Carlo** to confirm the broader plan still behaves as expected.',
104
+ },
105
+ ],
106
+ }
@@ -0,0 +1,100 @@
1
+ /**
2
+ * "Real estate, home equity, and debt in a plan" - an Accounts and Saving P1 article.
3
+ */
4
+
5
+ import type { LearningArticle } from '../learningRegistry'
6
+
7
+ export const realEstateHomeEquityDebtArticle: LearningArticle = {
8
+ slug: 'real-estate-home-equity-and-debt',
9
+ title: 'Real estate, home equity, and debt in a plan',
10
+ description: 'How a home, rentals, and loans show up in net worth and cash flow.',
11
+ category: 'accounts-saving',
12
+ tags: ['real estate', 'home equity', 'debt', 'mortgage', 'property tax', 'net worth'],
13
+ audience: 'beginner',
14
+ status: 'ready',
15
+ lastReviewed: '2026-06-20',
16
+ reviewCadence: 'annual',
17
+ sourceUrls: [
18
+ 'https://www.irs.gov/forms-pubs/about-publication-523',
19
+ 'https://www.consumerfinance.gov/consumer-tools/reverse-mortgages/',
20
+ ],
21
+ relatedArticles: [
22
+ 'account-types-overview',
23
+ 'taxable-brokerage-basis-and-capital-gains',
24
+ 'after-tax-estate',
25
+ 'state-income-taxes-in-retirement',
26
+ ],
27
+ relatedPlannerRoutes: ['/plan/:planId/accounts', '/plan/:planId/spending', '/plan/:planId/results'],
28
+ currentYearSensitive: true,
29
+ priority: 'P1',
30
+ blocks: [
31
+ {
32
+ type: 'prose',
33
+ md: 'A home can be both a place to live and a large part of net worth. Debt can be both a balance-sheet liability and a cash-flow obligation. A useful retirement plan keeps those two views separate so the house does not accidentally look like spendable portfolio money.',
34
+ },
35
+ { type: 'heading', text: 'Quick takeaways' },
36
+ {
37
+ type: 'list',
38
+ items: [
39
+ 'Property value affects net worth, but it usually does not fund spending unless you sell, borrow, or downsize.',
40
+ 'Mortgage or loan payments are cash-flow expenses until the balance is gone.',
41
+ 'Property tax and insurance can continue after a mortgage is paid off, so they belong with the property, not only inside the loan payment.',
42
+ ],
43
+ },
44
+ { type: 'heading', text: 'The basic idea' },
45
+ {
46
+ type: 'prose',
47
+ md: 'A paid-off home can make retirement easier because the mortgage payment is gone. It can also make planning harder because home equity is not the same as a brokerage account. To spend it, you usually need a transaction: sale, refinance, reverse mortgage, home equity line, or another arrangement with costs and risks.',
48
+ },
49
+ {
50
+ type: 'figure',
51
+ image: { src: '/learn/images/real-estate-home-equity-debt.webp' },
52
+ caption:
53
+ 'Real estate adds value to net worth, while debt service and property carrying costs still flow through annual spending.',
54
+ alt: 'A home value block sits above a net-worth line while separate ribbons for debt payments, property tax, and insurance flow into yearly spending.',
55
+ },
56
+ {
57
+ type: 'table',
58
+ caption: 'Separate the balance sheet from the cash flow.',
59
+ columns: ['Item', 'Balance-sheet role', 'Cash-flow role'],
60
+ rows: [
61
+ ['Home or property value', 'Adds to net worth while owned', 'Does not fund spending unless converted to cash'],
62
+ ['Expected sale proceeds', 'Can become investable cash in the sale year', 'May help fund later spending after sale costs and taxes'],
63
+ ['Mortgage or other debt', 'Reduces net worth through the remaining balance', 'Creates scheduled debt service until paid off'],
64
+ ['Property tax and insurance', 'Not a loan balance', 'Recurring cost that can continue after debt payoff'],
65
+ ],
66
+ },
67
+ { type: 'heading', text: 'A worked example' },
68
+ {
69
+ type: 'scenario',
70
+ name: 'The Nguyen household',
71
+ assumptions: [
72
+ { label: 'Home', value: '$420,000 home owned through the early retirement years' },
73
+ { label: 'Debt', value: '$1,600 monthly mortgage payment ends before age 70' },
74
+ { label: 'Carrying costs', value: '$7,200 a year of property tax and insurance continue afterward' },
75
+ ],
76
+ summary:
77
+ 'When the mortgage ends, spending falls by about **$19,200** a year, not by the full housing line. The $7,200 carrying cost still needs to stay in the plan.',
78
+ },
79
+ { type: 'heading', text: 'Why it matters in RetireGolden' },
80
+ {
81
+ type: 'prose',
82
+ md: 'RetireGolden has separate account types for property and debt. A property account stores value, planned sale year, expected net proceeds, property tax, and insurance. A debt account stores balance, interest rate, monthly principal-and-interest payment, and optional payoff year. In the projection, debt service is funded by the withdrawal waterfall, while property carrying costs are tracked as spending while the property is owned.',
83
+ },
84
+ { type: 'heading', text: 'Common mistakes' },
85
+ {
86
+ type: 'list',
87
+ items: [
88
+ 'Counting home equity as if it were already liquid portfolio money.',
89
+ 'Putting escrowed property tax and insurance inside the debt payment, which can make those costs disappear after payoff.',
90
+ 'Forgetting sale costs, taxes, moving costs, or a replacement housing need when estimating net proceeds.',
91
+ 'Modeling a reverse mortgage or home-equity loan as free liquidity instead of a debt or transaction with terms.',
92
+ ],
93
+ },
94
+ { type: 'heading', text: 'Where to use this in the app' },
95
+ {
96
+ type: 'prose',
97
+ md: 'Use **Accounts** for property and debt. Use **Spending** for lifestyle costs that are not tied to the property account. Then use **Results** to inspect net worth, debt service, property costs, and the effect of any planned sale.',
98
+ },
99
+ ],
100
+ }
@@ -0,0 +1,101 @@
1
+ /**
2
+ * "Reports, CSV exports, and sharing results" - a Using RetireGolden P1 article.
3
+ */
4
+
5
+ import type { LearningArticle } from '../learningRegistry'
6
+
7
+ export const reportsCsvExportsAndSharingArticle: LearningArticle = {
8
+ slug: 'reports-csv-exports-and-sharing',
9
+ title: 'Reports, CSV exports, and sharing results',
10
+ description: 'How to get plan results out of the app for review or records.',
11
+ category: 'using-retiregolden',
12
+ tags: ['retiregolden', 'report', 'csv', 'backup', 'sharing'],
13
+ audience: 'beginner',
14
+ status: 'ready',
15
+ lastReviewed: '2026-06-20',
16
+ reviewCadence: 'stable',
17
+ sourceUrls: [],
18
+ relatedArticles: [
19
+ 'planner-overview',
20
+ 'reading-the-results-page',
21
+ 'privacy-what-stays-in-your-browser',
22
+ 'using-assumptions-and-provenance',
23
+ 'what-retiregolden-models',
24
+ ],
25
+ relatedPlannerRoutes: ['/', '/plan/:planId/results', '/plan/:planId/report'],
26
+ currentYearSensitive: false,
27
+ priority: 'P1',
28
+ blocks: [
29
+ {
30
+ type: 'prose',
31
+ md: 'RetireGolden has four different ways to get information out of the app: a printable/PDF report, a self-contained HTML report, a CSV ledger, and a JSON plan backup. They are for different jobs, so it helps to choose the right one.',
32
+ },
33
+ { type: 'heading', text: 'Quick takeaways' },
34
+ {
35
+ type: 'list',
36
+ items: [
37
+ 'Use the printable report when a person needs a readable plan summary or browser-saved PDF.',
38
+ 'Use the HTML report when you want a portable audit file with assumptions, parameter provenance, warnings, and recommendation evidence.',
39
+ 'Use the CSV when you want the annual ledger in a spreadsheet.',
40
+ 'Use the JSON backup when you want to preserve or move the editable plan itself.',
41
+ ],
42
+ },
43
+ { type: 'heading', text: 'The basic idea' },
44
+ {
45
+ type: 'prose',
46
+ md: 'A report is for communication. A CSV is for analysis. A backup is for restoring the app state. Sending the wrong file can create confusion: a spreadsheet reader cannot reconstruct every planner field from the CSV, and a JSON backup may expose more personal data than a report reviewer needs.',
47
+ },
48
+ {
49
+ type: 'figure',
50
+ image: { src: '/learn/images/reports-csv-exports-sharing.webp' },
51
+ caption:
52
+ 'Reports, CSV ledgers, and backups serve different sharing and recordkeeping needs.',
53
+ alt: 'Three illustrated output paths leave a retirement plan: a readable report, a spreadsheet ledger, and a secure backup file.',
54
+ },
55
+ {
56
+ type: 'table',
57
+ caption: 'Which export to use.',
58
+ columns: ['Output', 'Where it lives', 'Best for'],
59
+ rows: [
60
+ ['Printable report', 'Report route from Results', 'A clean summary for review, printing, or saving as PDF'],
61
+ ['HTML report', 'Download HTML report on Results or Report; recommendation report on Optimize', 'A self-contained audit bundle with assumptions, sources, warnings, annual ledger data, and recommendation evidence when available'],
62
+ ['CSV ledger', 'Download CSV on Results', 'Spreadsheet inspection of nominal year-by-year income, tax, withdrawals, and balances'],
63
+ ['JSON backup', 'Planner home', 'Saving or moving editable plans to another browser or device'],
64
+ ['Duplicate plan', 'Planner home or workspace controls', 'Trying a new version without changing the original'],
65
+ ],
66
+ },
67
+ { type: 'heading', text: 'A worked example' },
68
+ {
69
+ type: 'scenario',
70
+ name: 'The Lee household',
71
+ assumptions: [
72
+ { label: 'Advisor review', value: 'Save a 12-page printable report as PDF' },
73
+ { label: 'Audit file', value: 'Download the HTML report so assumptions, sources, and recommendation evidence travel with the results' },
74
+ { label: 'Personal audit', value: 'Download the 35-year CSV and inspect taxes, MAGI, and withdrawals by year' },
75
+ { label: 'Device move', value: 'Download one JSON backup, then import it in the other browser' },
76
+ ],
77
+ summary:
78
+ 'The files are not interchangeable. The PDF reads like a summary, the HTML report carries audit context, the 35-year CSV audits the ledger, and the JSON backup is the only one that preserves the editable inputs.',
79
+ },
80
+ { type: 'heading', text: 'Why it matters in RetireGolden' },
81
+ {
82
+ type: 'prose',
83
+ md: 'The **Results** page has **Download CSV**, **Download HTML report**, and **View printable report**. The **Optimize** page can download a recommendation report once the optimizer has run, including the exact-ledger evidence behind the recommendation. The CSV uses the nominal year-by-year ledger, even if the screen is currently toggled to today\'s dollars. The planner home has **Download plan backup** and **Import previous backup** for moving the underlying plan data.',
84
+ },
85
+ { type: 'heading', text: 'Common mistakes' },
86
+ {
87
+ type: 'list',
88
+ items: [
89
+ 'Sending a JSON backup when the other person only needs a report.',
90
+ 'Assuming the CSV follows the Results today-dollar toggle.',
91
+ 'Clearing browser data before downloading a backup.',
92
+ 'Sharing a file without realizing it may include sensitive household and account details.',
93
+ ],
94
+ },
95
+ { type: 'heading', text: 'Where to use this in the app' },
96
+ {
97
+ type: 'prose',
98
+ md: 'Use **Results** for the CSV, HTML report, and printable report. Use **Optimize** for a recommendation report after running the optimizer. Use the planner home for backups, imports, duplicates, and clearing all local data.',
99
+ },
100
+ ],
101
+ }
@@ -0,0 +1,100 @@
1
+ import type { LearningArticle } from '../learningRegistry'
2
+
3
+ export const riskBasedGuardrailsArticle: LearningArticle = {
4
+ slug: 'risk-based-guardrails',
5
+ title: 'Risk-based guardrails',
6
+ description:
7
+ 'Guardrails triggered by your plan’s probability of success — in dollars — and why they cut less than withdrawal-rate rules in bad markets.',
8
+ category: 'risk-uncertainty',
9
+ tags: ['guardrails', 'spending', 'monte carlo', 'probability of success', 'sequence risk', 'flexibility'],
10
+ audience: 'intermediate',
11
+ status: 'ready',
12
+ lastReviewed: '2026-07-08',
13
+ reviewCadence: 'stable',
14
+ sourceUrls: [
15
+ 'https://www.kitces.com/blog/probability-of-success-driven-guardrails-advantages-monte-carlo-simulations-analysis-communication/',
16
+ 'https://www.kitces.com/blog/monte-carlo-guardrails-probability-of-adjustment-success-client-communication-dynamic-retirement-spending/',
17
+ 'https://www.kitces.com/blog/renaming-the-outcomes-of-a-monte-carlo-retirement-projection/',
18
+ 'https://www.onefpa.org/journal/Pages/Decision-Rules-and-Portfolio-Management-for-Retirees.aspx',
19
+ ],
20
+ relatedArticles: [
21
+ 'dynamic-spending-guardrails',
22
+ 'understanding-monte-carlo-success-rate',
23
+ 'sequence-of-returns-risk',
24
+ ],
25
+ relatedPlannerRoutes: ['/plan/:planId/spending', '/plan/:planId/monte-carlo', '/plan/:planId/results'],
26
+ currentYearSensitive: false,
27
+ priority: 'P1',
28
+ featured: false,
29
+ blocks: [
30
+ {
31
+ type: 'prose',
32
+ md: 'Withdrawal-rate guardrails (Guyton–Klinger style) adjust spending when your current withdrawal rate drifts too far from where it started. Risk-based guardrails ask a different question: **has the plan’s probability of success actually left the band I’m comfortable with?** Spending changes only when the answer is yes — and the trigger is expressed in dollars, so you know in advance exactly what portfolio balance calls for a change.',
33
+ },
34
+ { type: 'heading', text: 'Quick takeaways' },
35
+ {
36
+ type: 'list',
37
+ items: [
38
+ '**Triggers on plan odds, not a ratio**: A withdrawal rate can look alarming while the plan is still overwhelmingly likely to work — especially late in retirement, when a shorter horizon safely supports a higher rate.',
39
+ '**Dollar-denominated**: The rule reads like an instruction, not a formula: "if the portfolio falls below $X, trim spending; above $Z, a raise is safe."',
40
+ '**Usually cuts less in crashes**: Published practitioner research replaying 2007 retirees found withdrawal-rate rules forced cuts an order of magnitude deeper than probability-based triggers, because the rate rule keeps cutting while the ratio stays elevated even when the odds have stabilized.',
41
+ ],
42
+ },
43
+ { type: 'heading', text: 'How the thresholds are found' },
44
+ {
45
+ type: 'prose',
46
+ md: 'You pick a target success band — say 70–95%. RetireGolden then re-runs your plan’s Monte Carlo simulation at progressively lower (and higher) starting balances, on the same seeded market paths each time, and searches for the balance where the probability of success crosses each edge of the band.\n\nBelow the lower threshold, the flexible slice of spending (everything above your required floor) is trimmed in steps; above the upper threshold it is restored, and can rise into ideal/excess layers if you allow raises. The required floor is never cut. The solver also sizes the adjustment: the dollars per month of spending change that would bring the plan back to the middle of your band.',
47
+ },
48
+ { type: 'heading', text: 'Why "78% success" was the wrong headline anyway' },
49
+ {
50
+ type: 'prose',
51
+ md: 'A single probability-of-success number reads like a grade, and it hides what actually matters: **what happens in the failing paths**. A plan with flexible spending rarely "fails" outright — it adjusts. The more useful questions are how likely an adjustment is, how big it tends to be, and how long it lasts. RetireGolden’s Monte Carlo page reports exactly that for guardrail plans: the share of paths that ever needed a cut, the median and 90th-percentile depth of the deepest cut, the typical years spent below target, and the probability the plan ends with a surplus (or clears your bequest target).',
52
+ },
53
+ {
54
+ type: 'table',
55
+ columns: ['Question', 'Old answer', 'Adjustment-focused answer'],
56
+ rows: [
57
+ ['Will my plan work?', '"78% success"', 'P(any spending cut), and its typical size and duration'],
58
+ ['What do I do in a crash?', 'Re-run the plan and guess', 'A pre-agreed dollar threshold and a pre-sized cut'],
59
+ ['What if things go well?', 'Nothing changes', 'A dollar threshold above which a raise is safe'],
60
+ ['What is left at the end?', 'Implied by the success %', 'P(surplus) and P(estate clears the bequest target)'],
61
+ ],
62
+ },
63
+ { type: 'heading', text: 'A worked example' },
64
+ {
65
+ type: 'scenario',
66
+ name: 'The Okafor household',
67
+ assumptions: [
68
+ { label: 'Starting portfolio', value: '$1,200,000' },
69
+ { label: 'Target success band', value: '70–95%' },
70
+ { label: 'Solved cut threshold', value: '$780,000 (65% of the starting portfolio, today’s dollars)' },
71
+ { label: 'Solved raise threshold', value: '$1,560,000 (130%)' },
72
+ {
73
+ label: 'A 2008-scale drawdown arrives',
74
+ value: 'The portfolio falls to $850,000. A withdrawal-rate rule would already be cutting — the rate is ~40% above where it started — but the plan’s success probability is still inside the band, so risk-based guardrails hold.',
75
+ },
76
+ {
77
+ label: 'The drawdown deepens',
78
+ value: 'Below $780,000 the odds genuinely leave the band; flexible spending is trimmed in 10% steps until markets recover.',
79
+ },
80
+ ],
81
+ summary:
82
+ 'Both rules protect the plan. The difference is how often they interrupt your lifestyle to do it: the risk-based trigger tolerates drawdowns the plan can genuinely afford.',
83
+ },
84
+ { type: 'heading', text: 'Honest boundaries' },
85
+ {
86
+ type: 'list',
87
+ items: [
88
+ '**Thresholds are solved for today’s conditions**: They are computed from your current plan, horizon, and market model. Re-solve after meaningful changes (spending, accounts, retirement date) — RetireGolden stores them with your plan and shows when they exist.',
89
+ '**A model, not a promise**: The probability of success is itself a Monte Carlo estimate under an assumed market model. The dollar thresholds inherit those assumptions.',
90
+ '**Inside the simulation, thresholds stay fixed in real terms**: A full re-solve every projected year would be another layer of modeling; RetireGolden applies your solved thresholds (inflation-adjusted) across the horizon — a documented simplification.',
91
+ '**Flexibility has to be real**: The rule only helps if the flexible slice of your budget is genuinely cuttable. Set your required floor honestly.',
92
+ ],
93
+ },
94
+ { type: 'heading', text: 'Where to use this in the app' },
95
+ {
96
+ type: 'prose',
97
+ md: 'On **Spending**, choose *Risk-based guardrails (success band)* as the spending policy, set your band, and press *Solve dollar thresholds*. **Results** shows the thresholds in dollars and marks the years the rule acted. **Monte Carlo** reports the adjustment outlook — probability, size, and duration of cuts, plus the chance of ending with a surplus — alongside the classic success rate.',
98
+ },
99
+ ],
100
+ }
@@ -0,0 +1,100 @@
1
+ /**
2
+ * "RMDs: required minimum distributions" - a Withdrawals and Roth P1 article.
3
+ */
4
+
5
+ import type { LearningArticle } from '../learningRegistry'
6
+
7
+ export const rmdsRequiredMinimumDistributionsArticle: LearningArticle = {
8
+ slug: 'rmds-required-minimum-distributions',
9
+ title: 'RMDs: required minimum distributions',
10
+ description: 'The withdrawals the IRS eventually forces from pre-tax accounts.',
11
+ category: 'withdrawals-roth',
12
+ tags: ['rmd', 'required minimum distribution', 'traditional ira', '401k', 'secure 2.0', 'withdrawals'],
13
+ audience: 'beginner',
14
+ status: 'ready',
15
+ lastReviewed: '2026-06-20',
16
+ reviewCadence: 'annual',
17
+ sourceUrls: [
18
+ 'https://www.irs.gov/retirement-plans/retirement-plan-and-ira-required-minimum-distributions-faqs',
19
+ 'https://www.irs.gov/forms-pubs/about-publication-590-b',
20
+ ],
21
+ relatedArticles: [
22
+ 'withdrawal-order-basics',
23
+ 'qcds-qualified-charitable-distributions',
24
+ 'roth-conversion-basics',
25
+ 'how-the-optimizer-values-after-tax-estate',
26
+ ],
27
+ relatedPlannerRoutes: ['/plan/:planId/accounts', '/plan/:planId/strategy', '/plan/:planId/results'],
28
+ currentYearSensitive: true,
29
+ priority: 'P1',
30
+ blocks: [
31
+ {
32
+ type: 'prose',
33
+ md: 'A required minimum distribution, or RMD, is the minimum amount the tax rules require you to withdraw each year from many pre-tax retirement accounts after a certain age. It can turn a quiet traditional IRA into taxable income whether or not you need the cash.',
34
+ },
35
+ { type: 'heading', text: 'Quick takeaways' },
36
+ {
37
+ type: 'list',
38
+ items: [
39
+ 'RMDs usually apply to traditional pre-tax retirement accounts, not Roth IRAs during the original owner\'s lifetime.',
40
+ 'The basic formula uses the prior year-end balance divided by a life-expectancy factor.',
41
+ 'RMDs happen before Roth conversions in the model because an RMD cannot be converted to Roth.',
42
+ ],
43
+ },
44
+ { type: 'heading', text: 'The basic idea' },
45
+ {
46
+ type: 'prose',
47
+ md: 'Traditional retirement accounts often got a tax break on the way in. RMDs are one way the tax system eventually pulls some of that deferred income onto the tax return. The amount generally grows when balances are high or the life-expectancy divisor gets smaller with age.\n\nThis is why Roth conversions before RMD age can matter. If they reduce the future traditional balance, they may reduce future RMD pressure.',
48
+ },
49
+ {
50
+ type: 'figure',
51
+ image: { src: '/learn/images/rmds-required-minimum-distributions.webp' },
52
+ caption:
53
+ 'After the RMD start point, a required flow leaves the traditional bucket each year and enters the taxable cash-flow system.',
54
+ alt: 'A traditional retirement bucket sits beside a timeline. After a checkpoint, an amber required-flow ribbon moves from the bucket toward a tax building and spending basket.',
55
+ },
56
+ { type: 'heading', text: 'A simple formula' },
57
+ {
58
+ type: 'formula',
59
+ expression: 'RMD = prior year-end balance / distribution divisor',
60
+ where: [
61
+ { symbol: 'prior year-end balance', meaning: 'the account balance used as the base for the distribution' },
62
+ { symbol: 'distribution divisor', meaning: 'the IRS life-expectancy factor for the applicable table and age' },
63
+ ],
64
+ basis: 'nominal',
65
+ note: 'This is the simplified annual planning formula. Real administration can include first-year timing, account aggregation rules, inherited-account rules, plan-specific details, and penalties for missed RMDs.',
66
+ },
67
+ { type: 'heading', text: 'A worked example' },
68
+ {
69
+ type: 'scenario',
70
+ name: 'The Nguyen household',
71
+ assumptions: [
72
+ { label: 'Traditional IRA', value: '$900,000 projected balance before RMD age' },
73
+ { label: 'Estimated first RMD', value: 'About $33,000 if no earlier conversions reduce the balance' },
74
+ { label: 'Conversion test', value: 'A $40,000 annual conversion for five years lowers future RMD pressure' },
75
+ ],
76
+ summary:
77
+ 'Five $40,000 conversions move **$200,000** out of the pre-tax bucket before RMD age. That can lower forced withdrawals later, but only if the earlier tax cost is worth it.',
78
+ },
79
+ { type: 'heading', text: 'Why it matters in RetireGolden' },
80
+ {
81
+ type: 'prose',
82
+ md: 'RetireGolden applies RMDs to traditional accounts using the SECURE 2.0 start ages in the parameter logic and the Uniform Lifetime Table. If a spouse is marked as the sole beneficiary and is more than 10 years younger, the model can use a larger joint-life divisor. RetireGolden takes the RMD in the age-attained year and does not model the first-year April 1 deferral.',
83
+ },
84
+ { type: 'heading', text: 'Common mistakes' },
85
+ {
86
+ type: 'list',
87
+ items: [
88
+ 'Planning withdrawals as if all future traditional-account withdrawals are optional.',
89
+ 'Forgetting that RMDs can raise MAGI, Medicare premiums, Social Security taxation, or survivor-year taxes.',
90
+ 'Trying to convert the RMD itself to Roth.',
91
+ 'Assuming the app is handling every plan-administration detail for a real tax filing.',
92
+ ],
93
+ },
94
+ { type: 'heading', text: 'Where to use this in the app' },
95
+ {
96
+ type: 'prose',
97
+ md: 'Use **Accounts** to classify traditional accounts and set spouse beneficiary details when relevant. Use **Results** to inspect the RMD column, traditional withdrawals, tax, and MAGI by year.',
98
+ },
99
+ ],
100
+ }
@@ -0,0 +1,104 @@
1
+ /**
2
+ * "Roth conversion basics" - a Withdrawals and Roth P0 article.
3
+ */
4
+
5
+ import type { LearningArticle } from '../learningRegistry'
6
+
7
+ export const rothConversionBasicsArticle: LearningArticle = {
8
+ slug: 'roth-conversion-basics',
9
+ title: 'Roth conversion basics',
10
+ description: 'What a Roth conversion is and why people do them in retirement.',
11
+ category: 'withdrawals-roth',
12
+ tags: ['roth conversion', 'traditional ira', 'taxable income', 'roth ira', 'withdrawals'],
13
+ audience: 'beginner',
14
+ status: 'ready',
15
+ lastReviewed: '2026-06-19',
16
+ reviewCadence: 'annual',
17
+ sourceUrls: [
18
+ 'https://www.irs.gov/retirement-plans/roth-iras',
19
+ 'https://www.irs.gov/retirement-plans/plan-participant-employee/rollovers-of-retirement-plan-and-ira-distributions',
20
+ 'https://www.irs.gov/retirement-plans/retirement-plans-faqs-regarding-iras',
21
+ ],
22
+ relatedArticles: [
23
+ 'traditional-vs-roth-contributions',
24
+ 'filling-a-tax-bracket-with-roth-conversions',
25
+ 'why-roth-conversions-raise-other-costs',
26
+ 'how-the-optimizer-values-after-tax-estate',
27
+ ],
28
+ relatedPlannerRoutes: ['/plan/:planId/strategy', '/plan/:planId/optimize', '/plan/:planId/results'],
29
+ currentYearSensitive: true,
30
+ priority: 'P0',
31
+ featured: true,
32
+ blocks: [
33
+ {
34
+ type: 'prose',
35
+ md: 'A Roth conversion moves money from a pre-tax retirement account into a Roth account. The converted amount usually counts as taxable income now. In exchange, future qualified Roth withdrawals can be tax-free.',
36
+ },
37
+ { type: 'heading', text: 'Quick takeaways' },
38
+ {
39
+ type: 'list',
40
+ items: [
41
+ 'A conversion is a **tax timing trade**: pay tax now to potentially avoid tax later.',
42
+ 'The best conversion year is often a low-income year before required distributions, Medicare surcharges, or survivor-year tax brackets bite.',
43
+ 'More conversion is not automatically better. Extra income can push on other tax and healthcare rules.',
44
+ ],
45
+ },
46
+ { type: 'heading', text: 'The basic idea' },
47
+ {
48
+ type: 'prose',
49
+ md: 'Traditional IRA and traditional 401(k) dollars usually have not been taxed yet. A Roth conversion deliberately brings some of those dollars into income now, then moves the after-tax retirement asset into the Roth bucket.\n\nThat can make sense when today\'s tax cost is lower than the tax cost you expect later: future required minimum distributions, survivor tax brackets, higher heir tax rates, or a long runway for Roth growth.',
50
+ },
51
+ {
52
+ type: 'figure',
53
+ image: { src: '/learn/images/roth-conversion-flow.webp' },
54
+ caption:
55
+ 'A Roth conversion moves pre-tax dollars through today\'s tax gate into the Roth bucket, where future qualified withdrawals may be tax-free.',
56
+ alt: 'A traditional account bucket sends money through a tax gate into a Roth bucket, with a timeline showing tax paid now and future Roth flexibility.',
57
+ },
58
+ { type: 'heading', text: 'A worked example' },
59
+ {
60
+ type: 'scenario',
61
+ name: 'The Nguyen household',
62
+ assumptions: [
63
+ { label: 'Current year', value: 'Retired at 62, before Social Security and RMDs' },
64
+ { label: 'Traditional IRA', value: '$700,000 balance that could create future RMD pressure' },
65
+ { label: 'Conversion test', value: '$30,000 conversion while taxable income is relatively low' },
66
+ ],
67
+ summary:
68
+ 'The $30,000 conversion raises tax this year, but it also moves $30,000 into Roth and shrinks the account future RMDs are based on. The example is about timing, not free money.',
69
+ },
70
+ { type: 'heading', text: 'What changes when you convert' },
71
+ {
72
+ type: 'table',
73
+ caption: 'A simple before-and-after view of a conversion.',
74
+ columns: ['Part of the plan', 'Before conversion', 'After conversion'],
75
+ rows: [
76
+ ['Traditional balance', 'Higher; future withdrawals are usually taxable', 'Lower; future RMD pressure may be smaller'],
77
+ ['Roth balance', 'Lower or unchanged', 'Higher; qualified withdrawals may be tax-free'],
78
+ ['Current-year income', 'Lower', 'Higher by the converted amount'],
79
+ ['Current-year tax', 'Lower', 'Often higher because the conversion is income'],
80
+ ['Future flexibility', 'More money still trapped in pre-tax form', 'More money available from Roth if rules are met'],
81
+ ],
82
+ },
83
+ { type: 'heading', text: 'Why it matters in RetireGolden' },
84
+ {
85
+ type: 'prose',
86
+ md: 'RetireGolden models Roth conversions in the annual ledger. Conversions raise ordinary income in the conversion year, move dollars from traditional to Roth, and then affect later taxes, RMDs, account balances, and after-tax estate value.',
87
+ },
88
+ { type: 'heading', text: 'Common mistakes' },
89
+ {
90
+ type: 'list',
91
+ items: [
92
+ 'Judging the conversion only by this year\'s tax bill.',
93
+ 'Converting so much that Medicare, ACA, or Social Security tax interactions swamp the intended benefit.',
94
+ 'Forgetting that paying conversion tax from the IRA itself can leave less money invested.',
95
+ 'Assuming a conversion is reversible. Modern Roth conversions generally need to be planned as final decisions.',
96
+ ],
97
+ },
98
+ { type: 'heading', text: 'Where to use this in the app' },
99
+ {
100
+ type: 'prose',
101
+ md: 'Use the **Strategy** screen for manual or fill-to-target conversion rules. Use **Optimize** when you want RetireGolden to search for a multi-year schedule and then re-check it in **Results** and **Monte Carlo**.',
102
+ },
103
+ ],
104
+ }