From 7d5f91d80f018bf6bf469d7d8884f17cc3013534 Mon Sep 17 00:00:00 2001 From: mtvpls-turso Date: Sat, 11 Jul 2026 19:01:16 +0000 Subject: [PATCH] feat: add Microsoft Clarity analytics provider Add Microsoft Clarity as a fourth analytics provider option alongside Umami, Google Analytics, and Custom. Clarity provides free heatmaps, session recordings, and user analytics. - admin.types.ts: Add 'clarity' to AnalyticsProvider union type - api/admin/site/route.ts: Add 'clarity' to validation - admin/page.tsx: Add Clarity option to dropdown + Project ID input UI - layout.tsx: Inject Clarity tracking script with project ID --- src/app/admin/page.tsx | 28 ++++++++++++++++++++++++++-- src/app/api/admin/site/route.ts | 3 ++- src/app/layout.tsx | 9 ++++++++- src/lib/admin.types.ts | 2 +- 4 files changed, 37 insertions(+), 5 deletions(-) diff --git a/src/app/admin/page.tsx b/src/app/admin/page.tsx index 2490a27..2175885 100644 --- a/src/app/admin/page.tsx +++ b/src/app/admin/page.tsx @@ -408,7 +408,7 @@ interface SiteConfig { OIDCClientSecret?: string; OIDCButtonText?: string; AnalyticsEnabled?: boolean; - AnalyticsProvider?: 'umami' | 'google' | 'custom'; + AnalyticsProvider?: 'umami' | 'google' | 'clarity' | 'custom'; AnalyticsScriptUrl?: string; AnalyticsWebsiteId?: string; AnalyticsCustomScript?: string; @@ -11597,13 +11597,14 @@ const SiteConfigComponent = ({ onChange={(e) => setSiteSettings((prev) => ({ ...prev, - AnalyticsProvider: e.target.value as 'umami' | 'google' | 'custom', + AnalyticsProvider: e.target.value as 'umami' | 'google' | 'clarity' | 'custom', })) } className='mt-1 block w-full rounded-md border border-gray-300 px-3 py-2 text-sm dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200' > + @@ -11676,6 +11677,29 @@ const SiteConfigComponent = ({ )} + {siteSettings.AnalyticsProvider === 'clarity' && ( +
+ + + setSiteSettings((prev) => ({ + ...prev, + AnalyticsWebsiteId: e.target.value, + })) + } + placeholder='e.g. abc1234567' + className='mt-1 block w-full rounded-md border border-gray-300 px-3 py-2 text-sm dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200' + /> +

+ Microsoft Clarity 的 Project ID,在 clarity.microsoft.com 项目设置中获取 +

+
+ )} + {siteSettings.AnalyticsProvider === 'custom' && (