Add Umami analytics tag to <head> on production builds

Inject the Umami tracking script into index.html via a build-only Vite
plugin (apply: 'build'), so it loads on production but never on the dev
server. Website id comes from PUBLIC_UMAMI_WEBSITE_ID with a fallback to
the gethumanai.pl stats id. The SPA serves PL and EN from the same
index.html, so both language versions get the tag.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
oskar 2026-06-24 17:00:29 +02:00
parent efc6ecf3c8
commit b519b49e0d

View file

@ -1,7 +1,28 @@
import { defineConfig } from 'vite'
import { defineConfig, loadEnv, type Plugin } from 'vite'
import react from '@vitejs/plugin-react'
const UMAMI_SRC = 'https://stats.gethumanai.pl/script.js'
// Fallback website id, used when PUBLIC_UMAMI_WEBSITE_ID is not provided.
const UMAMI_FALLBACK_ID = 'f5a3fd87-5ae1-408d-85a6-7af588484d37'
// Injects the Umami analytics tag into <head>. `apply: 'build'` means it runs
// only for production builds (`vite build`) — never on the dev server.
function umami(websiteId: string): Plugin {
return {
name: 'inject-umami',
apply: 'build',
transformIndexHtml(html) {
const tag = `<script defer src="${UMAMI_SRC}" data-website-id="${websiteId}"></script>`
return html.replace('</head>', ` ${tag}\n </head>`)
},
}
}
// https://vitejs.dev/config/
export default defineConfig({
plugins: [react()],
export default defineConfig(({ mode }) => {
const env = loadEnv(mode, process.cwd(), '')
const websiteId = env.PUBLIC_UMAMI_WEBSITE_ID || UMAMI_FALLBACK_ID
return {
plugins: [react(), umami(websiteId)],
}
})