diff --git a/app/[locale]/DashboardClient.tsx b/app/[locale]/DashboardClient.tsx index 0a638cd..144bdfb 100644 --- a/app/[locale]/DashboardClient.tsx +++ b/app/[locale]/DashboardClient.tsx @@ -303,9 +303,9 @@ export default function DashboardClient({ initialPosts }: Props) {

{isZh ? '信号总览' : 'Signal monitor'}

- All four signal pipelines in one place — Trump posts, BTC macro - bottom, funding-rate extremes, and KOL talks-vs-trades — alongside - your auto-trader's live state. + Four signals that move crypto before the crowd sees them — Trump + posts, BTC macro bottoms, funding extremes, and what KOLs do vs + say. Tracked live, in public, every call timestamped.
diff --git a/app/[locale]/analytics/AnalyticsPageClient.tsx b/app/[locale]/analytics/AnalyticsPageClient.tsx index 821d5ac..c587cfa 100644 --- a/app/[locale]/analytics/AnalyticsPageClient.tsx +++ b/app/[locale]/analytics/AnalyticsPageClient.tsx @@ -1,6 +1,6 @@ 'use client' -import { useState, useEffect, useRef } from 'react' +import { useState, useEffect, useRef, useMemo } from 'react' import { useLocale } from 'next-intl' import { useAccount, useSignMessage } from 'wagmi' import { getTrades, getSignalAccuracy } from '@/lib/api' @@ -67,6 +67,7 @@ export default function AnalyticsPageClient() { const [trades, setTrades] = useState([]) const [accuracy, setAccuracy] = useState(null) const [period, setPeriod] = useState('30d') + const [tradeMode, setTradeMode] = useState<'live' | 'paper'>('live') const [privateLocked, setPrivateLocked] = useState(false) const [unlocking, setUnlocking] = useState(false) const [unlockErr, setUnlockErr] = useState('') @@ -131,7 +132,21 @@ export default function AnalyticsPageClient() { } } - const filteredTrades = trades.filter((trade) => inPeriod(trade.closed_at, period)) + // CRITICAL: never mix paper (simulated) and live (real-money) P&L into one + // number. is_paper comes from the backend (hl_order_id == "paper"). Default + // to LIVE — this page is the "did the bot make REAL money" view. A Paper/Live + // toggle appears only when the wallet has both kinds of trades; otherwise we + // auto-pick whichever set exists so a paper-only user still sees their data + // (clearly labelled SIMULATED). + const liveTrades = useMemo(() => trades.filter(t => !t.is_paper), [trades]) + const paperTrades = useMemo(() => trades.filter(t => !!t.is_paper), [trades]) + const hasBoth = liveTrades.length > 0 && paperTrades.length > 0 + const effectiveMode: 'live' | 'paper' = + hasBoth ? tradeMode : (liveTrades.length > 0 ? 'live' : (paperTrades.length > 0 ? 'paper' : 'live')) + const modeTrades = effectiveMode === 'paper' ? paperTrades : liveTrades + const isPaperView = effectiveMode === 'paper' + + const filteredTrades = modeTrades.filter((trade) => inPeriod(trade.closed_at, period)) const pricedTrades = filteredTrades.filter( (t) => t.pnl_usd !== null && t.pnl_usd !== undefined, ) @@ -172,13 +187,38 @@ export default function AnalyticsPageClient() { and AI signal accuracy across the time window you pick on the right.
-
- {(['7d', '30d', '90d', 'All'] as const).map(p => ( - - ))} +
+ {hasBoth && ( +
+ {(['live', 'paper'] as const).map(m => ( + + ))} +
+ )} +
+ {(['7d', '30d', '90d', 'All'] as const).map(p => ( + + ))} +
+ {isPaperView && filteredTrades.length > 0 && ( +
+ 📝 Showing SIMULATED (paper) performance — these are not real-money results. + {hasBoth && ' Switch to 💰 Live above for actual P&L.'} +
+ )} + {privateLocked && (
Private performance is locked.
diff --git a/app/[locale]/layout.tsx b/app/[locale]/layout.tsx index 951748e..182897b 100644 --- a/app/[locale]/layout.tsx +++ b/app/[locale]/layout.tsx @@ -58,7 +58,7 @@ export default async function LocaleLayout({ children, params }: LayoutProps) { color: 'var(--ink-3)', marginTop: 48, }}> - © {new Date().getFullYear()} Trump Alpha + © {new Date().getFullYear()} Trump Alpha — a research project by Endorphin {t('methodology')} {t('glossary')} {t('caseStudies')} diff --git a/app/[locale]/methodology/page.tsx b/app/[locale]/methodology/page.tsx index eac9302..0766920 100644 --- a/app/[locale]/methodology/page.tsx +++ b/app/[locale]/methodology/page.tsx @@ -223,7 +223,7 @@ SHORT_INTENT + SHORT_ACTION => ALIGNMENT`, heroTitle: 'Signal Methodology', heroSubtitle: 'How each engine works, from raw input to trading decision', intro: - 'Trump Alpha is not one monolithic strategy. It is a stack of six independent engines, each with its own data source, trigger logic, and failure mode. This page documents the live production logic rather than a simplified marketing summary.', + 'Endorphin runs Trump Alpha as a research project, not a marketing funnel. It is not one monolithic strategy — it is a stack of six independent engines, each with its own data source, trigger logic, and failure mode. This page documents the live production logic, not a simplified pitch.', sections: [ { tag: 'Signal 1 · Real-time event', diff --git a/app/[locale]/page.tsx b/app/[locale]/page.tsx index ec787af..2be1fb7 100644 --- a/app/[locale]/page.tsx +++ b/app/[locale]/page.tsx @@ -15,11 +15,11 @@ export async function generateMetadata({ params }: OverviewPageProps): Promise AI-powered crypto intelligence platform. Four uncorrelated signal sources: Trump Truth Social sentiment, Macro Vibes (crypto macro regime dashboard), KOL Substack/podcast signals, and talks-vs-trades on-chain divergence. +> A crypto research project by Endorphin, a research desk. Tracks four uncorrelated signals that move markets before consensus catches up: Trump Truth Social sentiment, Macro Vibes (crypto macro regime dashboard), KOL Substack/podcast signals, and talks-vs-trades on-chain divergence. Every signal is public and timestamped. ## What this site does -Trump Alpha aggregates four signal engines and one macro context view into one live dashboard. All four dashboards are free to read — no account required. +Trump Alpha is Endorphin's public signal desk: four independent signal engines and one macro context view in one live dashboard. All four dashboards are free to read — no account required, every call timestamped. 1. **Trump Truth Social Signal** — Scrapes Trump's Truth Social posts within 15 seconds of publish. AI classifies each post as LONG (bullish crypto), SHORT (bearish), or NOISE (off-topic) with a confidence score 0–100. Only posts scoring ≥ 88 confidence trigger the optional auto-trader. The entire pipeline from post to classification runs in under 3 seconds. Optional: auto-execute on Hyperliquid with isolated margin, automatic TP/SL, and six user-defined safety limits (leverage cap, position size, daily budget, active-hours window, confidence floor, stop-loss floor).