Unified shell for auth and operations.
One route model, one visual language, and one explicit session state. This screen starts with browser authentication, then hands off into the same shell for portfolio, strategies, data, backtest, paper trading, and live trading.
Authenticate the browser.
Read-only access should be obvious, admin access should be deliberate, and the browser must never confuse a locked session with a live one.
Legacy routes are still reachable, but they redirect into this shell after auth.
The session did not unlock.
The browser should say what failed without exposing secrets. Keep the message short, safe, and recoverable. This state is for bad credentials, missing session material, or a denied access level.
Could not verify the session.
The browser could not confirm the supplied credentials. Try again or switch to a saved session if one exists for this device.
The browser session expired.
Expired should feel distinct from failed. The browser is still intact, but the session state needs to be refreshed before protected routes can be shown again.
Session refresh required.
Sign in again or clear local auth state to continue. The product should make it clear that the browser is locked, not broken.
The dashboard shell is present.
Avoid a blank page. The summary grid, section chrome, and the positions surface should load before live data arrives so the browser never looks dead.
Open positions
Operational rows with enough spacing to scan quickly.
Two positions shown. Rows can expand for extra detail.
| Symbol | Entry Price | Current Price | Amount | Unrealized PnL | Opened At |
|---|---|---|---|---|---|
| 145.20 | 148.10 | 12.500000 | +36.25 USDC | 2026-06-14 17:52:10 UTC | |
|
Stop context
Managed by strategy, not the UI.
Marking
Unrealized gain / +2.00%
Condition
Held through a trend continuation window.
Opened by
SolTrend / production
|
|||||
| 1.0180 | 0.9940 | 1,120.000000 | -26.88 USDC | 2026-06-14 18:05:33 UTC | |
|
Stop context
Managed by strategy, not the UI.
Marking
Unrealized loss / -2.36%
Condition
Retracement after momentum break.
Opened by
SolTrend / production
|
|||||
Lifecycle table
Promote / retire / view YAML, with access-sensitive controls.
Read access keeps the action cluster visible but disabled.
| Strategy Name | Lifecycle Stage | Allocation Weight | Created At | Actions |
|---|---|---|---|---|
| SolTrend | production | 0.60 | 2026-06-14 |
|
| MeanRevert | staging | 2026-06-15 |
|
|
| BreakoutShadow | shadow | 2026-06-17 |
|
|
| MeanRevert Legacy | retired | 0.00 | 2026-05-28 |
|
Access-sensitive actions
Visible, readable, but not misleading when the browser is in read access.
Inline editing is present, but access decides whether it is live.
The weight field stays visible so the layout still communicates the edit point, yet the browser can clearly show that the action is disabled until admin access is granted.
Coverage & download
Operational data panel with explicit download state.
Coverage is visible before the data starts moving.
The page should communicate whether the pool is healthy, partially covered, or delayed. Download controls stay visible, but they are not trade actions.
Backtest history
Minimal, readable, and operational.
| Job | Status | ROI | Win Rate | History |
|---|---|---|---|---|
| SolTrend June sweep | running | +12.3% | 61.5% | 2026-06-14 18:30 |
| Mean reversion profile | completed | +8.4% | 58.1% | 2026-06-13 16:10 |
| Momentum filter test | failed | -1.2% | 42.0% | 2026-06-11 11:22 |
Simulation should feel like the live shell, just without real funds.
Keep the running, stopped, starting, and error states explicit. The shell must feel like one product, not a separate demo tool.
REAL FUNDS are always visible in the layout.
This screen should warn, not embellish. The banner stays on the page, the session state is explicit, and live values update without implying execution controls in the UI.
Portfolio data will appear after a strategy is activated. Keep this state calm and clear so users know the shell is working even when no portfolio snapshot is available.
The summary metrics remain visible, but the positions section explains that the portfolio is flat. Keep the state present and data-first instead of hiding the section.
We could not load the latest snapshot.
The browser should expose a short, safe error message and a visible retry action. Do not add stack traces, secrets, or operational detail that could confuse a read-only session.
The browser should move immediately from the old split-surface URLs into the unified shell. Keep the routing path understandable, explicit, and short-lived.