Guillem Arias
ee9f5d8b63
feat(retirement): PR4a glide-path chart (D3)
...
The dashboard centerpiece. Goal::Retirement#glide_payload derives, from
the forecast, the active-plan series + a zero-savings (Walletburst)
shadow + a ±1pp real-return band + the per-age income breakdown for the
hover tooltip + lump markers + the retire/Coast crossover points (three
extra deterministic Forecast runs; cheap).
retirement_glide_chart_controller (D3, mirrors goal_projection_chart's
import / ResizeObserver / theme-observer idiom): portfolio-by-age line +
area, accumulation/drawdown phase shading, the ±1pp band cone, the
dashed Walletburst shadow, a "Retire · age N / $X" chip on the retire
line, a blue Coast crossover ring, purple lump bars, and a hover tooltip
(PR #2029 bg-container/rounded-xl/shadow style) showing the monthly
State / Workplace / Drawdown breakdown + Total-vs-target with a Covered
badge. Wired into the show page above the what-if; container is
privacy-sensitive.
Browser-verified: renders the band, shading, retire chip ($571K), Coast
dot, and shadow against the demo plan. glide_payload + lump_markers
unit-tested. Rubocop + erb_lint + biome clean.
Remaining for PR4: DS::SelectableCard bucket, "Why this target?" anchor
card, skinned DS::Dialog deletes, DE locale, demo seed, system test.
2026-05-29 11:58:56 +02:00
..
2026-05-14 21:33:22 +02:00
2026-05-14 16:07:14 +02:00
2026-05-13 21:27:50 +02:00
2026-04-07 14:43:17 +02:00
2026-04-07 14:43:17 +02:00
2026-05-13 18:13:48 +02:00
2026-05-13 18:13:48 +02:00
2026-05-13 18:13:48 +02:00
2026-04-01 20:25:06 +02:00
2026-04-01 20:25:06 +02:00
2026-04-11 21:37:07 +02:00
2026-02-06 18:04:03 +01:00
2026-05-13 14:03:37 +02:00
2026-05-12 00:17:49 +02:00
2026-05-13 17:54:09 +02:00
2026-02-06 18:04:03 +01:00
2026-04-13 00:51:23 +02:00
2026-05-13 20:07:00 +02:00
2026-05-29 11:58:56 +02:00
2026-05-14 16:07:14 +02:00
2026-05-12 23:45:19 +02:00
2026-05-26 22:48:23 +02:00
2026-05-12 23:45:19 +02:00
2026-04-27 18:33:22 +02:00
2026-05-12 00:22:37 +02:00
2026-05-12 00:22:37 +02:00
2026-01-09 13:14:14 +01:00
2026-02-19 18:58:01 +01:00
2026-01-23 00:53:24 +01:00
2026-03-11 15:54:01 +01:00
2025-10-28 19:32:27 +01:00
2025-05-24 19:16:55 -04:00
2026-05-17 12:09:51 +02:00
2026-03-23 12:34:43 +01:00
2026-03-26 19:01:35 +01:00
2026-05-29 11:31:06 +02:00
2026-02-16 13:50:06 +01:00
2026-05-17 16:55:01 +02:00
2025-11-24 14:07:14 +01:00
2026-05-13 18:17:10 +02:00
2026-04-07 14:43:17 +02:00
2026-04-18 09:50:34 +02:00
2026-05-12 00:55:46 +02:00
2026-05-09 21:55:20 +02:00
2026-05-12 23:45:19 +02:00
2026-04-08 21:05:58 +02:00
2025-07-15 11:42:41 -04:00
2026-03-20 17:01:31 +01:00
2026-05-12 23:45:19 +02:00
2026-05-13 20:07:00 +02:00
2026-01-07 15:59:04 +01:00
2026-03-25 10:50:23 +01:00
2025-11-24 14:07:14 +01:00
2026-05-13 21:05:11 +02:00
2026-05-24 13:27:27 +02:00
2026-05-18 18:38:53 +02:00
2026-04-29 15:30:04 +02:00
2026-02-06 21:25:52 +01:00
2026-03-14 20:14:18 +01:00
2026-05-03 20:33:29 +02:00
2026-05-03 20:33:29 +02:00
2026-05-18 20:49:28 +02:00
2026-04-07 14:43:17 +02:00
2026-04-07 14:43:17 +02:00
2026-05-13 18:13:48 +02:00
2026-05-13 18:13:48 +02:00
2026-04-13 20:03:55 +02:00
2026-04-23 21:28:38 +02:00
2026-03-11 15:54:01 +01:00
2026-04-01 20:27:29 +02:00
2026-05-03 20:33:29 +02:00
2026-01-21 22:56:39 +01:00
2026-01-21 22:56:39 +01:00
2026-04-11 21:37:07 +02:00
2026-01-07 15:59:04 +01:00
2026-02-19 19:51:42 +01:00
2024-10-03 14:42:22 -04:00
2026-05-17 16:55:01 +02:00
2026-04-10 23:19:48 +02:00
2026-05-09 12:36:41 +02:00
2026-04-13 00:51:23 +02:00
2026-02-19 18:07:47 +01:00
2026-02-11 15:22:56 +01:00
2025-09-24 00:19:51 +02:00
2026-05-29 11:31:06 +02:00
2026-05-18 21:11:30 +02:00
2026-05-29 10:25:05 +02:00
2026-05-12 23:45:19 +02:00
2026-05-18 21:03:04 +02:00
2026-05-12 23:45:19 +02:00
2026-05-12 23:45:19 +02:00
2026-05-12 23:45:19 +02:00
2025-09-24 00:19:51 +02:00
2026-01-12 14:40:30 +01:00
2026-03-25 17:47:04 +01:00
2026-02-08 18:19:37 +01:00
2026-02-08 18:19:37 +01:00
2026-04-11 15:09:59 +02:00
2026-05-05 01:04:29 +02:00
2026-03-10 13:44:53 +01:00
2024-02-02 19:37:10 -06:00
2026-05-12 00:22:37 +02:00
2026-04-18 00:06:24 +02:00
2026-05-12 12:18:17 +02:00
2026-04-07 20:46:05 +02:00
2026-05-03 10:56:31 +02:00
2026-05-03 10:56:31 +02:00
2026-05-12 00:00:49 +02:00
2026-02-06 18:04:29 +01:00
2026-05-12 21:55:22 +02:00
2026-05-05 01:12:48 +02:00
2026-05-29 10:36:18 +02:00
2025-11-11 19:51:07 +01:00
2026-03-19 15:17:55 +01:00
2025-10-31 13:29:44 +01:00
2026-05-12 00:22:37 +02:00
2025-04-01 08:41:49 -04:00
2026-04-05 09:27:24 +02:00
2026-05-12 00:37:47 +02:00
2026-05-29 10:36:18 +02:00
2026-04-03 12:38:37 +02:00
2026-03-13 07:59:45 +01:00
2026-04-10 17:42:16 +02:00
2025-11-11 19:51:07 +01:00
2026-04-29 13:00:38 +02:00
2026-05-17 09:52:49 +02:00
2025-11-17 21:51:37 +01:00
2025-10-22 19:51:24 +02:00
2026-05-12 23:45:19 +02:00
2026-03-20 14:52:09 +01:00
2026-01-23 00:27:00 +01:00
2026-05-12 12:17:00 +02:00
2026-05-08 15:15:23 +02:00
2026-05-09 21:55:20 +02:00
2026-02-10 23:14:58 +01:00
2026-05-05 00:47:45 +02:00
2025-05-13 15:53:13 -04:00
2026-05-20 21:35:22 +02:00
2026-05-06 22:02:21 +02:00
2024-07-10 11:22:59 -04:00
2026-05-13 20:07:00 +02:00
2026-05-12 23:45:19 +02:00
2026-03-14 23:56:27 +01:00
2026-05-13 20:07:00 +02:00
2026-05-12 23:45:19 +02:00
2026-01-12 15:35:14 -05:00
2025-02-21 11:57:59 -05:00
2026-05-03 20:33:29 +02:00
2026-05-19 14:41:02 +02:00