- KOL PageHint: shorter, punchier ("call their bluff" variant)
- DigestTickerChip: fix plural bug — "1 KOL" vs "3 KOLs"
- WalletCheckWidget empty state: one sentence instead of two
- Macro Bottom section-hint: bullet-style trait list for scannability
- Macro Funding section-hint: "fades the crowded side" is cleaner than the previous rewording
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
GEO (AI answer engines) — make the signal feeds and case studies machine-citeable:
- Dataset JSON-LD on /trump, /kol, /trades (creator=Endorphin, publisher→#org,
isAccessibleForFree, temporalCoverage). These are the "data/history/track
record" entities Perplexity/Gemini/ChatGPT cite.
- case-studies: ItemList of 5 Article nodes, each with headline/description/
articleBody/about + citation→evidence URL + author=Endorphin. ISO dates
derived where parseable, omitted for vague labels.
- public/llms-full.txt: single-doc full reference (methodology + glossary +
case studies w/ sources inlined) for one-fetch AI ingestion; linked from llms.txt.
SEO:
- Breadcrumbs component (components/seo/Breadcrumbs.tsx) → BreadcrumbList JSON-LD
on the 8 indexable content pages (trump/kol/macro/trades/analytics/
methodology/glossary/case-studies).
- /archive split into server page + ArchivePageClient; server page sets
robots noindex (legacy/test data — thin-content risk).
- openGraph added to /trades and /analytics (previously meta+canonical only).
Verified: tsc 0 errors, next build passes, runtime curl confirms all JSON-LD
types render and llms-full.txt serves 200. No trading/API/component-logic changes.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
SEO fixes:
- canonical on trump/macro/kol pages now hardcodes /en/ instead of
/${locale}/ — prevents /zh/* routes (i18n shelved, routes still resolve)
from generating duplicate-content signals pointing to /zh/ canonicals
- OG image: "15 KOL feeds" → "19" (matches kol_substack.py KOL_FEEDS count)
- FAQ JSON-LD: corrected API key storage description ("stored encrypted in
your browser's local settings" was wrong — key is server-side encrypted,
not stored in the browser)
GEO (Generative Engine Optimization):
- llms.txt fully rewritten: +full KOL list (all 19 named), +explicit
differentiation section, +who-this-is-for, +technology stack detail
(model names, price sources, DB), +Hyperliquid and isolated-margin
definitions. AI crawlers (Perplexity, ChatGPT, Claude) use this file
directly when answering questions about the product.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Macro page fetches getPosts(200, 1, source) per active tab instead of
filtering the latest-500 global feed — rare bottom/funding signals no longer
vanish behind Trump posts (backend now supports ?source=).
- Analytics: compute ALL time windows from the one closed_at-filtered trades
list; dropped the 30d-only backend /performance special-case that mixed an
opened_at basis into the same screen as the closed_at metric grid. Trade
fetch raised 100→500 so the local computation covers ample history.
- Funding panel shows snap.venue (capitalized) instead of hardcoded "Binance".
- lib/api: getPosts gains optional source param; FundingSnapshot gains venue.
tsc + next build clean.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
1. MacroVibesPageClient — funding stats rendered "undefined%" when
latest_rate_pct / last_24h_avg_pct were null. `?.toFixed()` returns
undefined inside a template literal → shows as the string "undefined%".
Fixed: explicit null check → '—' fallback.
2. SettingsClient — broken internal anchor: href="#btc-settings-panel"
but the section id is "btc-settings". "Open panel ↓" link did nothing.
Fixed: corrected href to "#btc-settings".
3. KolPageClient — undefined CSS variables throughout the file:
--bg-card (transparent) and --border (no border) were never defined
in the design system (globals.css uses --surface and --line).
KOL cards rendered with transparent bg and invisible borders.
Fixed: --bg-card → --surface, --border → --line, --accent → --amber.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Module rename across page H1, navbar tab, URL (/en/btc → /en/macro),
all metadata/JSON-LD, sitemap, llms.txt, opengraph image, and SystemControl
copy. Old /btc route fully removed.
New components/btc/MacroPanel.tsx polls /api/macro/snapshot and lays out
the 8 indicators in four sections (Valuation / Bottom trigger reference /
Market structure / Sentiment & flows / Positioning) with tone-coloured
values, current-band threshold chips, and a single CoinGlass / source
chart link per card. Composite -100..+100 needle pulses on score change.
Also fixes the pinned bottom-reversal alert on the homepage, which still
linked to the now-404 /en/btc — now routes to /en/macro.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>