ui: tighten dashboard copy and fix layout issues

This commit is contained in:
k
2026-06-14 21:58:56 +08:00
parent 4c3c8c6f87
commit 8534d90589
19 changed files with 1036 additions and 345 deletions
+46 -3
View File
@@ -93,7 +93,10 @@ components/
│ └── SystemControl.tsx Sys1/sys2 toggle widgets, Auto-Trade switch
├── dashboard/
│ ├── PostCards.tsx Trump post cards
│ ├── SignalMonitor.tsx Live signal stream (WS-driven)
│ ├── SignalMonitor.tsx Breakout Monitor (ETH/LINK 5m, WS-driven).
│ │ UNMOUNTED 2026-06-12 — backend scanner is
│ │ disabled and its 5-min poll job unscheduled.
│ │ Kept for revival; see Open known issues.
│ └── ChartPanel.tsx Price chart panel
├── btc/MacroPanel.tsx ★ 8-indicator Macro Vibes layout (4 sections,
│ composite needle, threshold chips, peak-trail viz)
@@ -259,13 +262,53 @@ Tokens in `app/[locale]/globals.css`:
- ~~**L5 ws:// mixed-content block** (FIXED 2026-06-01):~~ `wsContext.tsx` now
auto-upgrades to `wss://` when served over HTTPS, instead of hard-coding `ws://`.
- ~~**Data-consistency / UI sweep** (FIXED 2026-06-09):~~
- **Overview headline counts** (`DashboardClient`) now come from server-side
`/posts-paged` totals (`getPostsPage(1,1,...)` for global / truth / macro),
not the 80-post first-paint slice. The local slice is only a pre-load
fallback. Without this a 1108-post feed showed "80 tracked / —".
- **"Live" chip downgrades to "Delayed"** when `/api/health/deep` reports
`is_leader === false` (follower process runs no background tasks → data is
frozen). Keyed ONLY on is_leader, not `status:degraded`, to avoid flapping
on transient single-feed staleness.
- **KOL pages default to a 30d window** (was 7d) everywhere — `kol/page.tsx`
SSR, `KolPageClient` `kolDays`, and the Overview KOL-intel card. KOL
ingestion is daily/sparse so 7d was frequently empty (7d=0 / 30d=196).
- **KOL divergence "Xd ago"** uses `post_at`, not `created_at` (a backfill
set created_at≈now and made old events look fresh).
- **Macro tone** is derived from the backend `regime_label`, not a
re-thresholded score (±15 on the client vs ±20 on the server disagreed).
- **Trump page header count** follows the active signal filter.
- **Source labels**: `blog` (KOL), `sma_reclaim`/`rsi_reversal`/`breakout`
(TradeTable + PostCards), `adopted` (TradeTable) registered — no more raw
technical strings.
- **TradeTable** resets source/asset filters that don't apply to the new
wallet's trade set (clamp effect), so a stuck filter + vanished breakdown
card can't hide the new history.
- **OpenPositions** has an in-page "Unlock positions" button (signs
`view_user`) — no forced detour to Settings.
- **BotConfigPanel**: overnight schedules (22:0002:00) are allowed (backend
already supports wrap-around); readiness reports NOT-ready for a Macro-only
wallet with no Telegram bound (since `/adopt` needs Telegram).
- **Cross-page selection**: clicking a Recent-signals row clears
`selectedDayPosts` so the single-post detail actually shows.
**Open / deferred (need interface change or DB migration):**
- **C3** Signed READ endpoints (`allow_replay=True`) put `ts`/`sig` in URL → access logs. Fix requires changing read endpoints to POST body (interface change + frontend update).
- **H4** KEK derived with single SHA-256, no salt/KDF. Fix requires re-encrypting all HL API keys (DB migration).
- **M1** Adopted (sys2) positions incorrectly counted against sys1 daily budget.
- **M5** `GET /telegram/{wallet}/status` is unauthenticated — exposes `chat_id`/`tg_username`.
- **M7** Rate limit bypassable via spoofed XFF — infrastructure-level fix (nginx/Cloudflare).
- **M9** SWR cache only notifies the first caller on background refresh — others get stale data.
- ~~**M9**~~ **FIXED 2026-06-12**: `lib/cache.ts` keeps a per-key `subscribers`
list — every caller that hits a stale key during an in-flight revalidation
registers its `onUpdate`, and ALL are notified when the fetch resolves
(previously only the caller that started the revalidation got fresh data).
- ~~**Funding Reversal tab Breakout Monitor**~~ **RESOLVED 2026-06-12 (removed)**:
`SignalMonitor` unmounted from the Funding tab — the backend scanner has been
disabled for months (`funding_signal._enabled=False`, operator-only toggle) so
the panel only ever showed "Paused / No signals yet". The backend's 5-min poll
job was also unscheduled (`backend/app/main.py`); the `/signal/*` API routes
remain. To revive: re-add the `add_job()` AND remount `SignalMonitor` in
`MacroVibesPageClient`.
## How to verify changes locally