Add PostHog, move Plausible to v4, and drop Sentry session replay

PostHog loads after the page is idle through a same-origin /ingest proxy and follows the signed-in Convex user. Plausible uses the per-site script through a /pa proxy, clear of Payload's /api routes. Sentry keeps errors and traces only. Pages load only the @gib/ui modules they import, and client code reads public env from publicEnv.ts so zod stays out of the browser.
This commit is contained in:
Gabriel Brown committed 2026-10-01 14:42:29 -04:00
1 parent 1af6b43b1a
commit f39376a887
14 files changed
+318 -102

No files matched your search

+5 -17
View File
@@ -1,20 +1,8 @@
import { cx } from 'class-variance-authority';
import { twMerge } from 'tailwind-merge';
export const cn = (...inputs: Parameters<typeof cx>) => twMerge(cx(inputs));
export const ccn = ({
context,
className,
on = '',
off = '',
}: {
context: boolean;
className: string;
on: string;
off: string;
}) => twMerge(className, context ? on : off);
// Re-exports only. The Next app lists @gib/ui in `optimizePackageImports`,
// which resolves each named import straight to its own module so a page that
// uses Button never loads Chart (and Recharts). That only works while nothing
// is declared in this file.
export { cn, ccn } from './utils';
export {
Accordion,
AccordionItem,
+16
View File
@@ -0,0 +1,16 @@
import { cx } from 'class-variance-authority';
import { twMerge } from 'tailwind-merge';
export const cn = (...inputs: Parameters<typeof cx>) => twMerge(cx(inputs));
export const ccn = ({
context,
className,
on = '',
off = '',
}: {
context: boolean;
className: string;
on: string;
off: string;
}) => twMerge(className, context ? on : off);