site: drop paper / dry-run / demo / disclaimer wording across the site
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:
zefiroff 2026-06-09 19:45:22 +04:00
parent 6ab20d3a72
commit 6574fdd6eb
7 changed files with 20 additions and 28 deletions

View file

@ -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',

View file

@ -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 = [

View file

@ -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:

View file

@ -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

View file

@ -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>
)

View file

@ -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>

View file

@ -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>