> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sleuthintel.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Sleuth Intel — Platform Audit Report v2

> Original Sleuth document.

<div style={{ margin: "-24px -32px", width: "calc(100% + 64px)" }}>
  <iframe title="Sleuth Intel — Platform Audit Report v2" srcDoc={"<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\" />\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"/>\n  <title>Sleuth Intel \u2014 Platform Audit Report v2</title>\n  <style>\n    * { box-sizing: border-box; margin: 0; padding: 0; }\n    body { background: #0a0d12; color: #e2e8f0; font-family: 'Segoe UI', system-ui, sans-serif; font-size: 15px; line-height: 1.7; }\n    .hero { background: linear-gradient(135deg, #0f1a2e 0%, #0a0d12 60%); border-bottom: 1px solid #1e2d40; padding: 60px 40px 40px; text-align: center; }\n    .hero .badge { display: inline-block; background: #1a2a3a; border: 1px solid #2a4a6a; color: #5b9bd5; font-size: 11px; font-weight: 600; letter-spacing: 2px; text-transform: uppercase; padding: 4px 14px; border-radius: 20px; margin-bottom: 18px; }\n    .hero h1 { font-size: 2.6rem; font-weight: 700; color: #fff; margin-bottom: 10px; }\n    .hero h1 span { color: #4f9cf9; }\n    .hero p { color: #7a9ab5; font-size: 1rem; max-width: 560px; margin: 0 auto 30px; }\n    .hero-meta { display: flex; justify-content: center; gap: 30px; flex-wrap: wrap; }\n    .hero-meta .meta-item { text-align: center; }\n    .hero-meta .meta-val { font-size: 1.8rem; font-weight: 700; color: #4f9cf9; }\n    .hero-meta .meta-val.down { color: #f97070; }\n    .hero-meta .meta-label { font-size: 0.75rem; color: #5a7a9a; text-transform: uppercase; letter-spacing: 1px; }\n    .container { max-width: 960px; margin: 0 auto; padding: 0 24px 80px; }\n    .section { margin-top: 56px; }\n    .section-header { display: flex; align-items: center; gap: 12px; margin-bottom: 24px; cursor: pointer; user-select: none; }\n    .section-header:hover .section-title { color: #4f9cf9; }\n    .section-icon { width: 36px; height: 36px; border-radius: 8px; display: flex; align-items: center; justify-content: center; font-size: 1.1rem; flex-shrink: 0; }\n    .section-title { font-size: 1.25rem; font-weight: 600; color: #c8d8e8; transition: color 0.2s; flex: 1; }\n    .toggle-btn { font-size: 0.8rem; color: #4a6a8a; background: #111820; border: 1px solid #1e2d40; border-radius: 6px; padding: 3px 10px; cursor: pointer; transition: all 0.2s; }\n    .toggle-btn:hover { background: #1a2a3a; color: #7ab0e0; }\n    .collapsible { transition: all 0.3s ease; }\n    .collapsible.collapsed { display: none; }\n    .caps-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 16px; }\n    .cap-card { background: #0f1820; border: 1px solid #1e2d40; border-radius: 10px; padding: 20px; transition: border-color 0.2s; }\n    .cap-card.broken { border-color: #4a2030; background: #150f10; }\n    .cap-card:hover { border-color: #2a5080; }\n    .cap-card .cap-header { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; }\n    .cap-card .cap-icon { font-size: 1.3rem; }\n    .cap-card .cap-name { font-weight: 600; color: #c8d8e8; font-size: 0.95rem; }\n    .cap-card p { color: #6a8aaa; font-size: 0.88rem; }\n    .status-chip { font-size: 0.68rem; font-weight: 700; padding: 2px 8px; border-radius: 10px; text-transform: uppercase; letter-spacing: 0.5px; margin-left: auto; }\n    .status-ok { background: #10201a; color: #50c878; border: 1px solid #204a30; }\n    .status-blocker { background: #2a1020; color: #f97070; border: 1px solid #4a2030; }\n    .scores-grid { display: flex; flex-direction: column; gap: 14px; }\n    .score-row { background: #0f1820; border: 1px solid #1e2d40; border-radius: 10px; padding: 16px 20px; }\n    .score-top { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; }\n    .score-name { font-weight: 600; color: #c8d8e8; font-size: 0.95rem; }\n    .score-note { font-size: 0.8rem; color: #4a6a8a; }\n    .score-num { font-weight: 700; font-size: 1.1rem; }\n    .score-bar-bg { height: 6px; background: #1a2a3a; border-radius: 4px; overflow: hidden; }\n    .score-bar-fill { height: 100%; border-radius: 4px; transition: width 1s ease; }\n    .score-avg-box { margin-top: 24px; background: #0d1a2a; border: 1px solid #2a5080; border-radius: 10px; padding: 20px 24px; display: flex; align-items: center; justify-content: space-between; }\n    .score-avg-box .avg-label { color: #5b9bd5; font-weight: 600; }\n    .score-avg-box .avg-num { font-size: 2rem; font-weight: 700; color: #4f9cf9; }\n    .score-avg-box .avg-sub { color: #4a6a8a; font-size: 0.8rem; }\n    .comp-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 14px; }\n    .comp-card { background: #0f1820; border: 1px solid #1e2d40; border-radius: 10px; padding: 18px; transition: border-color 0.2s; }\n    .comp-card:hover { border-color: #2a5080; }\n    .comp-name { font-weight: 700; color: #4f9cf9; font-size: 0.95rem; margin-bottom: 6px; }\n    .comp-card p { color: #6a8aaa; font-size: 0.85rem; }\n    .differentiator { margin-top: 20px; background: linear-gradient(135deg, #0d1f30, #0a1520); border: 1px solid #2a5080; border-radius: 10px; padding: 20px 24px; }\n    .differentiator .diff-label { color: #4f9cf9; font-weight: 600; font-size: 0.85rem; text-transform: uppercase; letter-spacing: 1px; margin-bottom: 8px; }\n    .differentiator p { color: #8ab0d0; }\n    .roadmap { position: relative; padding-left: 28px; }\n    .roadmap::before { content: ''; position: absolute; left: 11px; top: 0; bottom: 0; width: 2px; background: linear-gradient(to bottom, #4f9cf9, #1a3a5a); }\n    .roadmap-item { position: relative; margin-bottom: 20px; }\n    .roadmap-item::before { content: ''; position: absolute; left: -22px; top: 14px; width: 12px; height: 12px; border-radius: 50%; border: 2px solid #4f9cf9; background: #0a0d12; }\n    .roadmap-card { background: #0f1820; border: 1px solid #1e2d40; border-radius: 10px; padding: 18px 20px; transition: border-color 0.2s; }\n    .roadmap-card:hover { border-color: #2a5080; }\n    .roadmap-top { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; }\n    .priority-badge { font-size: 0.7rem; font-weight: 700; padding: 2px 8px; border-radius: 4px; text-transform: uppercase; letter-spacing: 0.5px; }\n    .p1 { background: #2a1020; color: #f97070; border: 1px solid #4a2030; }\n    .p2 { background: #1a2010; color: #90c060; border: 1px solid #2a4020; }\n    .p3 { background: #1a1a10; color: #d0b060; border: 1px solid #3a3020; }\n    .roadmap-title { font-weight: 600; color: #c8d8e8; font-size: 0.95rem; }\n    .roadmap-card p { color: #6a8aaa; font-size: 0.87rem; }\n    .bugs-list { display: flex; flex-direction: column; gap: 10px; }\n    .bug-item { background: #150d0d; border: 1px solid #3a1a1a; border-left: 3px solid #f97070; border-radius: 0 10px 10px 0; padding: 14px 18px; display: flex; align-items: flex-start; gap: 12px; }\n    .bug-item.minor { border-left-color: #d0b060; }\n    .bug-icon { color: #f97070; font-size: 1rem; margin-top: 2px; }\n    .bug-item.minor .bug-icon { color: #d0b060; }\n    .bug-text { color: #b08080; font-size: 0.88rem; }\n    .bug-item.minor .bug-text { color: #b0a480; }\n    .bug-text strong { color: #d0a0a0; }\n    .bug-item.minor .bug-text strong { color: #d0c0a0; }\n    .not-shipped-note { background: #0f1820; border: 1px solid #1e2d40; border-left: 3px solid #4a6a8a; border-radius: 0 10px 10px 0; padding: 14px 18px; color: #6a8aaa; font-size: 0.88rem; margin-top: 10px; }\n    .report-footer { margin-top: 60px; padding-top: 30px; border-top: 1px solid #1e2d40; text-align: center; color: #3a5a7a; font-size: 0.82rem; }\n    .report-footer a { color: #4f9cf9; text-decoration: none; }\n    @media (max-width: 600px) { .hero h1 { font-size: 1.8rem; } .hero { padding: 40px 20px 30px; } .caps-grid, .comp-grid { grid-template-columns: 1fr; } }\n  </style>\n</head>\n<body>\n\n<div class=\"hero\">\n  <div class=\"badge\">Platform Audit \u00b7 Live Build Review v2</div>\n  <h1><span>Sleuth Intel</span> \u2014 Intelligence Report</h1>\n  <p>Live QA pass on sleuthintel.io \u2014 capabilities, scores, competition, and what's left before $30/month.</p>\n  <div class=\"hero-meta\">\n    <div class=\"meta-item\"><div class=\"meta-val down\">6.6</div><div class=\"meta-label\">Overall Score</div></div>\n    <div class=\"meta-item\"><div class=\"meta-val\">8</div><div class=\"meta-label\">Sections Reviewed</div></div>\n    <div class=\"meta-item\"><div class=\"meta-val\">3</div><div class=\"meta-label\">Live Blockers</div></div>\n    <div class=\"meta-item\"><div class=\"meta-val\">8</div><div class=\"meta-label\">Competitors Mapped</div></div>\n  </div>\n</div>\n\n<div class=\"container\">\n\n  <!-- CAPABILITIES -->\n  <div class=\"section\">\n    <div class=\"section-header\" onclick=\"toggle('caps')\">\n      <div class=\"section-icon\" style=\"background:#0f2020;\">\u26a1</div>\n      <div class=\"section-title\">Current Capabilities</div>\n      <button class=\"toggle-btn\" id=\"btn-caps\">Collapse</button>\n    </div>\n    <div class=\"collapsible\" id=\"caps\">\n      <div class=\"caps-grid\">\n        <div class=\"cap-card\"><div class=\"cap-header\"><span class=\"cap-icon\">\ud83d\udce1</span><span class=\"cap-name\">Feed</span><span class=\"status-chip status-ok\">Live</span></div><p>Real, current social and news posts plus prediction market snippets, loading instantly across English and Spanish-language sources.</p></div>\n        <div class=\"cap-card\"><div class=\"cap-header\"><span class=\"cap-icon\">\ud83d\udd25</span><span class=\"cap-name\">Pulse (Signals)</span><span class=\"status-chip status-ok\">Live</span></div><p>Mindshare heatmap, velocity gauge, sentiment score, timeseries chart, gainers/losers, and the full assets-by-mindshare table all populated with real, current numbers. Fast throughout.</p></div>\n        <div class=\"cap-card\"><div class=\"cap-header\"><span class=\"cap-icon\">\ud83c\udfc6</span><span class=\"cap-name\">PM Traders</span><span class=\"status-chip status-ok\">Live</span></div><p>Smart Money leaderboard tracking 200 wallets with real PnL, volume, and win rate. Trader profiles are fully populated: PnL, volume, trade count, open positions, performance chart, win/loss donut.</p></div>\n        <div class=\"cap-card broken\"><div class=\"cap-header\"><span class=\"cap-icon\">\ud83d\uddfa\ufe0f</span><span class=\"cap-name\">PM Markets</span><span class=\"status-chip status-blocker\">Blocker</span></div><p>Every top-line stat shows $0. Backend confirmed to have over 1,200 real Polymarket events \u2014 a GraphQL 500 error is breaking the aggregation layer, not the data itself.</p></div>\n        <div class=\"cap-card broken\"><div class=\"cap-header\"><span class=\"cap-icon\">\ud83d\udd0d</span><span class=\"cap-name\">Discover</span><span class=\"status-chip status-blocker\">Blocker</span></div><p>Hangs on \"Loading wallets\u2026\" for ~20 seconds before failing. Same underlying GraphQL 500 as PM Markets. Refresh can loop indefinitely with no error surfaced.</p></div>\n        <div class=\"cap-card\"><div class=\"cap-header\"><span class=\"cap-icon\">\ud83d\udc5b</span><span class=\"cap-name\">Wallet Analyzer</span><span class=\"status-chip status-ok\">Live</span></div><p>Full, richly detailed reports for tracked wallets \u2014 total value, PnL, cash balance, 7-day profit chart, bias metrics, closing-line stats, position/closed/activity tabs. Untracked addresses return a misleading \"invalid address\" message.</p></div>\n        <div class=\"cap-card\"><div class=\"cap-header\"><span class=\"cap-icon\">\ud83e\udd16</span><span class=\"cap-name\">Sleuth AI</span><span class=\"status-chip status-ok\">Live</span></div><p>2\u20133 second responses on real platform-data questions. Enter key doesn't submit in the chat box, send button only.</p></div>\n        <div class=\"cap-card broken\"><div class=\"cap-header\"><span class=\"cap-icon\">\ud83d\udd75\ufe0f</span><span class=\"cap-name\">Forensics Bench</span><span class=\"status-chip status-blocker\">Blocker</span></div><p>General EVM/Solana wallet tracer, separate from Wallet Analyzer. Suggestion chips don't populate the search field, and manual address entry fails outright.</p></div>\n      </div>\n    </div>\n  </div>\n\n  <!-- SCORES -->\n  <div class=\"section\">\n    <div class=\"section-header\" onclick=\"toggle('scores')\">\n      <div class=\"section-icon\" style=\"background:#101830;\">\ud83d\udcca</div>\n      <div class=\"section-title\">Build Quality \u2014 Scores /10</div>\n      <button class=\"toggle-btn\" id=\"btn-scores\">Collapse</button>\n    </div>\n    <div class=\"collapsible\" id=\"scores\">\n      <div class=\"scores-grid\" id=\"scores-container\"></div>\n      <div class=\"score-avg-box\">\n        <div><div class=\"avg-label\">Overall Score</div><div class=\"avg-sub\">Down from 7.3 \u2014 Discover and PM Markets outages are dragging the average</div></div>\n        <div class=\"avg-num\">6.6 / 10</div>\n      </div>\n    </div>\n  </div>\n\n  <!-- COMPETITION -->\n  <div class=\"section\">\n    <div class=\"section-header\" onclick=\"toggle('comp')\">\n      <div class=\"section-icon\" style=\"background:#1a1020;\">\u2694\ufe0f</div>\n      <div class=\"section-title\">Competitive Landscape</div>\n      <button class=\"toggle-btn\" id=\"btn-comp\">Collapse</button>\n    </div>\n    <div class=\"collapsible\" id=\"comp\">\n      <div class=\"comp-grid\">\n        <div class=\"comp-card\"><div class=\"comp-name\">Nansen</div><p>Onchain wallet labelling and smart money tracking. Direct overlap with Discover and Wallet Analyzer.</p></div>\n        <div class=\"comp-card\"><div class=\"comp-name\">Arkham Intelligence</div><p>Onchain entity identification and transaction graph analysis. Overlaps on wallet deanonymisation.</p></div>\n        <div class=\"comp-card\"><div class=\"comp-name\">Santiment</div><p>Social and onchain data combined with narrative signals. Closest overlap with Pulse.</p></div>\n        <div class=\"comp-card\"><div class=\"comp-name\">LunarCrush</div><p>Social volume and sentiment scoring for crypto assets. Overlaps with Feed and Pulse.</p></div>\n        <div class=\"comp-card\"><div class=\"comp-name\">Polymarket</div><p>Has its own basic leaderboard but no external trader analytics layer. Sleuth's PM Traders goes significantly deeper \u2014 while it's live.</p></div>\n        <div class=\"comp-card\"><div class=\"comp-name\">Dune Analytics</div><p>Community-built onchain dashboards. Less curated and requires SQL knowledge \u2014 Sleuth is more accessible, when Discover is up.</p></div>\n        <div class=\"comp-card\"><div class=\"comp-name\">Token Terminal</div><p>Protocol fundamentals and revenue metrics. Minimal social or narrative focus \u2014 different angle.</p></div>\n        <div class=\"comp-card\"><div class=\"comp-name\">Kaito</div><p>AI-native crypto intel with Twitter/X narrative tracking. Probably the closest single competitor to Pulse specifically.</p></div>\n      </div>\n      <div class=\"differentiator\">\n        <div class=\"diff-label\">\ud83c\udfaf The Differentiator</div>\n        <p>None of the above do all four things \u2014 social alpha, narrative momentum, prediction market analytics, and onchain wallet discovery \u2014 in one surface. That's still the moat. Right now two of the four legs are down for users, even though the backend data behind them is intact.</p>\n      </div>\n    </div>\n  </div>\n\n  <!-- ROADMAP -->\n  <div class=\"section\">\n    <div class=\"section-header\" onclick=\"toggle('roadmap')\">\n      <div class=\"section-icon\" style=\"background:#101a10;\">\ud83d\ude80</div>\n      <div class=\"section-title\">Roadmap to $30/month</div>\n      <button class=\"toggle-btn\" id=\"btn-roadmap\">Collapse</button>\n    </div>\n    <div class=\"collapsible\" id=\"roadmap\">\n      <div class=\"roadmap\">\n        <div class=\"roadmap-item\"><div class=\"roadmap-card\"><div class=\"roadmap-top\"><span class=\"priority-badge p1\">P1 \u2014 Blocker</span><span class=\"roadmap-title\">Fix the GraphQL 500</span></div><p>One backend error is taking down Discover and PM Markets at once, and the data behind both is confirmed intact. This is the single highest-leverage fix available \u2014 two full sections come back online from one root cause.</p></div></div>\n        <div class=\"roadmap-item\"><div class=\"roadmap-card\"><div class=\"roadmap-top\"><span class=\"priority-badge p1\">P1 \u2014 Blocker</span><span class=\"roadmap-title\">Fix Forensics Bench</span></div><p>Suggestion chips don't populate the search field, and manual trace lookups fail outright. Either fix it or pull it from nav until it works \u2014 a broken bonus feature still reads as a broken product.</p></div></div>\n        <div class=\"roadmap-item\"><div class=\"roadmap-card\"><div class=\"roadmap-top\"><span class=\"priority-badge p2\">P2 \u2014 Medium</span><span class=\"roadmap-title\">Watchlist Enrichment</span></div><p>Star/Watch from a trader profile works and pulls live stats. Manually adding a wallet through the Watchlists page creates the entry but never enriches it \u2014 $0 PnL, dash ROI. Same enrichment pipeline needs to run on both paths.</p></div></div>\n        <div class=\"roadmap-item\"><div class=\"roadmap-card\"><div class=\"roadmap-top\"><span class=\"priority-badge p2\">P2 \u2014 Medium</span><span class=\"roadmap-title\">Mobile Nav</span></div><p>At narrow widths the top nav overflows with no hamburger menu \u2014 Watchlists, Wallet, Sleuth AI, and API are hidden off-screen with no scroll indicator. Needs a proper collapsed nav pattern before beta users show up on phones.</p></div></div>\n        <div class=\"roadmap-item\"><div class=\"roadmap-card\"><div class=\"roadmap-top\"><span class=\"priority-badge p3\">P3 \u2014 Lower</span><span class=\"roadmap-title\">Wallet Analyzer Error Messaging</span></div><p>A valid but untracked 0x address returns \"Enter a valid wallet address,\" which reads as a format error when it's really a data-availability gap. Should say something closer to \"no data found for this wallet.\"</p></div></div>\n        <div class=\"roadmap-item\"><div class=\"roadmap-card\"><div class=\"roadmap-top\"><span class=\"priority-badge p3\">P3 \u2014 Lower</span><span class=\"roadmap-title\">Sleuth AI Chat \u2014 Enter to Send</span></div><p>Small thing, but pressing Enter in the chat box should submit. Right now only the send button works, which isn't obvious on first use.</p></div></div>\n      </div>\n    </div>\n  </div>\n\n  <!-- BUGS -->\n  <div class=\"section\">\n    <div class=\"section-header\" onclick=\"toggle('bugs')\">\n      <div class=\"section-icon\" style=\"background:#1a0f0f;\">\ud83d\udc1b</div>\n      <div class=\"section-title\">Known Issues</div>\n      <button class=\"toggle-btn\" id=\"btn-bugs\">Collapse</button>\n    </div>\n    <div class=\"collapsible\" id=\"bugs\">\n      <div class=\"bugs-list\">\n        <div class=\"bug-item\"><span class=\"bug-icon\">\u26a0\ufe0f</span><span class=\"bug-text\"><strong>Discover \u2014 GraphQL 500.</strong> Page hangs on \"Loading wallets\u2026\" for ~20 seconds, then shows \"Wallet data is temporarily unavailable.\" Refresh re-triggers the same error and can loop indefinitely with nothing shown the second time.</span></div>\n        <div class=\"bug-item\"><span class=\"bug-icon\">\u26a0\ufe0f</span><span class=\"bug-text\"><strong>PM Markets \u2014 same GraphQL 500.</strong> Active markets, volume, liquidity, and turnover all show $0. Confirmed via direct API call that the backend holds 1,200+ real Polymarket events \u2014 the aggregation layer is what's broken, not the data.</span></div>\n        <div class=\"bug-item\"><span class=\"bug-icon\">\u26a0\ufe0f</span><span class=\"bug-text\"><strong>Forensics Bench.</strong> Suggestion chips highlight but don't populate the search field. Manually entering a known wallet address fails with a generic \"Something went wrong\" error.</span></div>\n        <div class=\"bug-item minor\"><span class=\"bug-icon\">\u2139\ufe0f</span><span class=\"bug-text\"><strong>Watchlists manual add.</strong> Adding a wallet through the page's own form succeeds on the backend but never gets enriched \u2014 shows $0 PnL and dash ROI. Star/Watch from a trader profile works correctly and pulls full stats.</span></div>\n        <div class=\"bug-item minor\"><span class=\"bug-icon\">\u2139\ufe0f</span><span class=\"bug-text\"><strong>Wallet Analyzer error copy.</strong> A validly formatted but untracked 0x address returns \"Enter a valid wallet address\" \u2014 misleading, since the format is fine, the wallet just has no data.</span></div>\n        <div class=\"bug-item minor\"><span class=\"bug-icon\">\u2139\ufe0f</span><span class=\"bug-text\"><strong>Sleuth AI chat.</strong> Enter key doesn't submit the message, only the send button does.</span></div>\n        <div class=\"bug-item minor\"><span class=\"bug-icon\">\u2139\ufe0f</span><span class=\"bug-text\"><strong>Mobile nav overflow.</strong> At narrow widths the top nav overflows horizontally with no hamburger menu \u2014 several sections are hidden off-screen with no indication they exist. Needs a retest at true desktop width to confirm scope.</span></div>\n      </div>\n      <div class=\"not-shipped-note\">Alerts and aSLEUTH allocation tracking were checked against the whitepaper and confirmed as planned, not yet shipped \u2014 not counted as bugs here.</div>\n    </div>\n  </div>\n\n  <div class=\"report-footer\">\n    <p>Sleuth Intel \u2014 Live Build Audit v2 \u00b7 <a href=\"https://www.sleuthintel.io\" target=\"_blank\">sleuthintel.io</a></p>\n  </div>\n\n</div>\n\n<script>\n  const scores = [\n    { name: \"Data Breadth\", score: 7.5, note: \"Same wide coverage on paper \u2014 Discover being down removes onchain wallet data from the user's reach\" },\n    { name: \"UI / Design\", score: 7.5, note: \"Clean dark theme, consistent design language, heatmaps and radar charts still standout\" },\n    { name: \"Backend Architecture\", score: 5.5, note: \"One GraphQL 500 is taking down two core sections at once, and the second refresh fails silently\" },\n    { name: \"Data Freshness / Live Feeds\", score: 7.5, note: \"Feed and Pulse are legitimately near-real-time and fast\" },\n    { name: \"Performance\", score: 6.5, note: \"Feed, Pulse, PM Traders are snappy. Discover hangs 20s before failing, Forensics Bench fails outright\" },\n    { name: \"Feature Completeness\", score: 6.0, note: \"3 of 8 sections tested are hard blockers. Alerts and aSLEUTH tracking not yet shipped\" },\n    { name: \"Onchain Intelligence\", score: 4.5, note: \"Discover is fully broken for users right now, despite the underlying data being intact\" },\n    { name: \"Narrative / Social Intel\", score: 8.0, note: \"Pulse is fully live and fast \u2014 velocity scoring, heatmap, and timeseries all check out\" },\n    { name: \"Prediction Market Coverage\", score: 6.0, note: \"PM Traders is excellent and live. PM Markets is a full blocker, dragging this down\" },\n    { name: \"Developer Signals / Code Quality\", score: 6.5, note: \"API docs are clean, but the GraphQL error isn't surfaced properly on repeat failure\" },\n  ];\n  function getColor(score) {\n    if (score >= 8) return '#4f9cf9';\n    if (score >= 7) return '#50c878';\n    if (score >= 6) return '#f0b429';\n    return '#f97070';\n  }\n  const container = document.getElementById('scores-container');\n  scores.forEach(s => {\n    const pct = (s.score / 10) * 100;\n    const color = getColor(s.score);\n    const div = document.createElement('div');\n    div.className = 'score-row';\n    div.innerHTML = `<div class=\"score-top\"><div><div class=\"score-name\">${s.name}</div><div class=\"score-note\">${s.note}</div></div><div class=\"score-num\" style=\"color:${color}\">${s.score}</div></div><div class=\"score-bar-bg\"><div class=\"score-bar-fill\" style=\"width:0%; background:${color}\" data-width=\"${pct}%\"></div></div>`;\n    container.appendChild(div);\n  });\n  setTimeout(() => {\n    document.querySelectorAll('.score-bar-fill').forEach(bar => { bar.style.width = bar.dataset.width; });\n  }, 300);\n  function toggle(id) {\n    const el = document.getElementById(id);\n    const btn = document.getElementById('btn-' + id);\n    const collapsed = el.classList.toggle('collapsed');\n    btn.textContent = collapsed ? 'Expand' : 'Collapse';\n  }\n</script>\n</body>\n</html>\n" } style={{ width: "100%", minHeight: "100vh", border: "none", display: "block", background: "#060606" }} />
</div>
