first commit
Deploy / lint (push) Failing after 7s
Deploy / test (push) Has been skipped
Deploy / deploy (push) Has been skipped

This commit is contained in:
Dennis Thiessen
2026-02-20 17:31:01 +01:00
commit 61ab24490d
160 changed files with 17034 additions and 0 deletions
+48
View File
@@ -0,0 +1,48 @@
import { useState } from 'react';
import { DataCleanup } from '../components/admin/DataCleanup';
import { JobControls } from '../components/admin/JobControls';
import { SettingsForm } from '../components/admin/SettingsForm';
import { TickerManagement } from '../components/admin/TickerManagement';
import { UserTable } from '../components/admin/UserTable';
const tabs = ['Users', 'Tickers', 'Settings', 'Jobs', 'Cleanup'] as const;
type Tab = (typeof tabs)[number];
export default function AdminPage() {
const [activeTab, setActiveTab] = useState<Tab>('Users');
return (
<div className="space-y-6 animate-slide-up">
<div>
<h1 className="text-2xl font-bold text-gradient">Admin</h1>
<p className="text-xs text-gray-500 mt-1">System management</p>
</div>
{/* Tab bar */}
<div className="flex gap-1 glass-sm p-1 w-fit">
{tabs.map((tab) => (
<button
key={tab}
onClick={() => setActiveTab(tab)}
className={`px-4 py-2 text-sm font-medium rounded-lg transition-all duration-200 ${
activeTab === tab
? 'bg-white/[0.1] text-white shadow-lg shadow-blue-500/10'
: 'text-gray-400 hover:text-gray-200 hover:bg-white/[0.04]'
}`}
>
{tab}
</button>
))}
</div>
{/* Tab content */}
<div className="animate-fade-in">
{activeTab === 'Users' && <UserTable />}
{activeTab === 'Tickers' && <TickerManagement />}
{activeTab === 'Settings' && <SettingsForm />}
{activeTab === 'Jobs' && <JobControls />}
{activeTab === 'Cleanup' && <DataCleanup />}
</div>
</div>
);
}