feat(macro-vibes): rename BTC Signal → Macro Vibes; add MacroPanel UI
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>
This commit is contained in:
+6
-15
@@ -1,5 +1,4 @@
|
||||
import type { Metadata, Viewport } from 'next'
|
||||
import { Geist, Geist_Mono } from 'next/font/google'
|
||||
import { getLocale } from 'next-intl/server'
|
||||
import Script from 'next/script'
|
||||
import './[locale]/globals.css'
|
||||
@@ -9,16 +8,6 @@ const siteTagline = 'Four crypto alpha feeds, one dashboard'
|
||||
const siteDescription = 'Real-time Trump Truth Social signals, BTC macro-bottom confluence, KOL Substack/podcast signals, and talks-vs-trades divergence — all scored by AI in one live dashboard.'
|
||||
const siteUrl = process.env.NEXT_PUBLIC_SITE_URL
|
||||
|
||||
const geistSans = Geist({
|
||||
subsets: ['latin'],
|
||||
variable: '--font-geist-sans',
|
||||
})
|
||||
|
||||
const geistMono = Geist_Mono({
|
||||
subsets: ['latin'],
|
||||
variable: '--font-geist-mono',
|
||||
})
|
||||
|
||||
export const metadata: Metadata = {
|
||||
metadataBase: siteUrl ? new URL(siteUrl) : new URL('https://trumpsignal.com'),
|
||||
title: {
|
||||
@@ -32,6 +21,8 @@ export const metadata: Metadata = {
|
||||
'TrumpSignal',
|
||||
'crypto signals',
|
||||
'crypto alpha dashboard',
|
||||
'Macro Vibes',
|
||||
'crypto macro dashboard',
|
||||
'BTC bottom reversal',
|
||||
'Bitcoin macro bottom',
|
||||
'AHR999',
|
||||
@@ -164,10 +155,10 @@ const jsonLd = {
|
||||
},
|
||||
{
|
||||
'@type': 'Question',
|
||||
name: 'What is the BTC bottom reversal signal?',
|
||||
name: 'What is Macro Vibes?',
|
||||
acceptedAnswer: {
|
||||
'@type': 'Answer',
|
||||
text: 'The BTC bottom reversal module is a long-only macro-bottom scanner. It fires when at least two of three classic bottom signals agree: AHR999 deep-value zone, price near the 200-week moving average, and Pi Cycle Bottom. These signals are intentionally rare and aimed at cycle-level reversals rather than short-term swings.',
|
||||
text: 'Macro Vibes is the macro-regime dashboard for crypto. It surfaces eight free, public macro signals in one view — AHR999, Fear & Greed, BTC dominance, ETH/BTC ratio, total stablecoin supply, US spot Bitcoin ETF daily net flow, BTC perp open interest, and the Altcoin Season Index — plus a long-only BTC bottom-reversal trigger (2-of-3 confluence of AHR999, 200-week MA, and Pi Cycle Bottom) and a BTC perp funding-rate reversal trigger. One screen tells you whether the macro tape is bullish, bearish, or neutral.',
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -191,7 +182,7 @@ const jsonLd = {
|
||||
name: 'Is Trump Alpha free?',
|
||||
acceptedAnswer: {
|
||||
'@type': 'Answer',
|
||||
text: 'Yes. All four signal dashboards (Trump, BTC bottom, KOL, talks-vs-trades) are free to read. The optional Hyperliquid auto-trader requires your own Hyperliquid account and API key. Trump Alpha never takes custody of your funds — your API key can open and close positions but cannot withdraw.',
|
||||
text: 'Yes. All four signal dashboards (Trump, Macro Vibes, KOL, talks-vs-trades) are free to read. The optional Hyperliquid auto-trader requires your own Hyperliquid account and API key. Trump Alpha never takes custody of your funds — your API key can open and close positions but cannot withdraw.',
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -247,7 +238,7 @@ export default async function RootLayout({ children }: { children: React.ReactNo
|
||||
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
|
||||
/>
|
||||
</head>
|
||||
<body className={`${geistSans.variable} ${geistMono.variable}`}>
|
||||
<body>
|
||||
{/* Umami analytics — loaded after interactive so it never blocks render */}
|
||||
<Script
|
||||
src="https://stats.bitnews.day/script.js"
|
||||
|
||||
Reference in New Issue
Block a user