'use client' import Link from 'next/link' import Image from 'next/image' import { Site } from '@/lib/api/sites' import type { Stats } from '@/lib/api/stats' import { formatNumber } from '@ciphera-net/ui' import { BarChartIcon, SettingsIcon, BookOpenIcon, ExternalLinkIcon, Button } from '@ciphera-net/ui' import { useUnifiedSettings } from '@/lib/unified-settings-context' import { FAVICON_SERVICE_URL } from '@/lib/utils/favicon' export type SiteStatsMap = Record interface SiteListProps { sites: Site[] siteStats: SiteStatsMap loading: boolean } interface SiteCardProps { site: Site stats: Stats | null statsLoading: boolean } function SiteCard({ site, stats, statsLoading }: SiteCardProps) { const { openUnifiedSettings } = useUnifiedSettings() const visitors24h = stats?.visitors ?? 0 const pageviews = stats?.pageviews ?? 0 return (
{/* Header: Icon + Name + Live Status */}
{site.name}

{site.name}

{site.is_verified ? (
Active
) : (
Unverified
)}
{/* Mini Stats Grid */}

Visitors (24h)

{statsLoading ? '--' : formatNumber(visitors24h)}

Pageviews

{statsLoading ? '--' : formatNumber(pageviews)}

{/* Actions */}
) } export default function SiteList({ sites, siteStats, loading }: SiteListProps) { if (loading) { return (
{[1, 2, 3].map((i) => (
))}
) } if (sites.length === 0) { return (
Set up your first site

No sites yet

Create your first site to get started.

) } return (
{sites.map((site) => { const data = siteStats[site.id] return ( ) })} {/* Resources Card */}

Need help setup?

Check our documentation for installation guides.

Read Documentation →
) }