diff --git a/app/page.tsx b/app/page.tsx index 3d25fff..a89a27b 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -12,49 +12,13 @@ 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 Image from 'next/image' import { BarChartIcon, LockIcon, ZapIcon, CheckCircleIcon, XIcon, GlobeIcon } from '@ciphera-net/ui' import { toast } from '@ciphera-net/ui' import { getAuthErrorMessage } from '@ciphera-net/ui' import { getSitesLimitForPlan } from '@/lib/plans' -const MOCK_STATS = [ - { label: 'UNIQUE VISITORS', value: '12,847', trend: '+14%', up: true }, - { label: 'TOTAL PAGEVIEWS', value: '48,293', trend: '+8%', up: true }, - { label: 'BOUNCE RATE', value: '42%', trend: '-3%', up: true }, - { label: 'VISIT DURATION', value: '2m 34s', trend: '+11%', up: true }, -] - -const MOCK_CHART_POINTS = [ - 20, 35, 28, 45, 38, 52, 48, 65, 58, 72, 68, 85, 78, 92, 88, 105, - 98, 110, 95, 115, 108, 125, 118, 130, 122, 138, 142, 155, 148, 160, -] - -const MOCK_PAGES = [ - { path: '/', views: '8,421' }, - { path: '/pricing', views: '3,287' }, - { path: '/features', views: '2,104' }, - { path: '/blog/getting-started', views: '1,856' }, - { path: '/docs/installation', views: '1,203' }, -] - -const MOCK_REFERRERS = [ - { name: 'google.com', views: '5,832' }, - { name: 'twitter.com', views: '2,417' }, - { name: 'github.com', views: '1,894' }, - { name: 'reddit.com', views: '1,105' }, - { name: 'Direct / None', views: '987' }, -] - function DashboardPreview() { - const chartMax = Math.max(...MOCK_CHART_POINTS) - const chartH = 180 - const points = MOCK_CHART_POINTS.map((v, i) => { - const x = (i / (MOCK_CHART_POINTS.length - 1)) * 100 - const y = chartH - (v / chartMax) * (chartH - 20) - return `${x},${y}` - }).join(' ') - const areaPoints = `0,${chartH} ${points} 100,${chartH}` - return (
@@ -63,7 +27,7 @@ function DashboardPreview() { initial={{ opacity: 0, y: 40 }} animate={{ opacity: 1, y: 0 }} transition={{ duration: 0.7, delay: 0.4 }} - className="relative rounded-xl border border-neutral-200/50 dark:border-neutral-800/50 bg-white dark:bg-neutral-900 shadow-2xl overflow-hidden" + className="relative rounded-xl border border-neutral-200/50 dark:border-neutral-800/50 shadow-2xl overflow-hidden" > {/* * Browser chrome */}
@@ -73,88 +37,17 @@ function DashboardPreview() {
-
- {/* * Header row */} -
-
-
-
acme.com
-
Last 30 days
-
-
- - - - - 24 online -
-
-
- - {/* * Stat cards */} -
- {MOCK_STATS.map((s, i) => ( -
-
{s.label}
-
- {s.value} - - {s.trend} - -
-
- ))} -
- - {/* * Chart area */} -
- - - - - - - - - - -
- - {/* * Two-column widgets */} -
- {/* * Top Pages */} -
-
- Top Pages -
-
- {MOCK_PAGES.map((p, i) => ( -
- {p.path} - {p.views} -
- ))} -
-
- - {/* * Top Referrers */} -
-
- Top Referrers -
-
- {MOCK_REFERRERS.map((r, i) => ( -
- {r.name} - {r.views} -
- ))} -
-
-
+ {/* * Screenshot with bottom fade */} +
+ Pulse analytics dashboard showing visitor stats, charts, top pages, referrers, locations, and technology breakdown +
diff --git a/public/dashboard-preview.png b/public/dashboard-preview.png new file mode 100644 index 0000000..e004e25 Binary files /dev/null and b/public/dashboard-preview.png differ