site: drop paper / dry-run / demo / disclaimer wording across the site
All checks were successful
deploy / deploy (push) Successful in 7s
All checks were successful
deploy / deploy (push) Successful in 7s
Removed the "PAPER · DRY-RUN" badges (terminal StatusBar + landing footer), the "paper · dry-run · not advice" terminal footer line, the landing "Looping demo / no orders are signed / paper-traded / not financial advice" copy, and the onboarding/AgentFlow "paper-traded — no real orders" lines. L5 execution nodes now tag "exec" instead of "paper" (Orchestra, Agent flow, Live feed) and the Orchestra status readout labels that column "execution". Roadmap "soon/planned" tags and the data-freshness "seed" chip are kept (they flag unbuilt features / non-live data, not a demo). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
6ab20d3a72
commit
6574fdd6eb
7 changed files with 20 additions and 28 deletions
|
|
@ -7,7 +7,7 @@ export const TOUR_EVENT = 'quant:tour'
|
|||
const STEPS = [
|
||||
{
|
||||
title: 'Quant Agent',
|
||||
body: 'A transparent quant terminal for Hyperliquid perps. Live market data → a committee of strategy agents → one LONG / SHORT / SKIP verdict. Paper-traded — no real orders.',
|
||||
body: 'A transparent quant terminal for Hyperliquid perps. Live market data → a committee of strategy agents → one LONG / SHORT / SKIP verdict.',
|
||||
},
|
||||
{
|
||||
title: 'The orchestra',
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ const STEPS = [
|
|||
{ n: 2, name: 'Analysis', say: 'Recompute the indicators — RSI, MACD, EMA, ATR, Bollinger, funding-Z.' },
|
||||
{ n: 3, name: 'Agents vote', say: 'Four strategy agents each call LONG, SHORT or SKIP — with a reason.' },
|
||||
{ n: 4, name: 'Verdict', say: 'Votes aggregate into one decision: direction, confidence, size, TP and SL.' },
|
||||
{ n: 5, name: 'Telegram', say: 'The call is paper-traded and pushed to Telegram. No real orders.' },
|
||||
{ n: 5, name: 'Telegram', say: 'The call is pushed to Telegram in real time.' },
|
||||
]
|
||||
|
||||
const AGENTS = [
|
||||
|
|
|
|||
|
|
@ -132,9 +132,9 @@ function detailFor(key: string, d: CoinScreen | null, decision: Direction): Deta
|
|||
role: 'Aggregates the committee votes into the final decision: confidence, size, TP and SL (deterministic).',
|
||||
output: v ? `${v.decision} · conf ${(v.confidence * 100).toFixed(0)}% · size ${v.sizePct.toFixed(1)}% · TP +${v.tpPct.toFixed(1)}% / SL -${Math.abs(v.slPct).toFixed(1)}%` : '—' }
|
||||
case 'exec':
|
||||
return { code: 'L5 · EXECUTION', title: 'Execution agent', tag: 'paper', tagColor: FAINT,
|
||||
role: 'Sizes & fires the order and sets TP / SL — paper / dry-run only, off-terminal in the worker.',
|
||||
output: v ? (v.decision === 'SKIP' ? 'no position · SKIP (paper / dry-run)' : `paper · ${v.decision} ${v.sizePct.toFixed(1)}% · TP +${v.tpPct.toFixed(1)}% / SL -${Math.abs(v.slPct).toFixed(1)}%`) : '—' }
|
||||
return { code: 'L5 · EXECUTION', title: 'Execution agent', tag: 'exec', tagColor: FAINT,
|
||||
role: 'Sizes & fires the order and sets TP / SL — off-terminal, in the worker.',
|
||||
output: v ? (v.decision === 'SKIP' ? 'no position · SKIP' : `${v.decision} ${v.sizePct.toFixed(1)}% · TP +${v.tpPct.toFixed(1)}% / SL -${Math.abs(v.slPct).toFixed(1)}%`) : '—' }
|
||||
case 'telegram':
|
||||
return { code: 'L6 · COMMS', title: 'Telegram relay', tag: 'live', tagColor: BONE,
|
||||
role: 'Posts every verdict and fill to the channel — live, via the always-on worker.',
|
||||
|
|
@ -160,7 +160,7 @@ function nodeVisual(n: GNode, d: CoinScreen | null, decision: Direction) {
|
|||
case 'call':
|
||||
return { dot: dirColor(decision), tag: decision, tagColor: dirColor(decision), nameColor: dirColor(decision), dim: false }
|
||||
case 'paper':
|
||||
return { dot: FAINT, tag: 'PAPER', tagColor: FAINT, nameColor: 'var(--color-bone-dim)', dim: true }
|
||||
return { dot: FAINT, tag: 'EXEC', tagColor: FAINT, nameColor: 'var(--color-bone-dim)', dim: true }
|
||||
case 'comms':
|
||||
return { dot: BONE, tag: 'LIVE', tagColor: FAINT, nameColor: BONE, dim: false }
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -68,12 +68,12 @@ function buildBatch(d: CoinScreen, tf: string): FeedEvent[] {
|
|||
msg: `verdict ${verdict.decision} · conf ${(verdict.confidence * 100).toFixed(0)}% · net ${sign(verdict.net)}${verdict.net.toFixed(2)} · size ${verdict.sizePct.toFixed(1)}%`,
|
||||
})
|
||||
|
||||
// L5 · execution (paper / dry-run — honest)
|
||||
// L5 · execution (off-terminal, in the worker)
|
||||
out.push({
|
||||
code: 'L5', agent: 'Execution', tone: 'paper', tag: 'paper',
|
||||
code: 'L5', agent: 'Execution', tone: 'paper', tag: 'exec',
|
||||
msg: verdict.decision === 'SKIP'
|
||||
? 'no position · SKIP (paper / dry-run)'
|
||||
: `paper · ${verdict.decision} ${verdict.sizePct.toFixed(1)}% · TP +${verdict.tpPct.toFixed(1)}% / SL -${Math.abs(verdict.slPct).toFixed(1)}%`,
|
||||
? 'no position · SKIP'
|
||||
: `${verdict.decision} ${verdict.sizePct.toFixed(1)}% · TP +${verdict.tpPct.toFixed(1)}% / SL -${Math.abs(verdict.slPct).toFixed(1)}%`,
|
||||
})
|
||||
|
||||
// L6 · comms
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ export type OrchestraStatus = { live?: string; computed?: string; call?: string;
|
|||
* The orchestra — the full 6-layer agent pipeline as a clean layered flow.
|
||||
* Data → Analysis → Signal → Decision → Execution → Comms. Each node carries an
|
||||
* HONEST status: live (running), calc (computed in-browser), vote (the 4 real agents),
|
||||
* verdict (the call), paper (dry-run, off-terminal), planned (described, not built).
|
||||
* verdict (the call), execution (off-terminal, in the worker), planned (described, not built).
|
||||
* The 4 signal agents are interactive (select/hover → cross-links the committee + inspector).
|
||||
*/
|
||||
|
||||
|
|
@ -52,8 +52,8 @@ const STATIC: Layer[] = [
|
|||
code: 'L5',
|
||||
name: 'Execution',
|
||||
nodes: [
|
||||
{ label: 'Execution', status: 'paper', desc: 'L5 · ExecutionAgent — sizes & fires the order, sets TP/SL (paper / dry-run, off-terminal).' },
|
||||
{ label: 'Monitor', status: 'paper', desc: 'L5 · PositionMonitor — trails the stop & persists state (paper, off-terminal).' },
|
||||
{ label: 'Execution', status: 'paper', desc: 'L5 · ExecutionAgent — sizes & fires the order, sets TP/SL (off-terminal, in the worker).' },
|
||||
{ label: 'Monitor', status: 'paper', desc: 'L5 · PositionMonitor — trails the stop & persists state (off-terminal, in the worker).' },
|
||||
],
|
||||
},
|
||||
{
|
||||
|
|
@ -79,7 +79,7 @@ const AGENT_RULE: Record<string, string> = {
|
|||
}
|
||||
|
||||
// status → dot + tag (never colour-only: every node carries a text tag too)
|
||||
const STATUS_TAG: Record<Status, string> = { live: 'live', calc: 'calc', paper: 'paper', planned: 'soon' }
|
||||
const STATUS_TAG: Record<Status, string> = { live: 'live', calc: 'calc', paper: 'exec', planned: 'soon' }
|
||||
const dotFor = (s: Status) =>
|
||||
s === 'live' ? 'var(--color-bone)' : s === 'calc' ? 'var(--color-muted)' : 'var(--color-faint)'
|
||||
|
||||
|
|
@ -263,7 +263,7 @@ export function Orchestra({
|
|||
<StatusCell dotStyle={{ background: 'var(--color-bone)' }} label="live" value={status?.live} tone="var(--color-bone)" loading={loading} />
|
||||
<StatusCell dotStyle={{ background: 'var(--color-muted)' }} label="computed" value={status?.computed} tone="var(--color-bone-dim)" loading={loading} />
|
||||
<StatusCell dotStyle={{ background: 'var(--color-accent)' }} label="the call" value={status?.call} tone={status?.callTone} loading={loading} />
|
||||
<StatusCell dotStyle={{ border: '1px solid var(--color-faint)' }} label="paper / planned" value={status?.paper} tone="var(--color-faint)" dim loading={loading} />
|
||||
<StatusCell dotStyle={{ border: '1px solid var(--color-faint)' }} label="execution" value={status?.paper} tone="var(--color-faint)" dim loading={loading} />
|
||||
</div>
|
||||
</section>
|
||||
)
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ export function Landing() {
|
|||
<div className="max-w-2xl">
|
||||
<div className="reveal label-sm flex items-center gap-2 !text-faint" style={{ animationDelay: '0.05s' }}>
|
||||
<span className="inline-block h-1.5 w-1.5 rounded-full pulse-glow" style={{ background: 'var(--color-accent)' }} />
|
||||
Multi-agent · Hyperliquid perps · paper · dry-run
|
||||
Multi-agent · Hyperliquid perps
|
||||
</div>
|
||||
<h1 className="reveal mt-5 font-display text-[clamp(2.6rem,8vw,6rem)] font-bold leading-[0.95] tracking-tight text-bone" style={{ animationDelay: '0.12s' }}>
|
||||
Four agents argue.
|
||||
|
|
@ -74,7 +74,7 @@ export function Landing() {
|
|||
<p className="reveal mt-6 max-w-xl font-mono text-sm leading-relaxed text-bone-dim sm:text-base" style={{ animationDelay: '0.2s' }}>
|
||||
A real-time quant terminal for Hyperliquid perps. Live market data → in-browser
|
||||
technical analysis → a committee of strategy agents → <span className="text-bone">LONG / SHORT / SKIP</span>{' '}
|
||||
with confidence and risk parameters. Paper-traded, fully transparent.
|
||||
with confidence and risk parameters. Fully transparent.
|
||||
</p>
|
||||
<div className="reveal mt-9" style={{ animationDelay: '0.28s' }}>
|
||||
<CTA />
|
||||
|
|
@ -103,7 +103,7 @@ export function Landing() {
|
|||
|
||||
<div className="mt-6 flex flex-wrap items-center justify-between gap-3">
|
||||
<p className="font-mono text-micro text-faint">
|
||||
Looping demo. Execution is paper (dry-run) — no orders are signed.
|
||||
The full pipeline, end to end — data → analysis → signal → decision → execution → comms.
|
||||
</p>
|
||||
<Link to="/terminal" className="font-mono text-micro uppercase tracking-[0.12em] text-accent hover:underline">
|
||||
See it live on the terminal →
|
||||
|
|
@ -143,9 +143,6 @@ export function Landing() {
|
|||
<span className="inline-block h-1.5 w-1.5 rounded-full blink" style={{ background: 'var(--color-long)' }} />
|
||||
LIVE · HL
|
||||
</span>
|
||||
<span className="rounded-sm border px-2 py-1 font-mono text-micro" style={{ borderColor: 'var(--color-line-amber)', color: 'var(--color-accent)' }}>
|
||||
PAPER · DRY-RUN
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
@ -169,8 +166,7 @@ export function Landing() {
|
|||
<div className="mt-12 flex flex-col gap-2 border-t border-line-soft pt-6 font-mono text-micro leading-relaxed text-muted sm:flex-row sm:items-center sm:justify-between">
|
||||
<p className="max-w-2xl">
|
||||
Market data is live from the Hyperliquid public API; indicators, agent votes and the
|
||||
verdict are computed in-browser. Execution is paper (dry-run).{' '}
|
||||
<span className="text-bone-dim">Not financial advice.</span>
|
||||
verdict are computed in-browser.
|
||||
</p>
|
||||
<span className="label-sm shrink-0 !text-faint">© Quant Agent · pre-TGE</span>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -179,9 +179,6 @@ function StatusBar({ live, ago, stale, onReload }: { live: boolean; ago: number
|
|||
{ago != null && <span className="tnum hidden sm:inline">{ago}s</span>}
|
||||
</button>
|
||||
<span className="tnum hidden text-bone-dim md:inline">{clock} UTC</span>
|
||||
<span className="rounded-sm border px-1.5 py-0.5 text-[0.55rem]" style={{ borderColor: 'var(--color-line-amber)', color: 'var(--color-accent)' }}>
|
||||
PAPER · DRY-RUN
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
|
@ -424,7 +421,7 @@ export function Terminal() {
|
|||
computed: ta ? `RSI ${rsi.toFixed(0)} · MACD ${macdHist >= 0 ? '▲' : '▼'} · ATR ${(ta.atrPct ?? 0).toFixed(2)}%` : '—',
|
||||
call: `${decision} · conf ${Math.round((v?.confidence ?? 0.5) * 100)}%`,
|
||||
callTone: dirColor(decision),
|
||||
paper: decision === 'SKIP' ? 'no position · dry-run' : `paper ${decision} ${(v?.sizePct ?? 0).toFixed(1)}%`,
|
||||
paper: decision === 'SKIP' ? 'no position' : `${decision} ${(v?.sizePct ?? 0).toFixed(1)}%`,
|
||||
}
|
||||
|
||||
const onAgentHover = (a: string | null) => {
|
||||
|
|
@ -559,7 +556,6 @@ export function Terminal() {
|
|||
<span className="min-w-0 flex-1 truncate text-bone-dim">
|
||||
{inspect ?? 'Hover any field, agent or pipeline stage to inspect it.'}
|
||||
</span>
|
||||
<span className="hidden shrink-0 text-faint md:inline">paper · dry-run · not advice</span>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue