'use client' import { useEffect, useState } from 'react' import Link from 'next/link' import { useAuth } from '@/lib/auth/context' import { initiateOAuthFlow, initiateSignupFlow } from '@/lib/api/oauth' import { listSites, deleteSite, type Site } from '@/lib/api/sites' import { getSubscription, type SubscriptionDetails } from '@/lib/api/billing' import { LoadingOverlay } from '@ciphera-net/ui' import SiteList from '@/components/sites/SiteList' import { Button } from '@ciphera-net/ui' import { BarChartIcon, LockIcon, ZapIcon, CheckCircleIcon, XIcon } from '@ciphera-net/ui' import { toast } from '@ciphera-net/ui' import { getAuthErrorMessage } from '@/lib/utils/authErrors' function DashboardPreview() { return (
Dashboard Preview
The lightweight, privacy-friendly alternative.
| Feature | Pulse | Google Analytics |
|---|---|---|
| {row.feature} |
{row.pulse === true ? (
|
{row.ga === true ? ( Yes ) : ( {row.ga} )} |
Respect your users' privacy while getting the insights you need. No cookies, no IP tracking, fully GDPR compliant.
{/* * --- 4. CTAs --- */}{feature.desc}
No credit card required • Cancel anytime
Manage your analytics sites and view insights.
Total Sites
{sites.length}
Total Visitors (24h)
--
Plan Status
{subscriptionLoading ? '...' : (() => { if (!subscription) return 'Free Plan' const raw = subscription.plan_id?.startsWith('price_') ? 'Pro' : subscription.plan_id === 'free' || !subscription.plan_id ? 'Free' : subscription.plan_id const label = raw === 'Free' || raw === 'Pro' ? raw : raw.charAt(0).toUpperCase() + raw.slice(1) return `${label} Plan` })()}