From 9eaaa798a3f8a1993dd05bdca84b4ce061b43bd0 Mon Sep 17 00:00:00 2001 From: Marc Mintel Date: Mon, 9 Feb 2026 19:30:52 +0100 Subject: [PATCH] fix: umami --- .gitea/workflows/deploy.yml | 2 ++ Dockerfile | 2 ++ app/[locale]/layout.tsx | 9 +++++++-- lib/config.ts | 6 ++++-- lib/env.ts | 5 +++++ 5 files changed, 20 insertions(+), 4 deletions(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 6556a3e..81fc1f7 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -200,6 +200,7 @@ jobs: --build-arg NEXT_PUBLIC_TARGET=${{ needs.prepare.outputs.target }} \ --build-arg DIRECTUS_URL=${{ needs.prepare.outputs.directus_url }} \ --build-arg UMAMI_API_ENDPOINT=${{ secrets.UMAMI_API_ENDPOINT || secrets.NEXT_PUBLIC_UMAMI_SCRIPT_URL || vars.UMAMI_API_ENDPOINT || 'https://analytics.infra.mintel.me' }} \ + --build-arg NEXT_PUBLIC_UMAMI_WEBSITE_ID=${{ secrets.UMAMI_WEBSITE_ID || secrets.NEXT_PUBLIC_UMAMI_WEBSITE_ID || vars.UMAMI_WEBSITE_ID || vars.NEXT_PUBLIC_UMAMI_WEBSITE_ID }} \ -t registry.infra.mintel.me/mintel/mb-grid-solutions:${{ needs.prepare.outputs.image_tag }} \ --push . @@ -269,6 +270,7 @@ jobs: GOTIFY_URL=${{ secrets.GOTIFY_URL || vars.GOTIFY_URL }} GOTIFY_TOKEN=${{ secrets.GOTIFY_TOKEN || vars.GOTIFY_TOKEN }} UMAMI_WEBSITE_ID=${{ secrets.UMAMI_WEBSITE_ID || secrets.NEXT_PUBLIC_UMAMI_WEBSITE_ID || vars.UMAMI_WEBSITE_ID || vars.NEXT_PUBLIC_UMAMI_WEBSITE_ID }} + NEXT_PUBLIC_UMAMI_WEBSITE_ID=${{ secrets.UMAMI_WEBSITE_ID || secrets.NEXT_PUBLIC_UMAMI_WEBSITE_ID || vars.UMAMI_WEBSITE_ID || vars.NEXT_PUBLIC_UMAMI_WEBSITE_ID }} UMAMI_API_ENDPOINT=${{ secrets.UMAMI_API_ENDPOINT || secrets.NEXT_PUBLIC_UMAMI_SCRIPT_URL || vars.UMAMI_API_ENDPOINT || 'https://analytics.infra.mintel.me' }} # Project diff --git a/Dockerfile b/Dockerfile index b4f8d17..0b396f1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,12 +11,14 @@ ARG NEXT_PUBLIC_BASE_URL ARG UMAMI_API_ENDPOINT ARG NEXT_PUBLIC_TARGET ARG DIRECTUS_URL +ARG NEXT_PUBLIC_UMAMI_WEBSITE_ID ARG NPM_TOKEN ENV NEXT_PUBLIC_BASE_URL=$NEXT_PUBLIC_BASE_URL ENV UMAMI_API_ENDPOINT=$UMAMI_API_ENDPOINT ENV NEXT_PUBLIC_TARGET=$NEXT_PUBLIC_TARGET ENV DIRECTUS_URL=$DIRECTUS_URL +ENV NEXT_PUBLIC_UMAMI_WEBSITE_ID=$NEXT_PUBLIC_UMAMI_WEBSITE_ID ENV NPM_TOKEN=$NPM_TOKEN ENV SENTRY_SUPPRESS_TURBOPACK_WARNING=1 ENV SKIP_RUNTIME_ENV_VALIDATION=true diff --git a/app/[locale]/layout.tsx b/app/[locale]/layout.tsx index b1ba814..266c475 100644 --- a/app/[locale]/layout.tsx +++ b/app/[locale]/layout.tsx @@ -6,6 +6,8 @@ import { NextIntlClientProvider } from "next-intl"; import { getMessages } from "next-intl/server"; import { notFound } from "next/navigation"; import { LazyMotion, domAnimation } from "framer-motion"; +import AnalyticsProvider from "@/components/analytics/AnalyticsProvider"; +import { config } from "@/lib/config"; const inter = Inter({ subsets: ["latin"], @@ -108,10 +110,12 @@ export default async function RootLayout({ // Track pageview on the server // This is safe to call here because layout is a Server Component - const services = ( + const serverServices = ( await import("@/lib/services/create-services.server") ).getServerAppServices(); - services.analytics.trackPageview(); + + // Track server-side (initial load) + serverServices.analytics.trackPageview("/"); return ( @@ -123,6 +127,7 @@ export default async function RootLayout({ + {children} diff --git a/lib/config.ts b/lib/config.ts index 394af32..3f579db 100644 --- a/lib/config.ts +++ b/lib/config.ts @@ -27,9 +27,11 @@ function createConfig() { analytics: { umami: { - websiteId: env.UMAMI_WEBSITE_ID, + websiteId: env.NEXT_PUBLIC_UMAMI_WEBSITE_ID || env.UMAMI_WEBSITE_ID, apiEndpoint: env.UMAMI_API_ENDPOINT, - enabled: Boolean(env.UMAMI_WEBSITE_ID), + enabled: Boolean( + env.NEXT_PUBLIC_UMAMI_WEBSITE_ID || env.UMAMI_WEBSITE_ID, + ), }, }, diff --git a/lib/env.ts b/lib/env.ts index e741fd3..4eb01e1 100644 --- a/lib/env.ts +++ b/lib/env.ts @@ -26,6 +26,10 @@ export const envSchema = z preprocessEmptyString, z.string().optional(), ), + NEXT_PUBLIC_UMAMI_WEBSITE_ID: z.preprocess( + preprocessEmptyString, + z.string().optional(), + ), UMAMI_API_ENDPOINT: z.preprocess( preprocessEmptyString, z.string().url().default("https://analytics.infra.mintel.me"), @@ -115,6 +119,7 @@ export function getRawEnv() { NEXT_PUBLIC_TARGET: process.env.NEXT_PUBLIC_TARGET, UMAMI_WEBSITE_ID: process.env.UMAMI_WEBSITE_ID || process.env.NEXT_PUBLIC_UMAMI_WEBSITE_ID, + NEXT_PUBLIC_UMAMI_WEBSITE_ID: process.env.NEXT_PUBLIC_UMAMI_WEBSITE_ID, UMAMI_API_ENDPOINT: process.env.UMAMI_API_ENDPOINT || process.env.UMAMI_SCRIPT_URL ||