feat: OnyvaLeads customer UI — Suche + Leadspeicher

- New Topbar: logo, 2-tab pill switcher, live "Neu" badge
- /suche page: SearchCard, LoadingCard, ExamplePills
- /leadspeicher page: full leads table with filters, pagination
- StatusBadge, StatusPopover, LeadSidePanel, BulkActionBar
- POST /api/search: unified search entry point → serp-enrich
- Remove Sidebar + old TopBar from layout
- Title: OnyvaLeads, redirect / → /suche

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Timo Uttenweiler
2026-03-27 16:48:05 +01:00
parent 47b78fa749
commit 60073b97c9
15 changed files with 2235 additions and 44 deletions

View File

@@ -1,29 +1,22 @@
import type { Metadata } from "next";
import { Inter } from "next/font/google";
import "./globals.css";
import { Sidebar } from "@/components/layout/Sidebar";
import { TopBar } from "@/components/layout/TopBar";
import { Topbar } from "@/components/layout/Topbar";
import { Toaster } from "@/components/ui/sonner";
const inter = Inter({ subsets: ["latin"], variable: "--font-inter" });
export const metadata: Metadata = {
title: "OnyvaLeads — Lead Generation Platform",
description: "Unified lead generation and email enrichment platform",
title: "OnyvaLeads",
description: "Leads finden und verwalten",
};
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="en" className="dark">
<body className={`${inter.variable} antialiased`}>
<div className="flex h-screen overflow-hidden bg-[#0a0a0f]">
<Sidebar />
<div className="flex flex-col flex-1 overflow-hidden">
<TopBar />
<main className="flex-1 overflow-y-auto p-6">
{children}
</main>
</div>
<html lang="de" className="dark">
<body className="antialiased">
<div className="flex flex-col min-h-screen" style={{ background: "#0a0a0f" }}>
<Topbar />
<main className="flex-1 overflow-y-auto">
{children}
</main>
</div>
<Toaster position="bottom-right" theme="dark" />
</body>