End-to-end setup: get the widget running locally, connect it to Rally, and deploy it as a Custom View.
- Node.js 18+ and npm
- A Rally workspace and project you can access
- A Rally API key (instructions below)
- Sign in to Rally.
- Open the API key page: https://rally1.rallydev.com/#/api_key (or click your avatar → API Keys).
- Click Create, give the key a name (e.g.
widget-dev), pick the workspaces it can access, and copy the full key. It starts with_and is ~43 chars long. - Treat it like a password — don't paste it into anything that gets committed.
The Vite dev server proxies /slm/* (WSAPI) and /analytics/* (Lookback API) to Rally. It needs a server URL and API key.
Create auth.json in the timebox-dashboard/ folder:
{
"server": "https://rally1.rallydev.com",
"apiKey": "_your_api_key_here"
}auth.json is gitignored by default — your key never gets committed.
export RALLY_SERVER=https://rally1.rallydev.com
export RALLY_API_KEY=_your_api_key_hereOr create a .env.local file (also gitignored):
RALLY_SERVER=https://rally1.rallydev.com
RALLY_API_KEY=_your_api_key_hereRestart npm run dev after changing either source.
cd examples/timebox-dashboard
npm install
npm run devOpen http://localhost:5173.
By default the widget runs in mock mode — no Rally connection needed. You see a realistic mid-iteration health scenario (60% accepted, At-Risk status, all four charts populated).
To use live Rally data, visit http://localhost:5173?live=true. The widget fetches the current iteration from the Rally project context and loads real data.
The status badge classifies the iteration as:
- Good (✓ green) — accepted work is on pace with elapsed time
- At Risk (⚠ blue) — acceptance is lagging, or open defects exist
- Critical (✕ red) — acceptance is significantly behind
The progress bar shows % accepted (filled) against % elapsed (vertical blue marker). These two metrics together tell you whether the team is keeping up.
Counts all work items (stories, defects, defect suites) in the timebox by their Schedule State: Defined, In-Progress, Completed, Accepted.
Counts defects in Submitted / Open / Fixed / Closed states. Includes both:
- Defects directly scheduled in the timebox (Iteration or Release field set)
- Defects linked to stories scheduled in the timebox (per Broadcom spec)
Counts test cases associated with timebox stories by their LastVerdict field: Pass, Fail, Error, Blocked, Inconclusive.
Plots remaining plan estimate per day (blue line) against an ideal burndown trend (gray dashed line). Data comes from the Rally Lookback API. Future days show null actuals (gap in the line). If Lookback is unavailable, the chart renders the ideal line only.
In Rally, click Edit on the Custom View to open Settings:
| Setting | Description |
|---|---|
| Timebox Type | Iteration (default) or Release |
| Hide Defect Charts | Suppress the Defect State chart |
| Hide Test Case Charts | Suppress the Test Case Last Verdict chart |
npm run build # live Rally data
npm run build:mock # mock data baked in (no Rally dependency at runtime)Both commands output dist/app.js.
- In Rally, open a Custom Page or any page that supports Custom Views.
- Add a Custom HTML widget.
- Paste the contents of
dist/app.jsinto the widget's HTML editor. - Save. The widget loads immediately.
The Timebox Dashboard reads the iteration or release from Rally's View Filter. For the widget to show data:
- Set a View Filter to the Iteration or Release you want to track.
- The widget automatically picks up the selected timebox.
If no timebox is selected, the widget shows a "no iteration found" message.
Widget shows "Loading dashboard…" indefinitely
- Check the browser console for network errors.
- Verify your
auth.jsonhas the correct server URL and API key. - Confirm the Rally API key has access to the workspace.
Burndown chart is empty / shows only ideal line
- The Lookback API may not be enabled for your subscription.
- Check the browser console for "Lookback HTTP" errors.
Status shows "No Iteration Selected"
- Set a View Filter in Rally (Iteration or Release context).
- In dev mode, the mock context always has an iteration set, so this only appears in live mode without a view filter.
Typecheck failures
cd examples/timebox-dashboard
npx tsc --noEmitIf you see errors about missing @customagile/widget-ai types, run npm install first.