diff --git a/app/app.vue b/app/app.vue index 69bf52f..cea50e7 100644 --- a/app/app.vue +++ b/app/app.vue @@ -20,17 +20,6 @@ onMounted(() => paletteStore.applyToDOM()) const config = useRuntimeConfig() const siteUrl = (config.public.siteUrl as string) || 'https://librodrome.org' -// Umami analytics — inject script only when configured -if (config.public.umamiWebsiteId && config.public.umamiUrl) { - useHead({ - script: [{ - src: `${config.public.umamiUrl}/script.js`, - defer: true, - 'data-website-id': config.public.umamiWebsiteId, - }], - }) -} - // Global SEO defaults — surchargeables page par page via useSeoPage() useHead({ titleTemplate: (title) => title ? `${title} — Le Librodrome` : 'Le Librodrome', diff --git a/app/components/layout/TheHeader.vue b/app/components/layout/TheHeader.vue index 77585e2..d185516 100644 --- a/app/components/layout/TheHeader.vue +++ b/app/components/layout/TheHeader.vue @@ -3,13 +3,21 @@
- {{ site?.identity.name }} @@ -78,7 +86,6 @@ const allNav = computed(() => [...axes.value, ...extra.value]) .logo-icon { width: 1.6rem; height: 2rem; - color: hsl(var(--color-primary)); flex-shrink: 0; } diff --git a/nuxt.config.ts b/nuxt.config.ts index eee5adf..490c39d 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -15,8 +15,16 @@ export default defineNuxtConfig({ '@vueuse/nuxt', '@nuxt/image', '@nuxtjs/sitemap', + 'nuxt-umami', ], + umami: { + host: 'https://stats.librodrome.org', + id: '95ff616d-9ce1-47d9-bca2-f6ddc344a99a', + autoTrack: true, + ignoreLocalhost: true, + }, + site: { url: 'https://librodrome.org', name: 'Le Librodrome', diff --git a/package.json b/package.json index b9f8f1c..bd67aa3 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "@vueuse/nuxt": "^14.2.1", "better-sqlite3": "^12.6.2", "nuxt": "^4.3.1", + "nuxt-umami": "^3.2.1", "pdfjs-dist": "^5.4.624", "vue": "^3.5.28", "vue-router": "^4.6.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0e73a01..d8e1615 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -32,6 +32,9 @@ importers: nuxt: specifier: ^4.3.1 version: 4.3.1(@parcel/watcher@2.5.6)(@types/node@25.2.3)(@vue/compiler-sfc@3.5.28)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.6.2))(ioredis@5.9.3)(magicast@0.5.2)(rollup@4.57.1)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(terser@5.46.0)(yaml@2.8.2))(yaml@2.8.2) + nuxt-umami: + specifier: ^3.2.1 + version: 3.2.1(magicast@0.5.2) pdfjs-dist: specifier: ^5.4.624 version: 5.4.624 @@ -765,6 +768,10 @@ packages: resolution: {integrity: sha512-otHi6gAoYXKLrp8m27ZjX1PjxOPaltQ4OiUs/BhkW995mF/vXf8SWQTw68fww+Uric0v+XgoVrP9icDi+yT6zw==} engines: {node: '>=18.20.6'} + '@nuxt/kit@3.21.2': + resolution: {integrity: sha512-Bd6m6mrDrqpBEbX+g0rc66/ALd1sxlgdx5nfK9MAYO0yKLTOSK7McSYz1KcOYn3LQFCXOWfvXwaqih/b+REI1g==} + engines: {node: '>=18.12.0'} + '@nuxt/kit@4.3.1': resolution: {integrity: sha512-UjBFt72dnpc+83BV3OIbCT0YHLevJtgJCHpxMX0YRKWLDhhbcDdUse87GtsQBrjvOzK7WUNUYLDS/hQLYev5rA==} engines: {node: '>=18.12.0'} @@ -3510,6 +3517,9 @@ packages: nuxt-site-config@4.0.8: resolution: {integrity: sha512-H7wHoOJ5Z6ZnTqD5vUugaKkWZbejZ9kGmzpr2dheOaC6RdT8JafCfMrmJG7W+cyJiJJ3YmzL+bzPBW2bW6MExA==} + nuxt-umami@3.2.1: + resolution: {integrity: sha512-82cf3kcrMn4Iq0rJ2Blfl48AqLWqRubEpxOinOoxqW7taZAd5SgZcCdCj7y4qXSt0W5DhBYgaq4IboyGFHoVUQ==} + nuxt@4.3.1: resolution: {integrity: sha512-bl+0rFcT5Ax16aiWFBFPyWcsTob19NTZaDL5P6t0MQdK63AtgS6fN6fwvwdbXtnTk6/YdCzlmuLzXhSM22h0OA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -4019,6 +4029,9 @@ packages: remark-stringify@11.0.0: resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + request-ip@3.3.0: + resolution: {integrity: sha512-cA6Xh6e0fDBBBwH77SLJaJPBmD3nWVAcF9/XAcsrIHdjhFzFiB5aNQFytdjCGPezU3ROwrR11IddKAM08vohxA==} + require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -5681,6 +5694,32 @@ snapshots: - magicast - uploadthing + '@nuxt/kit@3.21.2(magicast@0.5.2)': + dependencies: + c12: 3.3.3(magicast@0.5.2) + consola: 3.4.2 + defu: 6.1.7 + destr: 2.0.5 + errx: 0.1.0 + exsolve: 1.0.8 + ignore: 7.0.5 + jiti: 2.6.1 + klona: 2.0.6 + knitwork: 1.3.0 + mlly: 1.8.2 + ohash: 2.0.11 + pathe: 2.0.3 + pkg-types: 2.3.0 + rc9: 3.0.0 + scule: 1.3.0 + semver: 7.7.4 + tinyglobby: 0.2.15 + ufo: 1.6.3 + unctx: 2.5.0 + untyped: 2.0.0 + transitivePeerDependencies: + - magicast + '@nuxt/kit@4.3.1(magicast@0.5.2)': dependencies: c12: 3.3.3(magicast@0.5.2) @@ -6975,9 +7014,9 @@ snapshots: dependencies: acorn: 8.15.0 - acorn-import-phases@1.0.4(acorn@8.15.0): + acorn-import-phases@1.0.4(acorn@8.16.0): dependencies: - acorn: 8.15.0 + acorn: 8.16.0 acorn@8.15.0: {} @@ -8922,6 +8961,13 @@ snapshots: - vue - zod + nuxt-umami@3.2.1(magicast@0.5.2): + dependencies: + '@nuxt/kit': 3.21.2(magicast@0.5.2) + request-ip: 3.3.0 + transitivePeerDependencies: + - magicast + nuxt@4.3.1(@parcel/watcher@2.5.6)(@types/node@25.2.3)(@vue/compiler-sfc@3.5.28)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.6.2))(ioredis@5.9.3)(magicast@0.5.2)(rollup@4.57.1)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(terser@5.46.0)(yaml@2.8.2))(yaml@2.8.2): dependencies: '@dxup/nuxt': 0.3.2(magicast@0.5.2) @@ -9686,6 +9732,8 @@ snapshots: mdast-util-to-markdown: 2.1.2 unified: 11.0.5 + request-ip@3.3.0: {} + require-directory@2.1.1: {} require-from-string@2.0.2: {} @@ -10533,8 +10581,8 @@ snapshots: '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/wasm-edit': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 - acorn: 8.15.0 - acorn-import-phases: 1.0.4(acorn@8.15.0) + acorn: 8.16.0 + acorn-import-phases: 1.0.4(acorn@8.16.0) browserslist: 4.28.1 chrome-trace-event: 1.0.4 enhanced-resolve: 5.19.0