Scope of work · Goal Planning App

Goal Planning App: UI/UX PRD

Product requirements · May 2026 · current product authority for UI/UX

Problem Statement

Self-directed Indian retail investors lack a single tool that lets them (a) test whether a portfolio strategy can plausibly fund a real life goal, (b) pick real funds that map to that strategy with rigour, (c) track whether their actual investing matches the plan they committed to, and (d) backtest portfolios against history before trusting any forward-looking simulation. The four existing tools the user pulled inspiration from each solve at most one of these well, and none target the Indian market with its NSE indices, AMFI fund universe, and SIP-driven savings behaviour. Users currently have to stitch together Excel sheets, fund factsheets, and US-centric simulators — losing the analytical rigour and the visceral, "your real path lives somewhere inside this cone of outcomes" intuition that helps a retail investor stay invested through volatility.

Solution

A web app with four independent but linked top-level entities — Goal Scenario Analysis, Fund Selection & Screeners, Progress and Portfolio Tracking, and Backtesting. The user defines goals (Accumulate to a target, or Withdraw from a corpus), runs probabilistic simulations on the 20-asset NSE index universe to find portfolio strategies that meet the goal, picks real Indian mutual funds that map to those indices using the existing Persistence Framework screener, commits a frozen Scenario Reference Document to each goal, defines an event journal of SIPs and lump-sums, and watches their real portfolio path overlay onto the simulated cone of outcomes. A separate Backtester answers "how would this portfolio have performed historically?" using the same shared portfolio library. Progressive disclosure keeps simple defaults visible to most users while exposing every methodology lever to the power user who wants it.

Target Users

User Stories

