Spaces:
Sleeping
Sleeping
| # Frontend Guide | |
| ## File and runtime | |
| The entire Futures dashboard UI is packaged in: | |
| ```text | |
| hermes_overlay/tools/templates/hermes_futures_desk_luxury.html | |
| ``` | |
| The router reads this file at request time from its installed `tools/templates` directory and serves it at `/futures`. Do not add a second frontend server, bundler process, or port. | |
| ## Design system | |
| The UI uses an Obsidian & Gold workstation theme with a light-theme option. Operational values use readable sans-serif/monospace styling. Decorative serif/italic styling is limited to headings and visual accents. | |
| Responsive modes cover desktop, tablet, and mobile. `prefers-reduced-motion` is respected. | |
| ## Main UI regions | |
| - fixed/collapsible navigation and local market lists; | |
| - command deck with symbol, risk, **Optional AI context** switch, Analyze, and Paper Execute controls; | |
| - selected-market header and chart; | |
| - market diagnostics and field provenance; | |
| - decision, score, risk approval, and execution mode; | |
| - trade-plan geometry and execution checklist; | |
| - signal reasons and components; | |
| - Paper account and positions; | |
| - datasource health and technical diagnostics; | |
| - Telegram operational status; | |
| - local activity/history and export actions. | |
| ## API usage | |
| The helper uses: | |
| ```javascript | |
| fetch(url, { | |
| credentials: 'same-origin', | |
| cache: 'no-store' | |
| }) | |
| ``` | |
| Primary calls: | |
| ```text | |
| GET /api/futures/status | |
| GET /api/futures/symbols | |
| GET /api/futures/positions | |
| GET /api/futures/market | |
| GET /api/futures/trade-plan | |
| GET /api/futures/signals | |
| GET /api/futures/advisory | |
| GET /api/futures/activity | |
| POST /api/futures/analyze | |
| POST /api/futures/paper/execute | |
| GET /api/telegram/status | |
| ``` | |
| The V6 page router also lazy-loads dedicated read routes for trade plan, signals, optional AI context (advisory), and server activity. These requests are authenticated, use `cache: 'no-store'`, and never fabricate fallback trading values when a route is empty or unavailable. The trade-plan page renders an **authority contrast** panel (emerald deterministic lane vs violet advisory lane) when data is present. | |
| CSRF bootstrap uses `GET /api/futures/csrf-token` before POST mutations. | |
| ## Refresh behavior | |
| Default intervals: | |
| - clock and age labels: 1 second; | |
| - status and positions: 5 seconds while auto-refresh is enabled and page is visible; | |
| - market data: 15 seconds; | |
| - Telegram status: 60 seconds. | |
| When the page becomes visible again, status and market data refresh if automatic refresh is enabled. | |
| ## Chart behavior | |
| Supported intervals: | |
| ```text | |
| 1m 5m 15m 1h | |
| ``` | |
| Supported candle limits: | |
| ```text | |
| 60 120 240 | |
| ``` | |
| Modes: | |
| - Candles; | |
| - Line; | |
| - optional volume bars. | |
| The chart is an inline SVG and uses only `candles` returned by the market endpoint. Crosshair, OHLCV legend, tooltip, current-price reference, price labels, visible high/low, range position, and last-candle age are derived from the returned series. | |
| No visual interpolation or fallback is permitted to create production candles. | |
| ## Display-only diagnostics | |
| The UI calculates visible trend, average candle range, relative last-candle volume, realized variation, last-candle direction, and range position from the real returned candles. These values are explicitly informational and must never change: | |
| ```text | |
| LONG / SHORT / NO_TRADE | |
| risk approval | |
| noTradeGuard | |
| Entry / SL / TP | |
| leverage | |
| quantity | |
| execution eligibility | |
| ``` | |
| ## Local browser state | |
| The UI stores only convenience preferences/history in `localStorage`. | |
| Known keys: | |
| ```text | |
| hermes_watchlist | |
| hermes_recent_markets | |
| hermes_auto_refresh | |
| hermes_compact | |
| hermes_motion | |
| hermes_glow | |
| hermes_ui_scale | |
| hermes_sidebar_collapsed | |
| ``` | |
| Watchlist, recent markets, local analysis history, and workspace activity use Hermes-prefixed local keys defined in the template. They are not synchronized to the server and are not trusted for execution. | |
| ## Keyboard shortcuts | |
| | Key | Action | | |
| |---|---| | |
| | `/` | Focus and select symbol search. | | |
| | `A` | Run analysis when not already analyzing. | | |
| | `R` | Manual refresh. | | |
| | `D` | Toggle display density. | | |
| | `T` | Toggle theme. | | |
| | `?` | Open shortcut help. | | |
| | `Escape` | Close overlays/help. | | |
| There is deliberately no keyboard shortcut for Paper Execute. | |
| ## Analysis state rendering | |
| Use the server result to set one of: | |
| ```text | |
| NOT_ANALYZED | |
| ANALYZING | |
| LONG | |
| SHORT | |
| NO_TRADE | |
| ANALYSIS_FAILED | |
| STALE | |
| API_UNAVAILABLE | |
| ``` | |
| Important rules: | |
| - initial state is “Waiting for analysis,” not `NO_TRADE`; | |
| - HTTP/network failure is `ANALYSIS_FAILED` or `API_UNAVAILABLE`; | |
| - score is “Unavailable” when components do not exist, not numeric zero; | |
| - expiry is prominent only for a valid directional plan; | |
| - rejected/incomplete analysis is not presented as executable; | |
| - changing symbol or risk invalidates the current browser plan; | |
| - server state remains authoritative. | |
| ## Execute availability | |
| The button is disabled unless the latest browser plan mirrors all required server fields. The UI displays a concrete disabled reason such as: | |
| ```text | |
| Run analysis first | |
| No directional plan | |
| Risk approval failed | |
| noTradeGuard active | |
| Market-only symbol | |
| Plan expired | |
| Symbol changed | |
| Risk profile changed | |
| Plan already executed | |
| Required Futures fields unavailable | |
| ``` | |
| These checks improve UX but do not replace backend revalidation. | |
| ## Adding a UI feature safely | |
| 1. Reuse existing API fields or add an additive backend field. | |
| 2. Render missing values as `Unavailable`, never zero or fabricated content. | |
| 3. Keep browser calculations labeled display-only. | |
| 4. Do not add another Execute path or shortcut. | |
| 5. Invalidate plan display when relevant controls change. | |
| 6. Keep DOM IDs unique and update static ID checks. | |
| 7. Preserve responsive and reduced-motion behavior. | |
| 8. Do not display raw provider errors or secrets. | |
| 9. Verify Console and Network in an authenticated deployed session. | |