← Back

Поликопи — Фаза 2: финальный визуальный язык (утверждено 22 Jun 2026)

Источник: итерации v1→v8 (мокапы в redesign/mockup/). Утверждено Rick. Превью: https://kb.szhub.space/poly/v8-all.png

Выбор направления

Раскладка «Stand» (терминальная плотность) + палитра «Olympus» (navy + электрик-зелёный + моноцифры). Основано на анализе реальных UI конкурентов (Olympus, Stand, Poly Syncer) — см. docs/COMPETITOR_ANALYSIS.md.

Дизайн-токены

--bg:   #0c1c22   (фон)
--panel:#0f2730   (карточки)
--bd:   #18404a   (бордер)
--bds:  #163740   (бордер слабый)
--gr:   #22e06a   (акцент / электрик-зелёный)
--grd:  #0d8f55   (тёмный зелёный, градиенты)
--tx:   #eafff4   (текст)
--mu:   #5b8a82   (muted)
--rd:   #ff7a7a   (негатив/убыток)
--bl:   #7fd9ff   (категории)
Шрифт: Inter (UI) + JetBrains Mono (цифры/метрики)
Тёмная — основная.

Решения по данным (Rick, 22 Jun)

  1. Карточка «Лидеры» = ХАЙП, безопасность → внутрь профиля кита.
  2. EDGE-скор — главный сорт-критерий (бейдж на карточке).
  3. ROI-переключатель 30 / 60 / 90 (убрали короткие периоды).
  4. 3 метрики в строке карточки, остальное — в профиль.
  5. Честная цена входа + лаг копии — прячем в профиль кита.
  6. Слоты/лимит копирующих — НЕ вводим пока (нет пользователей; FOMO-крючок добавим позже). 3-я метрика = моментум 📈 7D.

Экраны

① Лидеры (главная)

② Профиль кита (по тапу)

③ Мои сделки — табы Позиции / Подписки / История / P&L

④ Кошелёк (non-custodial)

⑤ Ещё

Статус имплементации (на проде poly-dev.szhub.space)

Сборка: на main-сервере (Node 22) → rsync dist+src на Malaysia. Демон copy-trader-mu НЕ трогается.

История китов 3 мес (Вариант B, по частям) — В РАБОТЕ

Находка: в БД уже ~2.5 мес истории (whale_trades с 7 апр, 124k строк), но cleanup >30д её уничтожал. Диск 100ГБ — место не проблема.

Беклог — финальный статус (после «добивания»)

Архив: план чанка B (data, уточнён после разведки whales.rs)

Находка: whale_trades чистится до 30 дней (whales.rs cleanup_old_trades). trade_history пуст/не используется для китов. НО total_pnl/win_rate уже считаются из whale_trades⋈resolved (update_win_rates). Значит:

✅ 7д-моментум — СДЕЛАНО и на проде (commit фронта 5cb10f3). Колонка whale_wallets.pnl_7d + агрегатор + payload + карточка «📈 7d» (реальные значения, 4784 кита наполнено). Rust-правки задеплоены на Malaysia (server-rust/src/{db,whales,routes}.rs) и staged локально в icbc-watcherpolymarket-screener/_impl/; источник истины — Malaysia. API пересобран (Node 22-сборка не при чём, это cargo на Malaysia), pm2 restart polymarket-screener, демон copy-trader-mu НЕ тронут (restarts=0).

Шаги, как делалось (для повторения):

  1. db.rs: ALTER TABLE whale_wallets ADD COLUMN pnl_7d REAL (идемпотентно).
  2. whales.rs update_win_rates: UPDATE ... SET pnl_7d = (realized BUY pnl на resolved-рынках за -7 дней).
  3. routes.rs top_traders: добавить pnl_7d в SELECT + маппинг "pnl7d".
  4. Фронт: Trader.pnl7d + 3-я метрика карточки = «📈 7д».
  5. Сборка на Malaysia (build ПЕРЕД рестартом — running API цел), затем pm2 restart polymarket-screener, проверить, что демон достучался (логи), copy-trader-mu не трогать.

АУДИТ ЦИФР — баг realized PnL + план фикса (Гибрид #3, одобрено)

Диагноз (read-only): 3013/3520 закрытых copy_positions имеют realized_pnl=0 (свежие 299/300 — баг продолжается). PnL нет и в mark_pnl/pnl. Источник: off-box демон copy-trader-mu пишет позиции без realized PnL. Затрагивает UserAnalytics + «Мои сделки» P&L.

Ключевая находка безопасности: upsert демона (copytrade.rs) делает ON CONFLICT ... SET realized_pnl=excluded.realized_pnl → бэкфилл колонки демон ЗАТРЁТ. ⇒ считать realized на чтении (в SQL запросов), НЕ писать в copy_positions.

Scope: из 3013 нулевых — 1707 на resolved-рынках вычислимы (формула (outcome=winning_outcome ? size : 0) - cost), 1306 ранних выходов (market не resolved) — нельзя без exit-цены → ждут #1 (демон).

План #2 (read-time, безопасно для демона; следующий заход)

  1. Хелпер-выражение eff_realized = CASE WHEN COALESCE(realized_pnl,0)<>0 THEN realized_pnl WHEN m.resolved=1 THEN (CASE WHEN cp.outcome=m.winning_outcome COLLATE NOCASE THEN cp.size ELSE 0 END)-cp.cost ELSE 0 END.
  2. Применить в routes.rs analytics_users: total realized (2398) + per-user realized (2444) — через JOIN screener_markets.
  3. Применить в портфельных эндпоинтах «Мои сделки» P&L/История (usePortfolioStats источник — найти).
  4. Rust билд ДО рестарта → pm2 restart polymarket-screener → проверить демон restarts=0. Колонку НЕ трогаем.

✅ #2 СДЕЛАНО (на проде) — read-time realized в analytics_users

routes.rs analytics_users: total realized (2398) + per-user realized (2444) теперь считают realized для закрытых BUY на resolved-рынках из резолва ((outcome=winning_outcome?size:0)-cost), сохраняя ненулевой realized_pnl. JOIN screener_markets. Колонку НЕ пишем (демон бы затёр). Rust пересобран, рестарт, демон restarts=0.

План #1 (потом): фикс демона copy-trader-mu — считать realized при резолве/закрытии (money-path, с Rick). Также покрыло бы ~1300 ранних выходов (нужна exit-цена, которую знает демон).

📜 Git History

a5476a1fix(analytics): #2 read-time realized PnL in analytics_users (resolved closes)12 days ago
2892b98docs: realized-PnL audit + Hybrid#3 fix plan (read-time compute; daemon clobbers column writes)12 days ago
0963c56feat(whales): chunk3 — history backfill cursor (top-300 by staleness, 25/cycle)12 days ago
0f50b27feat(whales): chunk1+2 — retention 30->100d + deep backfill to 90d (stop losing history)12 days ago
8e57a93docs: backlog final status — sparkline shipped; ROI60/90 + followers blocked (data/users)12 days ago
c1c6b08docs: 7d momentum shipped (chunk B) — pnl_7d live, daemon untouched12 days ago
7e69798docs: chunk B plan — 7d momentum (feasible), 60/90d needs retention/ingest; Rust edits staged12 days ago
bdd9193docs: ROI/momentum backend chunk BLOCKED — trade_history empty (realized_pnl=0, 3 addrs)12 days ago
e249506docs: PHASE2 status — EDGE composite (client-side) done12 days ago
47e4b45docs: PHASE2_DESIGN status — frontend redesign complete, backend chunk B pending12 days ago
Show last diff
Loading...