Goal Scenario Analysis

  1. As a new user, I want a starter template gallery (Retirement / House / Education / Vacation / Marriage) so I don't stare at an empty form.
  2. As a user, I want to create a goal and pick a goal flavour (Accumulate to a target, or Withdraw from a corpus) so the form adapts to my situation.
  3. As a user, I want to set my target amount, horizon in years, and starting portfolio value so the simulation has the basics it needs.
  4. As a user, I want to start with one portfolio in my comparison, and add more incrementally up to five, so I am not forced to define five at once.
  5. As a user, I want to populate a portfolio from a preset library (60/40, HFEA, Permanent Portfolio, Golden Butterfly, Three Fund, Coffeehouse, Yale Endowment, Couch Potato, etc.) so I don't fill 20 empty rows by hand.
  6. As a user, I want to add and remove asset rows from the testfolio-style picker (Equities / Fixed Income / Alternatives) so my active rows reflect my actual portfolio.
  7. As a user, I want a sticky 100% total badge with green/yellow/red colour states and a one-click Normalize button so I always know whether my weights balance.
  8. As a user, I want gear-menu actions (Equal Weight / Normalize / Clear / Mirror Beginning) so common allocation operations are one click.
  9. As a user, I want to define a glide path as "hold the beginning portfolio for X years, then transition over Y years to the ending portfolio" and see a live stacked-area preview of the asset mix evolving over the goal horizon.
  10. As a user with a short-term Accumulate goal that ends in a one-shot withdrawal, I want the system to suggest a glide that derisks toward cash by horizon, so I don't end up holding equities the day I need the money.
  11. As a user, I want to define cashflow events using Variation B (rigid compact: monthly contribution + annual top-up + one-time events) so the common case is fast.
  12. As a user, I want to also try defining cashflow events using Variation C (timeline canvas: visible horizontal timeline of the goal horizon, click a year to add an event there) so I can see the cashflow shape over time.
  13. As a user, I want all amounts entered in today's rupees by default, with a "show nominal" display toggle, so I'm not silently mixing real and nominal.
  14. As a user, I want recurring streams to be inflation-adjusted by default and one-time events to be not-inflation-adjusted by default, so the defaults match my mental model.
  15. As a user, I want recurring events to default their end-condition to "Goal horizon" so I'm not fiddling with end years for the common case.
  16. As a user, I want a one-line live summary above the events list ("Net contributions: ₹X over N years (today's rupees)") so I have a sanity check before running the simulation.
  17. As a user, I want simple defaults (block bootstrap only, ~4000 trials, sensible block min/max) so I never have to touch methodology on day one.
  18. As a power user, I want to expose Advanced Settings to override block min/max years, increase the number of simulations to 10K or 20K (paid tier), and inspect the bootstrap parameters.
  19. As a user, I want the simulation to use direct historical sampling for horizons under 7 years and block bootstrap for horizons of 7 years or more, without me having to know which is which.
  20. As a user, I want to compare up to five portfolios on the same goal in a summary table, with metrics as rows and portfolios as columns.
  21. As a user, I want each cell of the summary table colour-coded best/worst per row so I can scan dominance at a glance.
  22. As a user, I want column headers in the summary table to carry a "Compare" checkbox; checking exactly two surfaces a sticky CTA "Deep-dive: A vs B →" that opens the comparison workbench preloaded with that pair.
  23. As a user, I want the comparison workbench to let me freely pick Portfolio A, Portfolio B, and the comparison vector (Fan chart / Terminal wealth histogram / MWRR over time / Trial drill-down / Range of outcomes / Goal Range) and have the chart auto-render after a brief debounce.
  24. As a user, I want the workbench to support all three layouts — overlay (single canvas, both portfolios coloured differently), side-by-side small multiples, stacked small multiples — so I can pick what reads best for the chart and screen.
  25. As a user, I want responsive behaviour: side-by-side degrades to stacked on viewports under ~900px; overlay stays overlay.
  26. As a user, I want a smart pre-fill on first landing in the workbench (Pair = the two portfolios with the largest delta on Chance of Success; chart = Fan chart) so I'm not configuring three empty selectors.
  27. As a user, I want the per-portfolio results page to show a headline strip on top: a donut visualisation, the giant Chance-of-Success %, a contextual narrative sentence, and a 5-bucket trial breakdown row (Very Comfortably Meet / Comfortably Meet / On Target / Likely Miss / Very Likely Miss) with absolute trial counts.
  28. As a user, I want the bucket counts to be clickable: clicking a bucket highlights the individual paths from that bucket on the main chart at year/quarter granularity AND opens the Trial drill-down tab pre-filtered to that bucket.
  29. As a user, I want a "Clear filter" affordance to restore all trials.
  30. As a user, I want bucket thresholds (150% / 110% / 90% / 50% of target) as smart defaults and configurable in Advanced Settings.
  31. As a user, I want the main chart for an Accumulation goal to be a fan chart with two orthogonal toggles: Smooth / Full and Cross-at-Year / Cross-at-Value.
  32. As a user, I want the main chart for a Withdrawal goal to be a Depletion fan: paths declining from starting corpus, zero-line highlighted, ruined trials coloured red.
  33. As a user, I want a logarithmic Y-axis by default with a linear toggle.
  34. As a user, I want a horizontal target-amount line on Accumulation charts (with the PortfolioCharts-style attached badge) and a zero-line on Withdrawal charts.
  35. As a user, I want secondary visualisations available: Terminal wealth histogram (with vertical bucket-boundary lines) and MWRR fan chart over time.
  36. As a power user, I want a Trial drill-down table (PL-style: sparkline + historical block sequence + terminal value + categorical result) so I can read individual trials.
  37. As a user, I want each component to be buildable as an independent, composable unit so layouts can be tested empirically rather than designed up front.

Goal flavours

  1. As a user, I want exactly two goal flavours: Accumulate to target, and Withdraw from corpus. No "accumulate-then-withdraw" combined flavour.
  2. As a user planning retirement, I want to model it as two linked goals (an Accumulation goal followed by a Withdrawal goal) so each simulation stays within the historical data envelope and the two-phase plan is honest about what the math can support.
  3. As a user, I want a visual "→" connector between two goals on the dashboard when they're chained (an Accumulation goal feeding a Withdrawal goal) with a tooltip explaining the chain.

Saving, versioning, refinement

  1. As a user, I want to save up to 10 portfolios in my Portfolio Library, each with version control, so my work is preserved without unbounded sprawl.
  2. As a user, I want preset portfolios (Boglehead, Permanent, etc.) to NOT count against my 10-portfolio cap, since they're library resources.
  3. As a user, I want each portfolio to support 5–10 versions with FIFO eviction of the oldest version when capacity is exceeded.
  4. As a user, I want a portfolio version to become immutable once it's referenced by a committed Scenario Reference (a goal is tracking against it). Editing forces a new version.
  5. As a user, I want to "delete" a portfolio by archiving it (30-day trash with restore affordance), not destroy it permanently.
  6. As a user, I want to save up to 5 goals.
  7. As a user, I want exploratory simulation runs to be free (not counted against any cap) — only an explicit commit of a scenario to a goal creates a Scenario Reference.
  8. As a user, I want each Scenario Reference Document to be immutable — re-running with edits creates a new vintage.
  9. As a user, I want exactly one vintage of a goal's Scenario Reference to be "active" at any time, switchable by me.
  10. As a user, I want a vertical line marker on the tracking chart at any vintage transition date with a hover note "Plan changed: now using v2."

