W11-C3: Indexer outage banner exposes raw VITE_INDEXER_URL value — CEX-migrant traders have no context for what the URL means #174

Closed
opened 2026-05-20 20:25:59 +00:00 by totdking · 8 comments
totdking commented 2026-05-20 20:25:59 +00:00 (Migrated from gitlab.com)
No description provided.
totdking commented 2026-05-20 20:27:54 +00:00 (Migrated from gitlab.com)

Issue Summary

When the indexer becomes unreachable, a yellow warning banner appears that renders the raw value of VITE_INDEXER_URL (http://127.0.0.1:3001) inline in the visible copy. A trader migrating from a CEX has no idea what this URL refers to, what "indexer" means, or whether the address is something they should recognise or act on.


Reproduction Steps

  1. Start the app with LocalTerra running and connect a wallet
  2. Navigate to /trade
  3. In DevTools Network, block requests to 127.0.0.1:3001
  4. Reload or switch pairs
  5. Observe the yellow banner — it reads: "Indexer unavailable at http://127.0.0.1:3001. Chart, tape, order book depth, and most swap/limit ticket features need a reachable indexer…"

Expected Behavior

The banner should not expose an internal URL. Replace the URL with a plain-language service name, e.g.:

"Market data service unavailable. Chart, tape, and order book depth may be limited until the service recovers."

The GitLab #166 note about the limit price fallback can remain but should also use plain language.


Actual Behavior

Raw VITE_INDEXER_URL value is rendered directly in the banner: "Indexer unavailable at http://127.0.0.1:3001." On production this would be an actual domain, which is slightly better, but "indexer" is still jargon with no explanation for non-technical users.


Screenshot(s)


Relevant File

frontend-dapp/src/pages/TradePage.tsx:138


Environment Details

Field Value
OS macOS (Apple M1 Pro, 14-inch)
Browser Google Chrome (desktop)
Viewport ~1440px desktop
Network localterra (local Docker), indexer domain blocked
Frontend VITE_NETWORK=local npm run dev

Wallet / Device Details

  • Wallet: Station browser extension
  • Wallet state: Connected — localterra

Severity / Impact

P3 Nit. No functionality is broken. The banner is informative and the degradation is handled — this is purely a copy quality issue. Showing a raw internal URL undermines trust for non-technical users and CEX migrants. Low-effort fix: swap the URL interpolation for a static service name string. Found under W11-C3 (Contract query failures — Display and Trader use dimensions).

cc: @PlasticDigits

### Issue Summary When the indexer becomes unreachable, a yellow warning banner appears that renders the raw value of `VITE_INDEXER_URL` (`http://127.0.0.1:3001`) inline in the visible copy. A trader migrating from a CEX has no idea what this URL refers to, what "indexer" means, or whether the address is something they should recognise or act on. --- ### Reproduction Steps 1. Start the app with LocalTerra running and connect a wallet 2. Navigate to `/trade` 3. In DevTools Network, block requests to `127.0.0.1:3001` 4. Reload or switch pairs 5. Observe the yellow banner — it reads: _"Indexer unavailable at _[_http://127.0.0.1:3001_](http://127.0.0.1:3001)_. Chart, tape, order book depth, and most swap/limit ticket features need a reachable indexer…"_ --- ### Expected Behavior The banner should not expose an internal URL. Replace the URL with a plain-language service name, e.g.: > _"Market data service unavailable. Chart, tape, and order book depth may be limited until the service recovers."_ The GitLab #166 note about the limit price fallback can remain but should also use plain language. --- ### Actual Behavior Raw `VITE_INDEXER_URL` value is rendered directly in the banner: _"Indexer unavailable at _[_http://127.0.0.1:3001_](http://127.0.0.1:3001)_."_ On production this would be an actual domain, which is slightly better, but "indexer" is still jargon with no explanation for non-technical users. --- ## Screenshot(s) --- ### Relevant File `frontend-dapp/src/pages/TradePage.tsx:138` --- ### Environment Details | Field | Value | |-------|-------| | OS | macOS (Apple M1 Pro, 14-inch) | | Browser | Google Chrome (desktop) | | Viewport | \~1440px desktop | | Network | `localterra` (local Docker), indexer domain blocked | | Frontend | `VITE_NETWORK=local npm run dev` | --- ### Wallet / Device Details - **Wallet:** Station browser extension - **Wallet state:** Connected — localterra --- ### Severity / Impact **P3 Nit.** No functionality is broken. The banner is informative and the degradation is handled — this is purely a copy quality issue. Showing a raw internal URL undermines trust for non-technical users and CEX migrants. Low-effort fix: swap the URL interpolation for a static service name string. Found under **W11-C3** (Contract query failures — Display and Trader use dimensions). cc: @PlasticDigits
PlasticDigits commented 2026-05-21 12:12:07 +00:00 (Migrated from gitlab.com)

mentioned in commit d8751116e1

mentioned in commit d8751116e121157b1bac187210c69565601000b2
PlasticDigits commented 2026-05-21 12:12:14 +00:00 (Migrated from gitlab.com)

Fix landed on main (d875111)

Replaced the /trade indexer-down warning so it no longer renders VITE_INDEXER_URL or hostnames. Retail copy now uses "Market data service unavailable" with plain-language impact and recovery wording; the GitLab #166 limit-price pool fallback note remains in user-friendly language.

Changes

  • frontend-dapp/src/utils/indexerTradeOutageCopy.ts — title/lead/tail constants (single source of truth)
  • frontend-dapp/src/pages/TradePage.tsx — composes constants only; no INDEXER_URL in the banner
  • Unit tests: indexerTradeOutageCopy.test.ts, TradePage.test.tsx
  • Invariants: docs/frontend.md § Trade page — indexer outage banner (GitLab #174 row)
  • Agent skills: skills/AGENTS_FRONTEND_USER_ERRORS.md, skills/AGENTS_FRONTEND_TRADE_PAGE_LAYOUT.md

Verification checklist (please confirm)

  • Start app with LocalTerra + wallet connected; open /trade
  • Block indexer host in DevTools Network (or stop indexer)
  • Reload or switch pairs — yellow banner shows "Market data service unavailable"
  • Banner does not show http://127.0.0.1:3001, VITE_INDEXER_URL, or "Indexer unavailable at …"
  • Banner still mentions chart/tape/order book limitations and #166 pool fallback in plain language
  • Unblock indexer / restart — banner clears when getPair succeeds
  • cd frontend-dapp && npm run test:run -- src/utils/__tests__/indexerTradeOutageCopy.test.ts src/pages/TradePage.test.tsx passes

@totdking — please verify on your M1 / Chrome setup (W11-C3 reproduction). Leaving this issue open until sign-off.

cc @PlasticDigits

## Fix landed on `main` (d875111) Replaced the `/trade` indexer-down warning so it no longer renders `VITE_INDEXER_URL` or hostnames. Retail copy now uses **"Market data service unavailable"** with plain-language impact and recovery wording; the GitLab #166 limit-price pool fallback note remains in user-friendly language. ### Changes - `frontend-dapp/src/utils/indexerTradeOutageCopy.ts` — title/lead/tail constants (single source of truth) - `frontend-dapp/src/pages/TradePage.tsx` — composes constants only; no `INDEXER_URL` in the banner - Unit tests: `indexerTradeOutageCopy.test.ts`, `TradePage.test.tsx` - Invariants: `docs/frontend.md` § Trade page — indexer outage banner (GitLab #174 row) - Agent skills: `skills/AGENTS_FRONTEND_USER_ERRORS.md`, `skills/AGENTS_FRONTEND_TRADE_PAGE_LAYOUT.md` ### Verification checklist (please confirm) - [ ] Start app with LocalTerra + wallet connected; open `/trade` - [ ] Block indexer host in DevTools Network (or stop indexer) - [ ] Reload or switch pairs — yellow banner shows **"Market data service unavailable"** - [ ] Banner does **not** show `http://127.0.0.1:3001`, `VITE_INDEXER_URL`, or "Indexer unavailable at …" - [ ] Banner still mentions chart/tape/order book limitations and #166 pool fallback in plain language - [ ] Unblock indexer / restart — banner clears when `getPair` succeeds - [ ] `cd frontend-dapp && npm run test:run -- src/utils/__tests__/indexerTradeOutageCopy.test.ts src/pages/TradePage.test.tsx` passes @totdking — please verify on your M1 / Chrome setup (W11-C3 reproduction). Leaving this issue **open** until sign-off. cc @PlasticDigits
Brouie commented 2026-05-25 01:58:45 +00:00 (Migrated from gitlab.com)

verified d8751116 on QA stack.

source: copy centralized in frontend-dapp/src/utils/indexerTradeOutageCopy.ts. title is "Market data service unavailable." with no VITE_INDEXER_URL, no 127.0.0.1:3001, no "Indexer unavailable at" string anywhere. lead mentions chart/tape/order book depth/swap-limit ticket impact in plain language. tail cross-links #166 for the pool-reserves fallback.

tests: indexerTradeOutageCopy.test.ts 3/3 PASS + TradePage.test.tsx 10/10 PASS = 13/13 total.

good to close on your side @PlasticDigits

verified `d8751116` on QA stack. source: copy centralized in `frontend-dapp/src/utils/indexerTradeOutageCopy.ts`. title is "Market data service unavailable." with no `VITE_INDEXER_URL`, no `127.0.0.1:3001`, no "Indexer unavailable at" string anywhere. lead mentions chart/tape/order book depth/swap-limit ticket impact in plain language. tail cross-links #166 for the pool-reserves fallback. tests: `indexerTradeOutageCopy.test.ts` 3/3 PASS + `TradePage.test.tsx` 10/10 PASS = 13/13 total. good to close on your side @PlasticDigits
PlasticDigits (Migrated from gitlab.com) closed this issue 2026-05-25 02:06:43 +00:00
PlasticDigits commented 2026-05-29 03:17:54 +00:00 (Migrated from gitlab.com)

mentioned in issue #215

mentioned in issue #215
PlasticDigits commented 2026-05-29 03:17:56 +00:00 (Migrated from gitlab.com)

marked as related to #215

marked as related to #215
PlasticDigits commented 2026-05-29 05:35:41 +00:00 (Migrated from gitlab.com)

mentioned in issue #218

mentioned in issue #218
PlasticDigits commented 2026-08-18 12:08:53 +00:00 (Migrated from gitlab.com)

mentioned in issue #561

mentioned in issue #561
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
code/cl8y-dex-terraclassic#174
No description provided.