import Link from "next/link"; import type { CSSProperties, ReactNode } from "react"; type MockVariant = "mock1" | "mock2" | "mock3" | "mock4"; type DashboardMockProps = { variant: MockVariant; }; type Concept = { title: string; shortName: string; premise: string; bestFor: string; layout: string; }; const concepts: Record = { mock1: { title: "Evidence Canvas", shortName: "Canvas", premise: "A selected anomaly becomes the organizing object. Price, options, prints, news, and replay evidence attach around one decision path.", bestFor: "single-symbol investigation", layout: "canvas" }, mock2: { title: "Anomaly Queue", shortName: "Queue", premise: "The terminal behaves like an alert operations room: ranked work enters from the left, evidence resolves in the center, and confidence checks stay pinned.", bestFor: "live triage under volume", layout: "queue" }, mock3: { title: "Replay Room", shortName: "Replay", premise: "Historical sessions become inspectable rooms. The time spine leads, with every event and chart panel synchronized to the replay cursor.", bestFor: "after-action review", layout: "replay" }, mock4: { title: "Market Atlas", shortName: "Atlas", premise: "Symbols are mapped as related territories. Sector pressure, cross-asset flow, and event clusters reveal where attention is concentrating.", bestFor: "cross-market scanning", layout: "atlas" } }; const variantOrder: MockVariant[] = ["mock1", "mock2", "mock3", "mock4"]; const symbols = [ { symbol: "AAPL", price: "194.88", move: "+1.22%", direction: "up", score: 94, sector: "Mega cap tech" }, { symbol: "NVDA", price: "120.19", move: "-0.41%", direction: "down", score: 81, sector: "AI semis" }, { symbol: "TSLA", price: "180.72", move: "+0.72%", direction: "up", score: 76, sector: "EV complex" }, { symbol: "AMZN", price: "186.31", move: "+0.35%", direction: "up", score: 68, sector: "Consumer platform" }, { symbol: "IWM", price: "205.41", move: "+0.21%", direction: "up", score: 59, sector: "Small caps" } ]; const anomalies = [ { time: "09:41:10", symbol: "AAPL", title: "Dark sweep aligns with call pressure", value: "$4.32M", confidence: "High", direction: "Bullish", cause: "off-exchange prints led the options burst by 72s" }, { time: "09:40:58", symbol: "NVDA", title: "Call wall absorbed at 120", value: "$2.01M", confidence: "Medium", direction: "Mixed", cause: "quote lift faded after the second split sweep" }, { time: "09:39:47", symbol: "TSLA", title: "Momentum classifier fired", value: "91%", confidence: "High", direction: "Bullish", cause: "volume acceleration exceeded five-session baseline" }, { time: "09:39:12", symbol: "AMZN", title: "Large block against tape", value: "$3.67M", confidence: "Watch", direction: "Bearish", cause: "print direction diverged from sector basket" } ]; const evidence = [ ["Options", "195 C sweep", "$2.31M", "Bullish"], ["Equity", "25,000 dark buy", "$4.87M", "Bullish"], ["News", "AI update crossed", "09:40:21", "Info"], ["Tape", "Momentum burst", "+1.22%", "Bullish"], ["Venue", "Off-exchange share", "64%", "Watch"] ]; const optionRows = [ ["2m", "AAPL", "May 17", "195 C", "5,240", "$2.31M", "Sweep", "Bullish"], ["3m", "AAPL", "Jun 21", "200 C", "6,800", "$1.87M", "Block", "Bullish"], ["4m", "NVDA", "May 24", "120 C", "9,150", "$2.01M", "Split", "Mixed"], ["5m", "TSLA", "Jul 19", "205 C", "10,000", "$3.45M", "Block", "Bullish"], ["6m", "AMZN", "May 17", "185 P", "4,500", "$1.20M", "Sweep", "Bearish"] ]; const health = [ ["OPRA", "healthy", "120ms"], ["CBOE", "healthy", "85ms"], ["NYSE", "degraded", "412ms"], ["News", "healthy", "1.2s"] ]; const timeline = [ ["09:36", "Baseline drift", "AAPL and QQQ correlation widens"], ["09:39", "First print", "Dark block appears before visible call lift"], ["09:41", "Signal fired", "Sweep pressure confirms the print cluster"], ["09:45", "Replay note", "Price accepted above prior liquidity shelf"] ]; const atlasGroups = [ { name: "Mega cap tech", heat: 92, flow: "+$8.4M", symbols: ["AAPL", "MSFT", "AMZN"], x: 12, y: 14 }, { name: "AI semis", heat: 81, flow: "+$5.1M", symbols: ["NVDA", "AMD", "AVGO"], x: 56, y: 22 }, { name: "Beta basket", heat: 66, flow: "+$3.8M", symbols: ["TSLA", "COIN", "PLTR"], x: 30, y: 58 }, { name: "Defensive", heat: 38, flow: "-$1.2M", symbols: ["XLU", "XLV", "PG"], x: 68, y: 64 } ]; export function DashboardMock({ variant }: DashboardMockProps) { const concept = concepts[variant]; return (
{variant === "mock1" ? : null} {variant === "mock2" ? : null} {variant === "mock3" ? : null} {variant === "mock4" ? : null}
); } function MockHeader({ active, concept }: { active: MockVariant; concept: Concept }) { return (
islandflow concepts

{concept.title}

{concept.premise}

best for: {concept.bestFor} 09:41:23 ET live data sketch
); } function EvidenceCanvas() { return (
{symbols.map((item) => (
{item.symbol} {item.sector}
))}
AAPL

Dark sweep pressure is confirmed by options lift

The interface treats one fired anomaly as a case file. Every pane answers whether the signal is meaningful, explainable, and worth continued attention.

94 confidence
); } function AnomalyQueue() { return (
{anomalies.map((item, index) => (
{item.symbol} {item.title}
{item.direction}
))}
AAPL

Dark sweep aligns with call pressure

Off-exchange prints led the options burst by 72 seconds. The next decision is whether the move is being accepted above the liquidity shelf.

); } function ReplayRoom() { return (
May 16, 2024

09:41:23, signal confirmation window

32x
    {timeline.map(([time, title, detail]) => (
  1. {title} {detail}
  2. ))}
); } function MarketAtlas() { return (
{atlasGroups.map((group) => (
{group.name} {group.flow}
))}
{atlasGroups.map((group) => (
{group.name} {group.symbols.join(" / ")}
))}
); } function Panel({ className, label, children }: { className?: string; label: string; children: ReactNode }) { return (
{label}
{children}
); } function EvidenceLinks({ compact = false }: { compact?: boolean }) { return (
{evidence.map(([source, title, value, tone]) => (
{source} {title}
{value} {tone}
))}
); } function FlowTape({ className = "", condensed = false }: { className?: string; condensed?: boolean }) { const rows = condensed ? optionRows.slice(0, 4) : optionRows; return (
Time Symbol Contract Size Premium Read
{rows.map(([time, symbol, exp, strike, size, premium, type, read]) => (
{time} {symbol} {exp} {strike} {size} {premium} {type}
))}
); } function ChartPanel({ className = "", mode }: { className?: string; mode: "annotated" | "compressed" | "replay" }) { const count = mode === "compressed" ? 38 : 64; return (
AAPL 194.88
+1.22%
); } function CausalityPanel({ className = "" }: { className?: string }) { return (
Lead indicator
Dark flow cluster
Confirming evidence
195 C sweep pressure
Contradiction
Venue concentration is high
Next check
Acceptance above 194.50
); } function FeedHealth() { return (
{health.map(([name, state, lag]) => (
{name} {state} {lag}
))}
); } function CheckList() { const checks = [ ["Source agreement", "4 of 5 linked sources agree"], ["Staleness", "last event 11s ago"], ["Replay match", "similar to Apr 26 open"], ["Risk note", "off-exchange share elevated"] ]; return (
{checks.map(([label, value]) => (
{label} {value}
))}
); } function ReplayTrack() { return (
09:00
09:41:23 10:15
); } function ScoreDial({ score }: { score: number }) { return ( {score} ); } function Badge({ tone, children }: { tone: string; children: ReactNode }) { const normalized = tone === "Bearish" ? "bearish" : tone === "Watch" || tone === "Mixed" ? "watch" : tone === "Info" ? "info" : "bullish"; return {children}; }