9c6a0a72fa
Information architecture (6 nav destinations -> 4): - New Overview home: metric strip (live setups, high confidence, hit rate, expectancy), top-5 setups, watchlist pulse - Market = Watchlist + Rankings merged as tabs; scoring weights moved into a collapsible disclosure - Signals = Scanner + Performance merged as tabs (Setups | Track Record) with actions inside the panels - Legacy routes redirect (/watchlist, /rankings, /scanner, /performance) Visual identity: - Warm ash-green dark palette replaces cold navy; citron lime accent replaces blue (Tailwind gray/blue remapped at config level so all components reskin) - Primary buttons: lime with ink text; long/short stays emerald/red - Typography: Bricolage Grotesque display, Instrument Sans body, IBM Plex Mono for all numerals incl. chart canvas labels - Atmosphere: graph-paper grid + citron glow + film grain; pulsing brand dot; mono-numbered nav Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
33 lines
1.1 KiB
TypeScript
33 lines
1.1 KiB
TypeScript
import { useSearchParams } from 'react-router-dom';
|
|
import { PageHeader } from '../components/ui/PageHeader';
|
|
import { Tabs } from '../components/ui/Tabs';
|
|
import { SetupsPanel } from '../components/signals/SetupsPanel';
|
|
import { TrackRecordPanel } from '../components/signals/TrackRecordPanel';
|
|
|
|
const tabs = ['Setups', 'Track Record'] as const;
|
|
type Tab = (typeof tabs)[number];
|
|
|
|
export default function SignalsPage() {
|
|
const [searchParams, setSearchParams] = useSearchParams();
|
|
const activeTab: Tab = searchParams.get('tab') === 'track' ? 'Track Record' : 'Setups';
|
|
|
|
const setTab = (tab: Tab) => {
|
|
setSearchParams(tab === 'Track Record' ? { tab: 'track' } : {}, { replace: true });
|
|
};
|
|
|
|
return (
|
|
<div className="space-y-6 animate-slide-up">
|
|
<PageHeader
|
|
title="Signals"
|
|
subtitle="Detected trade setups and how past signals actually performed"
|
|
/>
|
|
|
|
<Tabs tabs={tabs} active={activeTab} onChange={setTab} />
|
|
|
|
<div className="animate-fade-in" key={activeTab}>
|
|
{activeTab === 'Setups' ? <SetupsPanel /> : <TrackRecordPanel />}
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|