Fund Selection & Screeners

  1. As a user, I want the Fund Selection & Screeners entity to remain its own independent surface — fund-centric, not goal-centric — so I can browse funds without committing to a goal first.
  2. As a user, I want the screener to expose persistence analysis (Signal + Confidence scoring on rolling 3Y/5Y windows) and regime capture (calm vs stress) for every fund, in line with the existing Persistence Framework spec.
  3. As a user inside the screener, I want a "Save to Goal" affordance on every fund, with a multi-select dropdown of my goals, so I can tag a fund to one or more goals.
  4. As a user, I want the screener and its outputs (Persistence Table, Fund Profile, Comparison, Category Overview) to live behind their existing routes (/screener, /fund/:scheme_code, /compare, /category/:style_label).

Asset Class → Fund Mapping (lives inside Goal)

  1. As a user, once I have both a committed Scenario Reference and tagged funds for a goal, I want to see an Asset Class → Fund Mapping screen inside the goal.
  2. As a user, I want the mapping screen to show every Asset Class slot from my Scenario Reference, with the funds I've tagged in that category listed under it at 0% allocation.
  3. As a user, I want to manually allocate weights across the listed funds (no auto-equal-weighting), so I own the allocation decision — friction by design.
  4. As a user, I want each fund row to show its persistence Signal score from the screener inline (read-only) so I have data to decide.
  5. As a user, I want a running total per slot showing % allocated and % remaining, with red validation if a slot is under or over 100%.
  6. As a user, I want to save the mapping as a draft if it's incomplete, so I don't have to finish it in one sitting.
  7. As a user, I want the mapping to refuse to commit until every slot sums to 100%.
  8. As a user, I want microcopy that explains why we don't auto-allocate: "We don't auto-allocate across funds because the choice depends on your conviction. Allocate based on what you'd actually buy."

Progress and Portfolio Tracking

  1. As a user, I want Tracking to be a separate top-level entity from Goal Scenario Analysis, so planning and checking-in are different mental modes.
  2. As a user, I want manual entry only in V1 — no Plaid, no broker integration. Brokerage links to Zerodha / IndMoney are V2/V3.
  3. As a user, I want to enter a small set of events per fund rather than periodic portfolio values: SIP start, SIP modification, SIP stop, Lumpsum purchase, Redemption, Switch (within AMC), Rebalance (plan-level event).
  4. As a user, I want a SIP defined once (fund, monthly amount, start date, day-of-month, optional end date) to auto-generate one purchase event per month at the prevailing NAV — I should not need to enter monthly check-ins.
  5. As a user, I want to declare a Rebalance event as "as of [date], rebalance to my target weights" and have the engine compute the implied switches without me itemising each leg.
  6. As a user, I want the system to compute my real portfolio value at any date from my event journal × AMFI NAV history, so the value chart updates automatically.
  7. As a user, I want the tracking chart to show a 300-path representative subset of the 4000-trial cone (stratified to preserve the percentile distribution) so the visual stays parseable.
  8. As a user, I want my real portfolio path overlaid as a thick black line on the simulated cone, anchored on the same time axis.
  9. As a user, I want a metrics row above the tracking chart with: current value, % to goal, tracking percentile ("currently tracking near P54 of the original plan"), updated Chance of Success, drift from plan (cumulative contribution gap), closest historical analog ("closest historical match: 1973–1977 sequence").
  10. As a user, I want to toggle between "Original Plan" view (static reference cone, default — answers is my reality normal?) and "From here forward" view (live re-simulation from current state — answers should I change anything now?).
  11. As a user, I want a Match-to-Closest-Trial feature with strong "this is one possible analog, not a forecast" microcopy, so my real path can be paired with the historical sequence it most resembles.
  12. As a user, I want plan-vs-reality drift to be decomposed visually into contribution drift, allocation drift, and market drift so I understand why I'm behind, not just that I'm behind.
  13. As a user, I want target-weight nudges: "You're 6% over target on Mid Cap. Consider rebalancing on next SIP."

