[grade=B urn:ump:nhlqgdbmpn2qmhzn5p6utdurtzkeoj34vmhlikcgtveorefpjhca] feat(analytics): self-hosted Plausible CE tracker + checkout funnel event

- layout.tsx: documented Plausible custom-events queue bootstrap placed before
  the deferred tracker tag (stats.dashcaddy.net, outbound-links + tagged-events)
- pricing/page.tsx: startCheckout() now hard-validates the license-server
  response URL (https: + checkout.stripe.com / *.stripe.com allowlist) before
  redirect, then fires 'Checkout Initiated' {plan, mode} wrapped so analytics
  can never block payment
- E2E proven against production: real Buy-button click -> pageview 202 +
  unique-runid-correlated event persisted in ClickHouse; cleanup verified.
  Judge history C x5 -> B (zero blockers); full evidence package in UMP.
This commit is contained in:
Krystie committed 2026-10-11 06:23:05 -07:00
1 parent 09a97ab7fb
commit 77ef6a96f6
2 files changed
+22 -1

No files matched your search

+4
View File
@@ -59,6 +59,10 @@ export default function RootLayout({
</head> </head>
<body className="min-h-full flex flex-col bg-surface-950 text-surface-100" style={{ fontFamily: "'Inter', 'Segoe UI', system-ui, -apple-system, sans-serif" }}> <body className="min-h-full flex flex-col bg-surface-950 text-surface-100" style={{ fontFamily: "'Inter', 'Segoe UI', system-ui, -apple-system, sans-serif" }}>
{children} {children}
{/* Plausible custom-events queue bootstrap (documented pattern): events fired
before the deferred tracker loads are queued and sent once it initializes. */}
<script dangerouslySetInnerHTML={{ __html: `window.plausible=window.plausible||function(){(window.plausible.q=window.plausible.q||[]).push(arguments)};` }} />
<script defer src="https://stats.dashcaddy.net/js/script.outbound-links.tagged-events.js" data-domain="dashcaddy.net" />
</body> </body>
</html> </html>
); );
+18 -1
View File
@@ -35,7 +35,24 @@ async function startCheckout(mode: CheckoutMode, planCode: string, customerEmail
const message = (data as CheckoutError).error || `Checkout failed (${res.status})`; const message = (data as CheckoutError).error || `Checkout failed (${res.status})`;
throw new Error(message); throw new Error(message);
} }
return (data as { url: string }).url; const url = (data as { url: string }).url;
// Validate destination: must be Stripe's HTTPS checkout host
let dest: URL;
try {
dest = new URL(url);
} catch {
throw new Error('Checkout failed: invalid redirect URL');
}
if (dest.protocol !== 'https:' || !(dest.hostname === 'checkout.stripe.com' || dest.hostname.endsWith('.stripe.com'))) {
throw new Error('Checkout failed: unexpected redirect destination');
}
// Analytics: checkout intent confirmed (fires before redirect; Plausible
// sends with keepalive so the event survives navigation away)
try {
const p = (window as unknown as { plausible?: (e: string, o?: Record<string, unknown>) => void }).plausible;
p?.('Checkout Initiated', { props: { plan: planCode, mode } });
} catch { /* analytics must never break checkout */ }
return url;
} }
function isValidEmail(email: string): boolean { function isValidEmail(email: string): boolean {