feat: intégration nuxt-umami + refonte logo SVG TheHeader
ci/woodpecker/push/woodpecker Pipeline was successful

- nuxt-umami@3.2.1 installé, module configuré (host + website ID)
- suppression injection script manuelle dans app.vue
- TheHeader : logo § repassé en tracé SVG unique avec dégradé primary→accent

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Yvv
2026-04-22 03:39:39 +02:00
parent 2f444ea7c7
commit 84e843479d
5 changed files with 76 additions and 23 deletions
-11
View File
@@ -20,17 +20,6 @@ onMounted(() => paletteStore.applyToDOM())
const config = useRuntimeConfig() const config = useRuntimeConfig()
const siteUrl = (config.public.siteUrl as string) || 'https://librodrome.org' 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() // Global SEO defaults surchargeables page par page via useSeoPage()
useHead({ useHead({
titleTemplate: (title) => title ? `${title} — Le Librodrome` : 'Le Librodrome', titleTemplate: (title) => title ? `${title} — Le Librodrome` : 'Le Librodrome',
+15 -8
View File
@@ -3,13 +3,21 @@
<div class="container-content flex h-[var(--header-height)] items-center justify-between px-4"> <div class="container-content flex h-[var(--header-height)] items-center justify-between px-4">
<!-- Logo --> <!-- Logo -->
<NuxtLink to="/" class="logo-link flex items-center gap-2.5"> <NuxtLink to="/" class="logo-link flex items-center gap-2.5">
<svg class="logo-icon" viewBox="0 0 64 80" fill="none" aria-hidden="true"> <svg class="logo-icon" viewBox="0 0 46 78" fill="none" aria-hidden="true">
<path d="M38 8 C28 6 18 10 18 20 C18 28 26 32 34 34 C42 36 48 40 48 48 C48 52 46 55 42 57 L44 40 C44 36 40 32 34 30 C28 28 22 24 22 18 C22 14 24 11 28 10Z" fill="currentColor" opacity="0.9"/> <defs>
<path d="M26 72 C36 74 46 70 46 60 C46 52 38 48 30 46 C22 44 16 40 16 32 C16 28 18 25 22 23 L20 40 C20 44 24 48 30 50 C36 52 42 56 42 62 C42 66 40 69 36 70Z" fill="currentColor" opacity="0.9"/> <linearGradient id="sect-grad" x1="0" y1="0" x2="0" y2="1">
<path d="M20 16 C20 8 28 4 36 6 C42 8 46 14 44 20" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" fill="none" opacity="0.7"/> <stop offset="0%" stop-color="hsl(var(--color-primary))"/>
<path d="M44 64 C44 72 36 76 28 74 C22 72 18 66 20 60" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" fill="none" opacity="0.7"/> <stop offset="100%" stop-color="hsl(var(--color-accent))"/>
<path d="M36 4 Q42 2 46 6" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" fill="none" opacity="0.5"/> </linearGradient>
<path d="M28 76 Q22 78 18 74" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" fill="none" opacity="0.5"/> </defs>
<path
d="M 33 10 C 26 7 18 7 14 11 C 8 15 7 24 10 31 C 13 38 21 40 27 44 C 33 48 38 55 35 62 C 32 69 24 72 17 70 C 10 68 8 72 10 75 C 12 78 20 79 28 76"
stroke="url(#sect-grad)"
stroke-width="5"
stroke-linecap="round"
stroke-linejoin="round"
fill="none"
/>
</svg> </svg>
<span class="logo-text">{{ site?.identity.name }}</span> <span class="logo-text">{{ site?.identity.name }}</span>
</NuxtLink> </NuxtLink>
@@ -78,7 +86,6 @@ const allNav = computed(() => [...axes.value, ...extra.value])
.logo-icon { .logo-icon {
width: 1.6rem; width: 1.6rem;
height: 2rem; height: 2rem;
color: hsl(var(--color-primary));
flex-shrink: 0; flex-shrink: 0;
} }
+8
View File
@@ -15,8 +15,16 @@ export default defineNuxtConfig({
'@vueuse/nuxt', '@vueuse/nuxt',
'@nuxt/image', '@nuxt/image',
'@nuxtjs/sitemap', '@nuxtjs/sitemap',
'nuxt-umami',
], ],
umami: {
host: 'https://stats.librodrome.org',
id: '95ff616d-9ce1-47d9-bca2-f6ddc344a99a',
autoTrack: true,
ignoreLocalhost: true,
},
site: { site: {
url: 'https://librodrome.org', url: 'https://librodrome.org',
name: 'Le Librodrome', name: 'Le Librodrome',
+1
View File
@@ -18,6 +18,7 @@
"@vueuse/nuxt": "^14.2.1", "@vueuse/nuxt": "^14.2.1",
"better-sqlite3": "^12.6.2", "better-sqlite3": "^12.6.2",
"nuxt": "^4.3.1", "nuxt": "^4.3.1",
"nuxt-umami": "^3.2.1",
"pdfjs-dist": "^5.4.624", "pdfjs-dist": "^5.4.624",
"vue": "^3.5.28", "vue": "^3.5.28",
"vue-router": "^4.6.4", "vue-router": "^4.6.4",
+52 -4
View File
@@ -32,6 +32,9 @@ importers:
nuxt: nuxt:
specifier: ^4.3.1 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) 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: pdfjs-dist:
specifier: ^5.4.624 specifier: ^5.4.624
version: 5.4.624 version: 5.4.624
@@ -765,6 +768,10 @@ packages:
resolution: {integrity: sha512-otHi6gAoYXKLrp8m27ZjX1PjxOPaltQ4OiUs/BhkW995mF/vXf8SWQTw68fww+Uric0v+XgoVrP9icDi+yT6zw==} resolution: {integrity: sha512-otHi6gAoYXKLrp8m27ZjX1PjxOPaltQ4OiUs/BhkW995mF/vXf8SWQTw68fww+Uric0v+XgoVrP9icDi+yT6zw==}
engines: {node: '>=18.20.6'} 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': '@nuxt/kit@4.3.1':
resolution: {integrity: sha512-UjBFt72dnpc+83BV3OIbCT0YHLevJtgJCHpxMX0YRKWLDhhbcDdUse87GtsQBrjvOzK7WUNUYLDS/hQLYev5rA==} resolution: {integrity: sha512-UjBFt72dnpc+83BV3OIbCT0YHLevJtgJCHpxMX0YRKWLDhhbcDdUse87GtsQBrjvOzK7WUNUYLDS/hQLYev5rA==}
engines: {node: '>=18.12.0'} engines: {node: '>=18.12.0'}
@@ -3510,6 +3517,9 @@ packages:
nuxt-site-config@4.0.8: nuxt-site-config@4.0.8:
resolution: {integrity: sha512-H7wHoOJ5Z6ZnTqD5vUugaKkWZbejZ9kGmzpr2dheOaC6RdT8JafCfMrmJG7W+cyJiJJ3YmzL+bzPBW2bW6MExA==} resolution: {integrity: sha512-H7wHoOJ5Z6ZnTqD5vUugaKkWZbejZ9kGmzpr2dheOaC6RdT8JafCfMrmJG7W+cyJiJJ3YmzL+bzPBW2bW6MExA==}
nuxt-umami@3.2.1:
resolution: {integrity: sha512-82cf3kcrMn4Iq0rJ2Blfl48AqLWqRubEpxOinOoxqW7taZAd5SgZcCdCj7y4qXSt0W5DhBYgaq4IboyGFHoVUQ==}
nuxt@4.3.1: nuxt@4.3.1:
resolution: {integrity: sha512-bl+0rFcT5Ax16aiWFBFPyWcsTob19NTZaDL5P6t0MQdK63AtgS6fN6fwvwdbXtnTk6/YdCzlmuLzXhSM22h0OA==} resolution: {integrity: sha512-bl+0rFcT5Ax16aiWFBFPyWcsTob19NTZaDL5P6t0MQdK63AtgS6fN6fwvwdbXtnTk6/YdCzlmuLzXhSM22h0OA==}
engines: {node: ^20.19.0 || >=22.12.0} engines: {node: ^20.19.0 || >=22.12.0}
@@ -4019,6 +4029,9 @@ packages:
remark-stringify@11.0.0: remark-stringify@11.0.0:
resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==}
request-ip@3.3.0:
resolution: {integrity: sha512-cA6Xh6e0fDBBBwH77SLJaJPBmD3nWVAcF9/XAcsrIHdjhFzFiB5aNQFytdjCGPezU3ROwrR11IddKAM08vohxA==}
require-directory@2.1.1: require-directory@2.1.1:
resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
@@ -5681,6 +5694,32 @@ snapshots:
- magicast - magicast
- uploadthing - 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)': '@nuxt/kit@4.3.1(magicast@0.5.2)':
dependencies: dependencies:
c12: 3.3.3(magicast@0.5.2) c12: 3.3.3(magicast@0.5.2)
@@ -6975,9 +7014,9 @@ snapshots:
dependencies: dependencies:
acorn: 8.15.0 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: dependencies:
acorn: 8.15.0 acorn: 8.16.0
acorn@8.15.0: {} acorn@8.15.0: {}
@@ -8922,6 +8961,13 @@ snapshots:
- vue - vue
- zod - 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): 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: dependencies:
'@dxup/nuxt': 0.3.2(magicast@0.5.2) '@dxup/nuxt': 0.3.2(magicast@0.5.2)
@@ -9686,6 +9732,8 @@ snapshots:
mdast-util-to-markdown: 2.1.2 mdast-util-to-markdown: 2.1.2
unified: 11.0.5 unified: 11.0.5
request-ip@3.3.0: {}
require-directory@2.1.1: {} require-directory@2.1.1: {}
require-from-string@2.0.2: {} require-from-string@2.0.2: {}
@@ -10533,8 +10581,8 @@ snapshots:
'@webassemblyjs/ast': 1.14.1 '@webassemblyjs/ast': 1.14.1
'@webassemblyjs/wasm-edit': 1.14.1 '@webassemblyjs/wasm-edit': 1.14.1
'@webassemblyjs/wasm-parser': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1
acorn: 8.15.0 acorn: 8.16.0
acorn-import-phases: 1.0.4(acorn@8.15.0) acorn-import-phases: 1.0.4(acorn@8.16.0)
browserslist: 4.28.1 browserslist: 4.28.1
chrome-trace-event: 1.0.4 chrome-trace-event: 1.0.4
enhanced-resolve: 5.19.0 enhanced-resolve: 5.19.0