diff --git a/CHANGELOG.md b/CHANGELOG.md index dbdea1a..e819caf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), ### Improved +- **Sites now show their verification status.** Each site on your dashboard now displays either a green "Active" badge (if verified) or an amber "Unverified" badge. When you verify your tracking script installation, the status is saved permanently — no more showing "Active" for sites that haven't been set up yet. - **Cleaner page paths in your reports.** Pages like `/products?_t=123456` or `/about?session=abc` now correctly show as `/products` and `/about`. Only marketing attribution parameters (like UTM tags) are preserved for traffic source tracking — all other junk parameters are automatically removed, so your Top Pages and Journeys stay clean without us having to chase down every new parameter format. - **Easier to hover country dots on the map.** The orange location markers on the world map are now much easier to interact with — you no longer need pixel-perfect aim to see the tooltip. - **Smoother chart curves and filled area.** The dashboard chart line now flows with natural curves instead of sharp flat tops at peaks. The area beneath the line is filled with a soft transparent orange gradient that fades toward the bottom, making trends easier to read at a glance. diff --git a/components/sites/SiteList.tsx b/components/sites/SiteList.tsx index 718386b..ea15114 100644 --- a/components/sites/SiteList.tsx +++ b/components/sites/SiteList.tsx @@ -62,13 +62,22 @@ function SiteCard({ site, stats, statsLoading, onDelete, canDelete }: SiteCardPr -
- - - - - Active -
+ {site.is_verified ? ( +
+ + + + + Active +
+ ) : ( +
+ + + + Unverified +
+ )} {/* Mini Stats Grid */} diff --git a/components/sites/VerificationModal.tsx b/components/sites/VerificationModal.tsx index 1b360f1..f382e47 100644 --- a/components/sites/VerificationModal.tsx +++ b/components/sites/VerificationModal.tsx @@ -9,7 +9,7 @@ import { AlertTriangleIcon, ZapIcon } from '@ciphera-net/ui' -import { Site } from '@/lib/api/sites' +import { Site, verifySite } from '@/lib/api/sites' import { getRealtime } from '@/lib/api/stats' import { toast, Button } from '@ciphera-net/ui' @@ -56,6 +56,7 @@ export default function VerificationModal({ isOpen, onClose, site }: Verificatio if (data.visitors > 0) { setStatus('success') toast.success('Connection established!') + try { await verifySite(site.id) } catch {} } } catch (e) { // Ignore errors diff --git a/lib/api/sites.ts b/lib/api/sites.ts index e17d886..34f5f99 100644 --- a/lib/api/sites.ts +++ b/lib/api/sites.ts @@ -25,6 +25,7 @@ export interface Site { hide_unknown_locations?: boolean // Data retention (months); 0 = keep forever data_retention_months?: number + is_verified?: boolean created_at: string updated_at: string } @@ -91,3 +92,9 @@ export async function resetSiteData(id: string): Promise { method: 'POST', }) } + +export async function verifySite(id: string): Promise { + await apiRequest(`/sites/${id}/verify`, { + method: 'POST', + }) +}