@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,103 @@
1
+ /**
2
+ * "PIA, AIME, and bend points" - a Social Security P0 article.
3
+ */
4
+
5
+ import type { LearningArticle } from '../learningRegistry'
6
+
7
+ export const piaAimeBendPointsArticle: LearningArticle = {
8
+ slug: 'pia-aime-and-bend-points',
9
+ title: 'PIA, AIME, and bend points',
10
+ description: 'How your earnings history becomes a base benefit amount.',
11
+ category: 'social-security',
12
+ tags: ['social security', 'pia', 'aime', 'bend points', 'earnings record', 'wage indexing'],
13
+ audience: 'intermediate',
14
+ status: 'ready',
15
+ lastReviewed: '2026-06-19',
16
+ reviewCadence: 'annual',
17
+ sourceUrls: [
18
+ 'https://www.ssa.gov/oact/COLA/Benefits.html',
19
+ 'https://www.ssa.gov/oact/COLA/piaformula.html',
20
+ 'https://www.ssa.gov/oact/COLA/bendpoints.html',
21
+ ],
22
+ relatedArticles: [
23
+ 'social-security-claiming-age-basics',
24
+ 'earnings-test-before-fra',
25
+ 'break-even-useful-lens',
26
+ 'cola-and-inflation-protection',
27
+ ],
28
+ relatedPlannerRoutes: ['/plan/:planId/social-security', '/plan/:planId/social-security-analysis'],
29
+ currentYearSensitive: true,
30
+ priority: 'P0',
31
+ blocks: [
32
+ {
33
+ type: 'prose',
34
+ md: 'Primary insurance amount (PIA) is the monthly Social Security retirement benefit you would receive if you claim at full retirement age. RetireGolden can take PIA directly from your SSA statement or estimate it from covered earnings.',
35
+ },
36
+ { type: 'heading', text: 'Quick takeaways' },
37
+ {
38
+ type: 'list',
39
+ items: [
40
+ 'AIME means average indexed monthly earnings: a wage-indexed monthly average of your strongest earning years.',
41
+ 'Bend points are the tiers that turn AIME into PIA.',
42
+ 'The first AIME tier is replaced at a higher percentage than later tiers, so extra earnings help most when they replace low or zero years.',
43
+ ],
44
+ },
45
+ { type: 'heading', text: 'The basic idea' },
46
+ {
47
+ type: 'prose',
48
+ md: 'Social Security does not simply pay back what you paid in. It first indexes covered earnings to account for national wage growth, averages the strongest years into AIME, then applies a tiered formula.\n\nThe formula is progressive. A dollar of AIME in the first tier counts more than a dollar in the later tiers. That is why replacing a zero year can matter a lot for one person and barely move the answer for another.',
49
+ },
50
+ {
51
+ type: 'figure',
52
+ image: { src: '/learn/images/pia-aime-bend-points.webp' },
53
+ caption:
54
+ 'Covered earnings are indexed and averaged into AIME, then passed through bend-point tiers to produce the base benefit.',
55
+ alt: 'Many annual earnings tiles flow through a funnel into an average bucket, then through a three-tier bend-point container into a benefit stream.',
56
+ },
57
+ { type: 'heading', text: 'The formula path' },
58
+ {
59
+ type: 'formula',
60
+ expression: 'PIA = 90% of the first AIME tier + 32% of the middle tier + 15% of AIME above the second bend point',
61
+ where: [
62
+ { symbol: 'PIA', meaning: 'Primary insurance amount, the monthly benefit at full retirement age' },
63
+ { symbol: 'AIME', meaning: 'Average indexed monthly earnings' },
64
+ { symbol: 'bend points', meaning: 'Dollar thresholds for the tiered Social Security formula' },
65
+ ],
66
+ note:
67
+ "This is the simplified retirement-benefit formula. SSA applies bend points for the worker's eligibility year, so AIME and PIA are in that formula year's basis, not necessarily current-year or today's dollars.",
68
+ },
69
+ { type: 'heading', text: 'What each term means' },
70
+ {
71
+ type: 'table',
72
+ caption: 'The earnings-record path in plain language.',
73
+ columns: ['Term', 'Plain-language meaning', 'Why it matters'],
74
+ rows: [
75
+ ['Covered earnings', 'Wages or self-employment income taxed for Social Security', 'Only covered earnings count toward the retirement benefit'],
76
+ ['Wage indexing', 'Older earnings are adjusted using national wage growth', 'A dollar earned decades ago is not treated like a current dollar'],
77
+ ['AIME', 'The monthly average after indexing and selecting the strongest years', 'This is the number fed into the benefit formula'],
78
+ ['Bend points', 'The tier thresholds for the formula', 'The same extra AIME can have different value depending on the tier'],
79
+ ['PIA', 'The base monthly benefit at full retirement age', 'Claiming age then reduces or increases this base amount'],
80
+ ],
81
+ },
82
+ { type: 'heading', text: 'Why it matters in RetireGolden' },
83
+ {
84
+ type: 'prose',
85
+ md: 'RetireGolden lets you use **Quick** mode by entering PIA directly, or **Earnings record** mode by pasting or importing covered earnings. Earnings mode computes AIME and PIA, shows whether zero years are dragging the average down, and warns when future SSA tables are not yet published.',
86
+ },
87
+ { type: 'heading', text: 'Common mistakes' },
88
+ {
89
+ type: 'list',
90
+ items: [
91
+ 'Entering the monthly check at a planned claim age instead of PIA at full retirement age.',
92
+ 'Assuming every extra year of work raises the benefit by the same amount.',
93
+ 'Forgetting that an SSA statement may assume future earnings continue if you have not retired yet.',
94
+ 'Treating a future-year PIA estimate as final before SSA publishes the wage and bend-point tables for that year.',
95
+ ],
96
+ },
97
+ { type: 'heading', text: 'Where to use this in the app' },
98
+ {
99
+ type: 'prose',
100
+ md: 'Use **Social Security** to enter PIA directly or switch to the earnings-record mode. If you use earnings mode, read the AIME and bend-point explainer below the entry box before comparing claim ages.',
101
+ },
102
+ ],
103
+ }
@@ -0,0 +1,106 @@
1
+ /**
2
+ * "Planner overview: from household to results" - a Using RetireGolden P0 article.
3
+ */
4
+
5
+ import type { LearningArticle } from '../learningRegistry'
6
+
7
+ export const plannerOverviewArticle: LearningArticle = {
8
+ slug: 'planner-overview',
9
+ title: 'Planner overview: from household to results',
10
+ description: 'A guided tour of the planner sections and the order to fill them in.',
11
+ category: 'using-retiregolden',
12
+ tags: ['planner', 'workflow', 'household', 'accounts', 'results', 'retiregolden'],
13
+ audience: 'beginner',
14
+ status: 'ready',
15
+ lastReviewed: '2026-06-20',
16
+ reviewCadence: 'stable',
17
+ sourceUrls: [],
18
+ relatedArticles: [
19
+ 'about-retiregolden',
20
+ 'what-retiregolden-models',
21
+ 'three-big-questions-spending-time-risk',
22
+ 'reading-the-results-page',
23
+ 'understanding-monte-carlo-success-rate',
24
+ ],
25
+ relatedPlannerRoutes: [
26
+ '/plan/:planId/household',
27
+ '/plan/:planId/accounts',
28
+ '/plan/:planId/spending',
29
+ '/plan/:planId/results',
30
+ '/plan/:planId/report',
31
+ ],
32
+ currentYearSensitive: false,
33
+ priority: 'P0',
34
+ blocks: [
35
+ {
36
+ type: 'prose',
37
+ md: 'The planner is organized as a loop: enter the household and money facts, read the result, then explore changes. You do not need every field perfect before the first run. You need the main facts good enough to learn what deserves attention.',
38
+ },
39
+ { type: 'heading', text: 'Quick takeaways' },
40
+ {
41
+ type: 'list',
42
+ items: [
43
+ 'Fill the Enter sections first: Household, Social Security, Accounts, Insurance, Income, Spending, Strategy, and Assumptions.',
44
+ 'Use Results as the baseline, then use Monte Carlo, Scenarios, Optimize, and Compare plans for exploration.',
45
+ 'Plans are stored on this device, so download a backup if you want a copy outside the browser.',
46
+ ],
47
+ },
48
+ { type: 'heading', text: 'The basic idea' },
49
+ {
50
+ type: 'prose',
51
+ md: 'RetireGolden turns your inputs into a year-by-year projection. The left rail separates entry screens from exploration screens. Entry screens describe the plan. Exploration screens ask what the plan implies and how it changes under stress.',
52
+ },
53
+ {
54
+ type: 'figure',
55
+ image: { src: '/learn/images/planner-overview.webp' },
56
+ caption:
57
+ 'The planner flows from household facts and account inputs into results, risk views, scenarios, and optimization.',
58
+ alt: 'A left-to-right workflow shows household, income, accounts, spending, strategy, and assumptions feeding results, then branching to risk, scenarios, optimize, and report outputs.',
59
+ },
60
+ {
61
+ type: 'table',
62
+ caption: 'A practical first-pass order.',
63
+ columns: ['Step', 'Section', 'What to get roughly right'],
64
+ rows: [
65
+ ['1', 'Household', 'People, filing status, state, retirement ages, and planning ages'],
66
+ ['2', 'Social Security', 'Claim ages and benefit estimates'],
67
+ ['3', 'Accounts', 'Balances, account types, owners, cost basis, and contributions'],
68
+ ['4', 'Income and Spending', 'Non-portfolio income, base expenses, goals, healthcare, and debt'],
69
+ ['5', 'Strategy and Assumptions', 'Withdrawal order, Roth conversion approach, inflation, returns, and tax assumptions'],
70
+ ['6', 'Results and Explore screens', 'Whether the baseline works, which risks matter, and which choices to compare'],
71
+ ],
72
+ },
73
+ { type: 'heading', text: 'A worked example' },
74
+ {
75
+ type: 'scenario',
76
+ name: 'The Avery household',
77
+ assumptions: [
78
+ { label: 'First pass', value: '$900,000 savings, $95,000 annual spending, rounded account details' },
79
+ { label: 'First result', value: 'Money lasts in Results, but Monte Carlo shows 72% success' },
80
+ { label: 'Next edit', value: 'Refines spending to $88,000 and adds taxable cost basis' },
81
+ ],
82
+ summary:
83
+ 'The rough plan is useful because it points to the two biggest inputs: spending and taxable basis. After the edits, the same household can see whether 72% success was a data problem or a real risk.',
84
+ },
85
+ { type: 'heading', text: 'Why it matters in RetireGolden' },
86
+ {
87
+ type: 'prose',
88
+ md: 'The KPI bar updates as the plan changes, and each plan is saved locally in the browser. The deterministic projection feeds Results, while Monte Carlo, Scenarios, and Optimize reuse the same plan data to answer different questions.',
89
+ },
90
+ { type: 'heading', text: 'Common mistakes' },
91
+ {
92
+ type: 'list',
93
+ items: [
94
+ 'Starting with Optimize before the baseline inputs make sense.',
95
+ 'Leaving account types wrong and then trusting tax results.',
96
+ 'Comparing two plans that use different spending or return assumptions without noticing.',
97
+ 'Forgetting to save a downloaded backup before clearing browser data or changing devices.',
98
+ ],
99
+ },
100
+ { type: 'heading', text: 'Where to use this in the app' },
101
+ {
102
+ type: 'prose',
103
+ md: 'Use this overview when starting a new plan. After the first baseline, move between **Results**, **Monte Carlo**, **Scenarios**, and **Optimize** depending on whether you want to inspect, stress-test, compare, or search for a Roth conversion schedule.',
104
+ },
105
+ ],
106
+ }
@@ -0,0 +1,108 @@
1
+ /**
2
+ * "Planning for couples and survivor years" - a Start Here P1 article.
3
+ */
4
+
5
+ import type { LearningArticle } from '../learningRegistry'
6
+
7
+ export const planningForCouplesAndSurvivorYearsArticle: LearningArticle = {
8
+ slug: 'planning-for-couples-and-survivor-years',
9
+ title: 'Planning for couples and survivor years',
10
+ description: 'Why the years after one spouse dies deserve their own attention.',
11
+ category: 'start-here',
12
+ tags: ['couples', 'survivor', 'widow penalty', 'social security', 'planning horizon'],
13
+ audience: 'beginner',
14
+ status: 'ready',
15
+ lastReviewed: '2026-06-20',
16
+ reviewCadence: 'rule-change',
17
+ sourceUrls: [
18
+ 'https://www.ssa.gov/benefits/survivors/',
19
+ 'https://www.irs.gov/filing/federal-income-tax-rates-and-brackets',
20
+ ],
21
+ relatedArticles: [
22
+ 'spousal-and-survivor-benefits',
23
+ 'widows-penalty-and-survivor-brackets',
24
+ 'how-assumptions-change-the-answer',
25
+ 'survivor-planning-for-couples',
26
+ 'social-security-claiming-age-basics',
27
+ ],
28
+ relatedPlannerRoutes: [
29
+ '/plan/:planId/household',
30
+ '/plan/:planId/social-security',
31
+ '/plan/:planId/insurance',
32
+ '/plan/:planId/results',
33
+ '/plan/:planId/scenarios',
34
+ ],
35
+ currentYearSensitive: false,
36
+ priority: 'P1',
37
+ blocks: [
38
+ {
39
+ type: 'prose',
40
+ md: 'A couple plan has two phases: the years when both spouses are alive and the years when one person may be managing the household alone. The second phase can look financially different even when the lifestyle feels similar.',
41
+ },
42
+ { type: 'heading', text: 'Quick takeaways' },
43
+ {
44
+ type: 'list',
45
+ items: [
46
+ 'A survivor may keep only the larger Social Security check, not both checks.',
47
+ 'Taxes can rise because the survivor often moves from joint brackets to single brackets.',
48
+ 'Some expenses fall after the first death, but housing, taxes, insurance, and healthcare may not fall by half.',
49
+ ],
50
+ },
51
+ { type: 'heading', text: 'The basic idea' },
52
+ {
53
+ type: 'prose',
54
+ md: 'The surviving spouse is still paying for a household, but with fewer income streams and a different tax shape. This is why a plan that looks comfortable for two people can still deserve a survivor-year check. It is not pessimism. It is protecting the person who may have fewer choices later.',
55
+ },
56
+ {
57
+ type: 'figure',
58
+ image: { src: '/learn/images/couples-survivor-years.webp' },
59
+ caption:
60
+ 'A couple plan should inspect both the joint years and the one-spouse survivor years.',
61
+ alt: 'Two retirement paths travel together, then one continues alone with Social Security, tax, and spending markers still ahead.',
62
+ },
63
+ {
64
+ type: 'table',
65
+ caption: 'What often changes after the first death.',
66
+ columns: ['Item', 'Joint years', 'Survivor years'],
67
+ rows: [
68
+ ['Social Security', 'Two checks may be paid', 'Usually the survivor keeps the larger eligible check'],
69
+ ['Tax filing', 'Married filing jointly may apply', 'Single brackets may apply after transition rules'],
70
+ ['Spending', 'Two-person household costs', 'Some costs fall, but fixed household costs remain'],
71
+ ['Healthcare', 'Two people insured', 'One person remains exposed to premiums, care costs, and inflation'],
72
+ ['Decision load', 'Shared decisions', 'One person may need simpler records and safer liquidity'],
73
+ ],
74
+ },
75
+ { type: 'heading', text: 'A worked example' },
76
+ {
77
+ type: 'scenario',
78
+ name: 'The Rivera household',
79
+ assumptions: [
80
+ { label: 'Joint years', value: '$72,000 of combined Social Security while both spouses are alive' },
81
+ { label: 'Survivor income', value: '$44,000 larger benefit continues after the smaller check stops' },
82
+ { label: 'Survivor cost', value: 'Spending falls 25%, not 50%, because housing and insurance remain' },
83
+ ],
84
+ summary:
85
+ 'Income falls by about **$28,000**, while spending falls only 25%. The survivor years need their own read because the gap can widen even when the couple-year plan looks comfortable.',
86
+ },
87
+ { type: 'heading', text: 'Why it matters in RetireGolden' },
88
+ {
89
+ type: 'prose',
90
+ md: 'RetireGolden tracks each person in the household, each person\'s planning age, Social Security claim age, account ownership, insurance, and tax filing status. That lets the projection show the years after one spouse dies instead of stopping at the first death.',
91
+ },
92
+ { type: 'heading', text: 'Common mistakes' },
93
+ {
94
+ type: 'list',
95
+ items: [
96
+ 'Planning only to the older spouse or the first life expectancy.',
97
+ 'Assuming expenses fall in half when one spouse dies.',
98
+ 'Ignoring which Social Security benefit protects the survivor.',
99
+ 'Missing the tax effect of moving from joint brackets to single brackets.',
100
+ ],
101
+ },
102
+ { type: 'heading', text: 'Where to use this in the app' },
103
+ {
104
+ type: 'prose',
105
+ md: 'Use **Household** to set each planning age, **Social Security** to enter benefits and claim ages, **Insurance** for survivor protection, and **Results** to inspect late years after one spouse is no longer alive.',
106
+ },
107
+ ],
108
+ }
@@ -0,0 +1,99 @@
1
+ /**
2
+ * "Privacy: what stays in your browser" - a Using RetireGolden P1 article.
3
+ */
4
+
5
+ import type { LearningArticle } from '../learningRegistry'
6
+
7
+ export const privacyWhatStaysInYourBrowserArticle: LearningArticle = {
8
+ slug: 'privacy-what-stays-in-your-browser',
9
+ title: 'Privacy: what stays in your browser',
10
+ description: 'Why your plan data never leaves your device and what that implies.',
11
+ category: 'using-retiregolden',
12
+ tags: ['privacy', 'browser storage', 'backup', 'indexeddb', 'local storage'],
13
+ audience: 'beginner',
14
+ status: 'ready',
15
+ lastReviewed: '2026-06-20',
16
+ reviewCadence: 'stable',
17
+ sourceUrls: [],
18
+ relatedArticles: [
19
+ 'planner-overview',
20
+ 'reports-csv-exports-and-sharing',
21
+ 'what-retiregolden-models',
22
+ 'using-assumptions-and-provenance',
23
+ 'troubleshooting-surprising-results',
24
+ ],
25
+ relatedPlannerRoutes: ['/', '/plan/:planId/report'],
26
+ currentYearSensitive: false,
27
+ priority: 'P1',
28
+ blocks: [
29
+ {
30
+ type: 'prose',
31
+ md: 'RetireGolden does not have accounts or server-side plan storage. The plan data you enter stays in this browser on this device. That is good for privacy, but it also means you are responsible for backups.',
32
+ },
33
+ { type: 'heading', text: 'Quick takeaways' },
34
+ {
35
+ type: 'list',
36
+ items: [
37
+ 'V2 plans are stored locally in IndexedDB, with some older/import helper data in localStorage.',
38
+ 'RetireGolden cannot recover a plan after you clear browser data or switch devices without a backup.',
39
+ 'A JSON backup is the way to keep or move editable plans outside the browser.',
40
+ ],
41
+ },
42
+ { type: 'heading', text: 'The basic idea' },
43
+ {
44
+ type: 'prose',
45
+ md: 'Local-first storage means the app can save your plan without creating an online account. It also means the browser is the vault. If that browser profile is deleted, reset, or unavailable, RetireGolden has no server copy to restore from.',
46
+ },
47
+ {
48
+ type: 'figure',
49
+ image: { src: '/learn/images/browser-privacy.webp' },
50
+ caption:
51
+ 'Local browser storage protects plan privacy, but backups are how you keep a recoverable copy.',
52
+ alt: 'A browser window holds a private retirement plan vault, with a backup file placed outside it for safekeeping.',
53
+ },
54
+ {
55
+ type: 'table',
56
+ caption: 'What this privacy model means in practice.',
57
+ columns: ['Situation', 'What happens', 'Best habit'],
58
+ rows: [
59
+ ['Normal planning', 'The browser saves your plans locally', 'Keep working in the same browser profile'],
60
+ ['Sharing a computer', 'Anyone with that browser profile may be able to open the plans', 'Use an OS account you control'],
61
+ ['Clearing site data', 'Plans and older RetireGolden entries may be erased', 'Download a backup first'],
62
+ ['Moving devices', 'The new device has no copy automatically', 'Import a JSON backup'],
63
+ ['Asking for support', 'There is no server copy to inspect', 'Share only the report or details you choose'],
64
+ ],
65
+ },
66
+ { type: 'heading', text: 'A worked example' },
67
+ {
68
+ type: 'scenario',
69
+ name: 'The Singh household',
70
+ assumptions: [
71
+ { label: 'Before travel', value: 'Download a JSON backup after updating 2 plans' },
72
+ { label: 'New laptop', value: 'Import the backup into the new browser and confirm both plans open in 1 browser' },
73
+ { label: 'Old browser cleanup', value: 'Clear local data from the old browser only after the 2 imported balances match' },
74
+ ],
75
+ summary:
76
+ 'Nothing was synced to an account. The Singhs moved **2** plans by carrying **1** backup file themselves, then checked both balances before clearing the old browser.',
77
+ },
78
+ { type: 'heading', text: 'Why it matters in RetireGolden' },
79
+ {
80
+ type: 'prose',
81
+ md: 'The planner home explains that data stays on your device and offers **Download plan backup**, **Import previous backup**, and **Clear all data**. The workspace also reminds you that plans live only in this browser.',
82
+ },
83
+ { type: 'heading', text: 'Common mistakes' },
84
+ {
85
+ type: 'list',
86
+ items: [
87
+ 'Assuming there is an online account behind the scenes.',
88
+ 'Using private browsing for long-term plan storage.',
89
+ 'Clearing browser data before exporting a backup.',
90
+ 'Emailing a full backup when a limited report would be safer.',
91
+ ],
92
+ },
93
+ { type: 'heading', text: 'Where to use this in the app' },
94
+ {
95
+ type: 'prose',
96
+ md: 'Use the planner home whenever you need to download a backup, import a prior backup, duplicate plans, or clear local RetireGolden data from the current browser.',
97
+ },
98
+ ],
99
+ }
@@ -0,0 +1,101 @@
1
+ /**
2
+ * "QCDs: qualified charitable distributions" - a Withdrawals and Roth P1 article.
3
+ */
4
+
5
+ import type { LearningArticle } from '../learningRegistry'
6
+
7
+ export const qcdsQualifiedCharitableDistributionsArticle: LearningArticle = {
8
+ slug: 'qcds-qualified-charitable-distributions',
9
+ title: 'QCDs: qualified charitable distributions',
10
+ description: 'Giving from an IRA in a way that can lower taxable income.',
11
+ category: 'withdrawals-roth',
12
+ tags: ['qcd', 'qualified charitable distribution', 'rmd', 'charity', 'ira', 'magi'],
13
+ audience: 'beginner',
14
+ status: 'ready',
15
+ lastReviewed: '2026-06-20',
16
+ reviewCadence: 'annual',
17
+ sourceUrls: [
18
+ 'https://www.irs.gov/retirement-plans/retirement-plans-faqs-regarding-iras-distributions-withdrawals',
19
+ 'https://www.irs.gov/retirement-plans/retirement-plan-and-ira-required-minimum-distributions-faqs',
20
+ 'https://www.irs.gov/forms-pubs/about-publication-590-b',
21
+ ],
22
+ relatedArticles: [
23
+ 'rmds-required-minimum-distributions',
24
+ 'withdrawal-order-basics',
25
+ 'agi-magi-and-taxable-income',
26
+ 'why-roth-conversions-raise-other-costs',
27
+ ],
28
+ relatedPlannerRoutes: ['/plan/:planId/strategy', '/plan/:planId/results'],
29
+ currentYearSensitive: true,
30
+ priority: 'P1',
31
+ blocks: [
32
+ {
33
+ type: 'prose',
34
+ md: 'A qualified charitable distribution, or QCD, sends money directly from an IRA to a qualified charity. For people who are eligible, it can satisfy part of an RMD while keeping that donated amount out of taxable income.',
35
+ },
36
+ { type: 'heading', text: 'Quick takeaways' },
37
+ {
38
+ type: 'list',
39
+ items: [
40
+ 'A QCD is a direct IRA-to-charity transfer, not a normal withdrawal followed by a personal donation.',
41
+ 'QCDs can count toward RMDs while reducing taxable income and MAGI.',
42
+ 'RetireGolden models QCDs as a planning-level annual amount routed out of RMDs, capped by the parameter pack.',
43
+ ],
44
+ },
45
+ { type: 'heading', text: 'The basic idea' },
46
+ {
47
+ type: 'prose',
48
+ md: 'If you take an IRA distribution personally and then donate cash, the distribution may still raise AGI or MAGI. A QCD is different: the eligible charitable amount can be excluded from income when done correctly.\n\nThat can matter even for people who do not itemize deductions. Lower income can affect tax brackets, Social Security taxation, Medicare IRMAA, ACA credits before Medicare, and other income-sensitive rules.',
49
+ },
50
+ {
51
+ type: 'figure',
52
+ image: { src: '/learn/images/qcds-qualified-charitable-distributions.webp' },
53
+ caption:
54
+ 'A QCD routes part of an IRA distribution directly to charity, bypassing the taxable-income path for that amount.',
55
+ alt: 'An RMD ribbon leaves a retirement bucket and splits. One branch goes through a tax gate to spending, while another branch goes directly to a charity basket.',
56
+ },
57
+ { type: 'heading', text: 'QCD versus ordinary donation' },
58
+ {
59
+ type: 'table',
60
+ caption: 'The routing is what makes a QCD different.',
61
+ columns: ['Choice', 'Cash path', 'Planning effect'],
62
+ rows: [
63
+ ['Normal IRA withdrawal, then donation', 'Money comes to you first', 'The withdrawal may still raise income'],
64
+ ['QCD', 'Money goes directly from IRA to charity', 'Eligible amount can be excluded from income'],
65
+ ['Roth or taxable-account gift', 'Money does not satisfy an IRA RMD', 'May still be charitable, but it is not the same planning lever'],
66
+ ],
67
+ },
68
+ { type: 'heading', text: 'A worked example' },
69
+ {
70
+ type: 'scenario',
71
+ name: 'The Howard household',
72
+ assumptions: [
73
+ { label: 'RMD', value: '$42,000 required distribution for the year' },
74
+ { label: 'Giving habit', value: '$8,000 annual gift to charity' },
75
+ { label: 'Two paths', value: 'Take the full RMD into checking, or send $8,000 directly as a QCD' },
76
+ ],
77
+ summary:
78
+ 'With the QCD path, only **$34,000** of the RMD flows into income in this simplified example. The gift still happens, but the tax return does not first absorb the full $42,000 distribution.',
79
+ },
80
+ { type: 'heading', text: 'Why it matters in RetireGolden' },
81
+ {
82
+ type: 'prose',
83
+ md: 'RetireGolden has an annual QCD setting on the Strategy screen. The model routes QCD dollars out of RMDs when an eligible-age person is alive, excludes that amount from income, and caps it using the annual QCD limit in the parameter pack. It does not verify charity eligibility, transfer mechanics, receipts, or tax-form reporting.',
84
+ },
85
+ { type: 'heading', text: 'Common mistakes' },
86
+ {
87
+ type: 'list',
88
+ items: [
89
+ 'Taking the IRA withdrawal personally and assuming a later donation is still a QCD.',
90
+ 'Forgetting that QCD rules have eligibility and annual limit details.',
91
+ 'Counting a QCD as both excluded income and an itemized charitable deduction.',
92
+ 'Using the model as proof that a real charity or transfer qualifies.',
93
+ ],
94
+ },
95
+ { type: 'heading', text: 'Where to use this in the app' },
96
+ {
97
+ type: 'prose',
98
+ md: 'Use **Strategy** to enter an annual QCD amount. Use **Results** to compare RMD, QCD, tax, MAGI, and healthcare effects across years.',
99
+ },
100
+ ],
101
+ }
@@ -0,0 +1,96 @@
1
+ /**
2
+ * "Reading the Results page" - a Using RetireGolden P0 article.
3
+ */
4
+
5
+ import type { LearningArticle } from '../learningRegistry'
6
+
7
+ export const readingResultsPageArticle: LearningArticle = {
8
+ slug: 'reading-the-results-page',
9
+ title: 'Reading the Results page',
10
+ description: 'What each headline number and chart on the Results page means.',
11
+ category: 'using-retiregolden',
12
+ tags: ['results', 'projection', 'balances', 'cash flow', 'magi', 'csv'],
13
+ audience: 'beginner',
14
+ status: 'ready',
15
+ lastReviewed: '2026-06-19',
16
+ reviewCadence: 'stable',
17
+ sourceUrls: [],
18
+ relatedArticles: [
19
+ 'how-to-read-a-retirement-projection',
20
+ 'todays-dollars-vs-future-dollars',
21
+ 'understanding-monte-carlo-success-rate',
22
+ 'what-retiregolden-models',
23
+ ],
24
+ relatedPlannerRoutes: ['/plan/:planId/results', '/plan/:planId/report'],
25
+ currentYearSensitive: false,
26
+ priority: 'P0',
27
+ blocks: [
28
+ {
29
+ type: 'prose',
30
+ md: 'The Results page is the deterministic version of your plan: one path, using the assumptions you entered. It is the best place to understand the mechanics before you ask risk questions.',
31
+ },
32
+ { type: 'heading', text: 'Quick takeaways' },
33
+ {
34
+ type: 'list',
35
+ items: [
36
+ 'Use the **Today\'s $ / Nominal $** toggle before judging any dollar amount.',
37
+ 'Read the charts from top to bottom: balances, cash flow, taxes, then year-by-year details.',
38
+ 'If a plan depletes, the first shortfall year matters more than the final zero.',
39
+ ],
40
+ },
41
+ { type: 'heading', text: 'The basic idea' },
42
+ {
43
+ type: 'prose',
44
+ md: 'Results answers one question: "If these assumptions happen, how does the plan unfold?" The charts summarize the ledger, and the table lets you inspect each year.\n\nThis is different from Monte Carlo. Results does not test hundreds or thousands of market paths. It shows the clean baseline, which makes it easier to find which inputs and cash flows are moving the plan.',
45
+ },
46
+ {
47
+ type: 'table',
48
+ caption: 'What each Results section is trying to tell you.',
49
+ columns: ['Section', 'What it shows', 'How to read it'],
50
+ rows: [
51
+ ['Dollar toggle', 'Today\'s dollars or nominal dollars', 'Use today\'s dollars for lifestyle comparisons; nominal dollars for ledger and tax-year mechanics.'],
52
+ ['Investable balances', 'End-of-year account balances by type', 'Watch which buckets empty first and whether a depletion marker appears.'],
53
+ ['Income vs spending', 'Income beside spending plus tax', 'The wider the gap, the more withdrawals must do.'],
54
+ ['Tax and MAGI', 'Estimated tax and modified adjusted gross income', 'Look for spikes that may explain Roth conversion, healthcare, or Social Security tax effects.'],
55
+ ['Year-by-year detail', 'The full annual ledger', 'Use it when a chart surprises you or you need the exact year something changes.'],
56
+ ],
57
+ },
58
+ { type: 'heading', text: 'A worked reading pattern' },
59
+ {
60
+ type: 'scenario',
61
+ name: 'The Chen household',
62
+ assumptions: [
63
+ { label: 'Baseline result', value: 'Money lasts through age 95' },
64
+ { label: 'Chart surprise', value: 'Traditional IRA falls from $700,000 to $420,000 in the early 70s' },
65
+ { label: 'Detail table clue', value: '$45,000 conversions and RMDs are both active in the same years' },
66
+ ],
67
+ summary:
68
+ 'The headline says the plan lasts. The table explains why the IRA falls: conversions and RMDs are moving about **$45,000+** per year out of the pre-tax bucket.',
69
+ },
70
+ { type: 'heading', text: 'The year-by-year table' },
71
+ {
72
+ type: 'prose',
73
+ md: 'The table is the audit trail. It includes income, expenses, required minimum distributions, Roth conversions, withdrawals, tax, MAGI, shortfall, investable assets, and net worth. You do not need to read every row every time. Start with the first year that looks unusual.',
74
+ },
75
+ {
76
+ type: 'callout',
77
+ tone: 'note',
78
+ md: 'A blank shortfall cell is good news for that year. It means the modeled accounts covered the plan\'s cash needs for that year.',
79
+ },
80
+ { type: 'heading', text: 'Common mistakes' },
81
+ {
82
+ type: 'list',
83
+ items: [
84
+ 'Comparing a today\'s-dollar chart to a nominal-dollar account statement.',
85
+ 'Assuming a higher ending balance is always better without checking taxes, risk, or survivor years.',
86
+ 'Ignoring MAGI because it looks like a tax detail. MAGI can also affect Medicare and ACA modeling in other parts of the plan.',
87
+ 'Assuming the CSV follows the dollar toggle. The export uses the nominal year-by-year ledger, even when the screen is showing today\'s dollars.',
88
+ ],
89
+ },
90
+ { type: 'heading', text: 'Where to use this in the app' },
91
+ {
92
+ type: 'prose',
93
+ md: 'Use **Results** after every meaningful input change. Use **View printable report** when you want a clean summary, and **Download CSV** when you want to inspect or archive the nominal annual ledger outside the app.',
94
+ },
95
+ ],
96
+ }