fire-planner/fire_planner
Viktor Barzin d91473a018
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
app: SPA fallback for arbitrary client routes
StaticFiles(html=True) only serves index.html for directory paths,
which 404s on /scenarios, /what-if, /scenarios/123 — anything React
Router owns. Subclass StaticFiles to catch the 404 from get_response
and return index.html so the SPA can take over routing client-side.

API routes still match first (under /api/* in prod), so no risk of
shadowing.

Found via headless verification through chrome-service: dashboard
loaded 200 + nav rendered, but /scenarios + /what-if returned 404.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-09 22:56:37 +00:00
..
api engine+api: plumb life events into the simulator 2026-05-09 22:30:33 +00:00
ingest ingest: switch wealthfolio to pg-sync mirror reads 2026-05-09 21:33:48 +00:00
reporters Initial extraction from monorepo 2026-05-07 17:06:19 +00:00
returns Initial extraction from monorepo 2026-05-07 17:06:19 +00:00
strategies Initial extraction from monorepo 2026-05-07 17:06:19 +00:00
tax Initial extraction from monorepo 2026-05-07 17:06:19 +00:00
__init__.py Initial extraction from monorepo 2026-05-07 17:06:19 +00:00
__main__.py ingest: switch wealthfolio to pg-sync mirror reads 2026-05-09 21:33:48 +00:00
app.py app: SPA fallback for arbitrary client routes 2026-05-09 22:56:37 +00:00
db.py schema: add life_event, retirement_goal; extend scenario with kind/parent 2026-05-09 21:36:58 +00:00
fx.py Initial extraction from monorepo 2026-05-07 17:06:19 +00:00
glide_path.py Initial extraction from monorepo 2026-05-07 17:06:19 +00:00
life_events.py engine+api: plumb life events into the simulator 2026-05-09 22:30:33 +00:00
scenarios.py Initial extraction from monorepo 2026-05-07 17:06:19 +00:00
simulator.py engine+api: plumb life events into the simulator 2026-05-09 22:30:33 +00:00