4c3c8c6f87
Backend KOL_FEEDS trimmed from 29 to 25 (dead feeds removed).
Sync all hardcoded count mentions:
- layout.tsx JSON-LD, page.tsx (metric + comparison + copy)
- kol/page.tsx, KolPageClient.tsx ("and 26 more" → "and 22 more")
- glossary/page.tsx, opengraph-image.tsx
- public/llms.txt, llms-full.txt
- drop removed KOLs (Dragonfly Capital, Nic Carter) from named lists
Bundles other in-flight frontend work already in the working tree.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
186 lines
5.1 KiB
TypeScript
186 lines
5.1 KiB
TypeScript
export interface TrumpPost {
|
|
id: number
|
|
text: string
|
|
// Was narrowed to 'x' | 'truth' when Trump was the only source. Now any string —
|
|
// external signal modules POST to /api/signals/ingest with arbitrary source tags
|
|
// (e.g. 'breakout', 'vcp_breakout', user's own strategy name).
|
|
source: string
|
|
published_at: string
|
|
sentiment: 'bullish' | 'bearish' | 'neutral'
|
|
signal: 'buy' | 'sell' | 'short' | 'hold' | null
|
|
ai_confidence: number
|
|
ai_reasoning: string | null
|
|
prefilter_reason: 'rt_only' | 'url_only' | 'empty' | 'parse_error' | 'api_error' | null
|
|
analysis_version: string | null
|
|
relevant: boolean
|
|
// v5 routing fields — null on pre-v5 posts
|
|
target_asset: string | null
|
|
category: string | null
|
|
expected_move_pct: number | null
|
|
price_impact: {
|
|
// BUG-14 fix: tracked_asset is now target_asset ?? sentiment_asset, which
|
|
// can be SOL/TRUMP/BNB/etc. — no longer restricted to BTC | ETH.
|
|
asset: string
|
|
m5: number | null // null = window still open (live rolling peak pending)
|
|
m15: number | null
|
|
m1h: number | null
|
|
price_at_post: number
|
|
correct_m5: boolean | null
|
|
correct_m15: boolean | null
|
|
correct_m1h: boolean | null
|
|
} | null
|
|
}
|
|
|
|
export interface Candle {
|
|
time: number
|
|
open: number
|
|
high: number
|
|
low: number
|
|
close: number
|
|
volume: number
|
|
}
|
|
|
|
export interface BotTrade {
|
|
id: number
|
|
// Was narrowed to BTC/ETH; v5 routes trades to arbitrary HL perps (SOL, etc.).
|
|
asset: string
|
|
side: 'long' | 'short'
|
|
entry_price: number
|
|
exit_price: number | null // null = externally closed or position still open
|
|
pnl_usd: number | null // null = unsettled / externally closed
|
|
hold_seconds: number | null // null = not yet computed
|
|
trigger_post_id: number | null // null = adopted/manual (no trigger post)
|
|
opened_at: string
|
|
closed_at: string | null // null for still-open positions
|
|
trigger_post_text?: string | null
|
|
/** Source of the triggering signal — 'truth' | 'breakout' | user's module name. */
|
|
trigger_source?: string | null
|
|
/** True iff this was a paper-mode trade (no Hyperliquid call). */
|
|
is_paper?: boolean
|
|
}
|
|
|
|
export interface BotPerformance {
|
|
period_days: number
|
|
total_trades: number
|
|
win_rate: number
|
|
net_pnl_usd: number
|
|
avg_hold_seconds: number
|
|
max_drawdown_pct: number
|
|
}
|
|
|
|
// ── KOL module ────────────────────────────────────────────────────
|
|
export type KolAction = 'buy' | 'sell' | 'reduce' | 'bullish' | 'bearish' | 'mention'
|
|
|
|
export interface KolTicker {
|
|
ticker: string
|
|
action: KolAction
|
|
conviction: number
|
|
quote: string
|
|
timeframe?: string
|
|
stance_change?: boolean
|
|
}
|
|
|
|
export type KolTier = 'trade_signal' | 'directional' | 'noise'
|
|
export type KolPostType = 'original' | 'reply' | 'retweet' | 'quote' | 'thread_cont'
|
|
|
|
export interface KolPostSummary {
|
|
id: number
|
|
kol_handle: string
|
|
source: 'substack' | 'twitter' | string
|
|
url: string
|
|
title: string | null
|
|
published_at: string
|
|
summary: string | null
|
|
tickers: KolTicker[]
|
|
analyzed_at: string | null
|
|
analysis_model: string | null
|
|
tier?: KolTier | null
|
|
post_type?: KolPostType | null
|
|
talks_vs_trades_flag?: boolean
|
|
sentiment?: 'bullish' | 'bearish' | 'neutral' | null
|
|
}
|
|
|
|
export interface KolPostDetail extends KolPostSummary {
|
|
raw_text: string
|
|
}
|
|
|
|
export interface KolDigestCall {
|
|
post_id: number
|
|
kol_handle: string
|
|
post_title: string | null
|
|
published_at: string
|
|
action: KolAction
|
|
conviction: number
|
|
quote: string
|
|
}
|
|
|
|
export interface KolDigestTicker {
|
|
ticker: string
|
|
dominant_action: KolAction
|
|
side: 'long' | 'short' | 'neutral'
|
|
max_conviction: number
|
|
post_count: number
|
|
kol_count: number
|
|
kols: string[]
|
|
calls: KolDigestCall[]
|
|
}
|
|
|
|
export interface KolDigest {
|
|
window_days: number
|
|
since: string
|
|
post_count: number
|
|
ticker_count: number
|
|
tickers: KolDigestTicker[]
|
|
}
|
|
|
|
// ── KOL A-tier: on-chain holdings ─────────────────────────────────────────
|
|
|
|
export interface KolWallet {
|
|
id: number
|
|
handle: string
|
|
chain: string // ethereum | solana | hl
|
|
address: string
|
|
label: string | null
|
|
source_url: string | null
|
|
active: boolean
|
|
added_at: string
|
|
}
|
|
|
|
export interface KolHolding {
|
|
ticker: string
|
|
amount: number
|
|
usd_value: number
|
|
chain: string
|
|
side?: 'long' | 'short' // HL perps only
|
|
}
|
|
|
|
export interface KolHoldingChange {
|
|
id: number
|
|
wallet_id: number
|
|
handle: string
|
|
detected_at: string
|
|
ticker: string
|
|
change_type: 'new_position' | 'closed' | 'increased' | 'decreased'
|
|
usd_before: number | null
|
|
usd_after: number | null
|
|
pct_change: number | null
|
|
}
|
|
|
|
export interface KolDivergence {
|
|
id: number
|
|
handle: string
|
|
ticker: string
|
|
signal_type: 'divergence' | 'alignment'
|
|
direction: 'long' | 'short'
|
|
post_id: number
|
|
post_action: string // buy | sell | bullish | bearish
|
|
post_conviction: number | null
|
|
post_at: string
|
|
onchain_action: string // new_position | increased | decreased | closed
|
|
usd_before: number | null
|
|
usd_after: number | null
|
|
onchain_at: string
|
|
days_apart: number | null
|
|
created_at: string
|
|
}
|