Backtesting

  1. As a user, I want a separate Backtester entity at the top level — not nested inside Scenario Analysis or the Screener.
  2. As a user, I want to run a single-portfolio backtest (pick portfolio, weights, start/end, optional contribution schedule) and see realised CAGR, max drawdown, Sharpe, terminal value, vs benchmark.
  3. As a user, I want a SIP backtest mode tuned to the dominant Indian retail use case ("₹X/month SIP in Fund Y from date A to date B").
  4. As a user, I want a multi-portfolio comparison backtest (2–3 portfolios on the same historical path).
  5. As a user, I want a rolling-start backtest (same portfolio, every possible start date for a fixed horizon) — V1 implementation can be monthly-resolution and assume no rebalancing for cheap compute.
  6. As a user, I want a stress-period backtest (pre-defined "2008 crash," "COVID 2020," etc.) — naturally available wherever the fund/index has history.
  7. As a user, I want a single "Index-level / Fund-level" toggle at the top of the Backtester — index-level for the ideal-world comparison, fund-level for the real-world comparison.
  8. As a user, I want the Backtester to read from the shared Portfolio Library so I can backtest any saved portfolio in one click.

Dashboard and cross-entity

  1. As a user, I want a top-level dashboard listing all my goals with status (Plan / Track), per-goal Chance of Success, current value vs plan, and a total-monthly-contribution rollup across goals.
  2. As a user, I want the four entities — Goals, Funds, Tracking, Backtester — as top-level navigation peers.
  3. As a user, I want the Portfolio Library to be a shared resource accessible from Goals, Tracking, and Backtester.

Empty / error / recovery

  1. As a brand-new user with no goals saved, I want a welcome surface with a starter template gallery and a "Create your first goal" CTA so the empty Goals dashboard isn't intimidating.
  2. As a user who has reached the 10-portfolio cap, I want a clear message and a path to archive an existing portfolio before creating a new one.
  3. As a user who has reached the 5-goal or 5-scenario cap, I want a similar clear message and archive path.
  4. As a user who tries to commit a fund mapping with under- or over-allocated slots, I want the commit blocked with red validation messaging on the offending slots.
  5. As a user who tries to edit a portfolio version that's referenced by a committed Scenario, I want a prompt: "This version is committed to [Goal Name]. Editing creates a new version." with options to confirm or cancel.
  6. As a user who deletes a goal, I want its committed scenario vintages archived alongside it (TBD per Open Questions).
  7. As a user who archives a portfolio in the 30-day trash, I want a Restore button visible from Settings → Archived Items.

"I changed my mind" paths

  1. As a user, I want to undo a fund-to-goal tag at any time from the screener (untag) or from the goal (remove).
  2. As a user, I want to switch the active vintage of a goal's Scenario Reference at any time, with the tracking chart re-anchoring to the new active.
  3. As a user, I want to delete an event from my event journal at any time, with the tracking chart recomputing.
  4. As a user, I want to roll back to a previous portfolio version from the version history.

Screens & Surfaces

S1. App Shell / Top Navigation

S2. Goals Dashboard

S3. New Goal — Starter Templates / Flavour Picker

S4. Goal Definition

S5. Scenario Analysis Workspace

S6. Portfolio Editor

S7. Cashflow Editor (Two Variations)

S7-B. Variation B — Rigid Compact

S7-C. Variation C — Timeline Canvas

S8. Glide-Path Editor

S9. Per-Portfolio Results

S10. Comparison Summary Table

S11. Comparison Workbench (Deep-Dive)

S12. Tracking — Goal Detail (Track view)

S13. Event Journal Editor

S14. Asset Class → Fund Mapping

S15. Portfolio Library

S16. Fund Selection & Screener (existing)

S17. Backtester

S18. Settings / Advanced

Key Flows

F1. New User → First Committed Goal

F2. Tag Funds and Map to Goal

F3. Define Events and Begin Tracking

F4. Drift Detected, User Refines Plan

F5. Backtest Before Committing

F6. Cap-Reached Recovery

Interaction Details

Content & Copy

Visual Design Direction

Responsive & Platform Behavior

Accessibility

Out of Scope

Open Questions

Further Notes