Files
trumpsignal-frontend/app/layout.tsx
T
k 040e1df685 feat: revamp dashboard, trades, and add landing/legal pages
- Major UI updates across dashboard, analytics, posts, trades, settings
- New landing page, robots/sitemap, contact/privacy/terms pages
- Updated globals.css with extensive styling and new landing.css
- Refactor signedRequest, realtime data hook, and dashboard store

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-25 16:04:57 +08:00

70 lines
2.1 KiB
TypeScript

import type { Metadata, Viewport } from 'next'
import Script from 'next/script'
import './[locale]/globals.css'
const siteTitle = 'Trump Alpha'
const siteDescription = 'Track Trump social posts, AI-scored BTC and ETH signals, and auto-trader performance in one live dashboard.'
const siteUrl = process.env.NEXT_PUBLIC_SITE_URL
export const metadata: Metadata = {
metadataBase: siteUrl ? new URL(siteUrl) : undefined,
title: {
default: `${siteTitle} | Trade Trump's Truth Social posts, automatically`,
template: `%s | ${siteTitle}`,
},
description: siteDescription,
applicationName: siteTitle,
keywords: [
'Trump Alpha',
'TrumpSignal',
'crypto signals',
'BTC trading',
'ETH trading',
'AI trading dashboard',
'Trump social sentiment',
'Hyperliquid bot',
],
openGraph: {
title: `${siteTitle} | Trade Trump's Truth Social posts, automatically`,
description: siteDescription,
siteName: siteTitle,
type: 'website',
},
twitter: {
card: 'summary_large_image',
title: `${siteTitle} | Trade Trump's Truth Social posts, automatically`,
description: siteDescription,
},
}
export const viewport: Viewport = {
themeColor: '#0f0d0a',
width: 'device-width',
initialScale: 1,
viewportFit: 'cover',
}
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="en">
<head>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossOrigin="anonymous" />
<link
href="https://fonts.googleapis.com/css2?family=Geist:wght@400;500;600;700;800&family=Geist+Mono:wght@400;500;600&display=swap"
rel="stylesheet"
/>
</head>
<body>
{/* Umami analytics — loaded after interactive so it never blocks render */}
<Script
src="https://stats.bitnews.day/script.js"
data-website-id="708f06cc-3bd0-4b49-8e81-69289b7f1b42"
strategy="afterInteractive"
/>
{children}
</body>
</html>
)
}