import type { Metadata, Viewport } from 'next' import { getLocale } from 'next-intl/server' import Script from 'next/script' import './[locale]/globals.css' const siteTitle = 'Trump Alpha' 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 export const metadata: Metadata = { metadataBase: siteUrl ? new URL(siteUrl) : new URL('https://trumpsignal.com'), title: { default: `${siteTitle} | ${siteTagline}`, template: `%s | ${siteTitle}`, }, description: siteDescription, applicationName: siteTitle, keywords: [ 'Trump Alpha', 'TrumpSignal', 'crypto signals', 'crypto alpha dashboard', 'Macro Vibes', 'crypto macro dashboard', 'BTC bottom reversal', 'Bitcoin macro bottom', 'AHR999', 'Pi Cycle Bottom', 'KOL crypto signals', 'Arthur Hayes signals', 'Delphi Digital', 'Bankless', 'KOL on-chain tracking', 'talks vs trades divergence', 'smart-money divergence', 'AI trading dashboard', 'Trump Truth Social signal', 'Hyperliquid trading bot', 'crypto auto-trader', 'crypto intelligence platform', 'funding rate reversal', 'Bitcoin cycle bottom', ], authors: [{ name: 'Trump Alpha' }], creator: 'Trump Alpha', publisher: 'Trump Alpha', category: 'Finance', robots: { index: true, follow: true, googleBot: { index: true, follow: true, 'max-video-preview': -1, 'max-image-preview': 'large', 'max-snippet': -1, }, }, alternates: { canonical: siteUrl || 'https://trumpsignal.com', languages: { 'en': `${siteUrl || 'https://trumpsignal.com'}/en`, 'x-default': siteUrl || 'https://trumpsignal.com', }, }, openGraph: { title: `${siteTitle} | ${siteTagline}`, description: siteDescription, siteName: siteTitle, type: 'website', locale: 'en_US', url: siteUrl || 'https://trumpsignal.com', images: [ { url: '/opengraph-image', width: 1200, height: 630, alt: `${siteTitle} — ${siteTagline}`, type: 'image/png', }, ], }, twitter: { card: 'summary_large_image', title: `${siteTitle} | ${siteTagline}`, description: siteDescription, images: ['/opengraph-image'], }, verification: { // Add your Google Search Console verification token here // google: 'YOUR_GOOGLE_VERIFICATION_TOKEN', }, } export const viewport: Viewport = { themeColor: '#0f0d0a', width: 'device-width', initialScale: 1, viewportFit: 'cover', } const jsonLd = { '@context': 'https://schema.org', '@graph': [ { '@type': 'SoftwareApplication', name: 'Trump Alpha', alternateName: 'TrumpSignal', url: siteUrl || 'https://trumpsignal.com', applicationCategory: 'FinanceApplication', operatingSystem: 'Web', description: siteDescription, datePublished: '2025-01-01', dateModified: new Date().toISOString().slice(0, 10), inLanguage: ['en'], offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD', description: 'Free to read all signals. Optional Hyperliquid integration for auto-trading.', }, featureList: [ 'Real-time Trump Truth Social sentiment scoring', 'BTC macro-bottom confluence detection (AHR999 + 200-week MA + Pi Cycle Bottom)', 'KOL Substack and podcast signal extraction', 'Talks-vs-trades divergence detection', 'Hyperliquid auto-trader integration', ], }, { '@type': 'Organization', name: 'Trump Alpha', url: siteUrl || 'https://trumpsignal.com', description: 'AI-powered crypto intelligence platform tracking Trump posts, on-chain signals, and KOL sentiment.', }, { '@type': 'FAQPage', mainEntity: [ { '@type': 'Question', name: 'What is Trump Alpha?', acceptedAnswer: { '@type': 'Answer', text: 'Trump Alpha is an AI-powered crypto intelligence dashboard that monitors four signal sources: Trump Truth Social posts, BTC macro-bottom confluence signals, KOL Substack and podcast essays, and talks-vs-trades divergence between public commentary and on-chain behavior.', }, }, { '@type': 'Question', name: 'How does the Trump signal engine work?', acceptedAnswer: { '@type': 'Answer', text: 'The engine scrapes Trump\'s Truth Social feed continuously. Each post is sent to an AI model that classifies it as LONG (bullish crypto), SHORT (bearish), or NOISE (off-topic). If the confidence score exceeds your threshold, the engine optionally places an isolated-margin trade on Hyperliquid. The entire pipeline runs in under 3 seconds from post to position.', }, }, { '@type': 'Question', name: 'What is Macro Vibes?', acceptedAnswer: { '@type': 'Answer', 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.', }, }, { '@type': 'Question', name: 'What is talks-vs-trades divergence?', acceptedAnswer: { '@type': 'Answer', text: 'Talks-vs-trades divergence compares what a crypto KOL says publicly (e.g., "I\'m bullish on ETH") against what their on-chain wallet actually does within a 7-day window. When a KOL is publicly bullish but their wallet is selling, Trump Alpha flags it as a divergence signal — the on-chain action is treated as ground truth, making the divergence one of the highest-conviction alpha signals on the platform.', }, }, { '@type': 'Question', name: 'Which KOLs does Trump Alpha track?', acceptedAnswer: { '@type': 'Answer', text: 'Trump Alpha tracks 19 KOL feeds including Arthur Hayes (BitMEX), Delphi Digital, Dragonfly Capital, Pomp, and major crypto podcasts (Empire, Bankless, Unchained, 0xResearch, Lightspeed). Posts and episodes are processed daily; AI extracts ticker calls, direction (bullish/bearish/buy/sell), and conviction scores.', }, }, { '@type': 'Question', name: 'Is Trump Alpha free?', acceptedAnswer: { '@type': 'Answer', 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.', }, }, { '@type': 'Question', name: 'How do I set up the Hyperliquid auto-trader?', acceptedAnswer: { '@type': 'Answer', text: 'Create a Hyperliquid account at app.hyperliquid.xyz, generate an API key with trade-only permissions (no withdrawal), and paste it into the Trump Alpha settings page. Configure your leverage (default 3×), position size, TP/SL levels, daily budget cap, and active trading hours. The bot only trades when all your conditions are met.', }, }, { '@type': 'Question', name: 'What safety features does the auto-trader have?', acceptedAnswer: { '@type': 'Answer', text: 'The Trump Alpha auto-trader has six safety layers: (1) minimum confidence threshold before any trade fires, (2) isolated margin so a bad trade cannot drain other positions, (3) automatic take-profit and stop-loss on every open position, (4) daily budget cap — it stops trading once the cap is hit, (5) active hours window so it only trades when you choose, (6) per-trade position size cap.', }, }, { '@type': 'Question', name: 'What is the BTC macro-bottom scanner looking for?', acceptedAnswer: { '@type': 'Answer', text: 'It is looking for rare macro-bottom environments rather than trying to pick intraday reversals. The live signal requires 2-of-3 agreement across AHR999, the 200-week moving average, and Pi Cycle Bottom, then manages the position with staged de-risking, profit-floor ratchets, and an 18-month backstop.', }, }, { '@type': 'Question', name: 'Does Trump Alpha store my trading keys?', acceptedAnswer: { '@type': 'Answer', text: 'Your Hyperliquid API key is stored encrypted in your browser\'s local settings and sent only to the Trump Alpha backend to execute trades. The key is scoped to trade-only permissions — it cannot withdraw funds. We never ask for your MetaMask seed phrase or any wallet private key.', }, }, ], }, ], } export default async function RootLayout({ children }: { children: React.ReactNode }) { let locale = 'en' try { locale = await getLocale() } catch { locale = 'en' } return (