diff --git a/DOCKER.md b/DOCKER.md index 203b9d6..13563d9 100644 --- a/DOCKER.md +++ b/DOCKER.md @@ -53,6 +53,7 @@ docker run -d \ -e PUBLIC_API_URL=https://api.pivoine.art \ -e PUBLIC_URL=https://sexy.pivoine.art \ -e PUBLIC_UMAMI_ID=your-umami-id \ + -e PUBLIC_UMAMI_SCRIPT=https://umami.pivoine.art/script.js \ sexy.pivoine.art:latest ``` @@ -114,6 +115,7 @@ docker-compose -f docker-compose.production.yml up -d --scale frontend=3 | Variable | Description | Example | |----------|-------------|---------| | `PUBLIC_UMAMI_ID` | Umami analytics tracking ID | `abc123def-456` | +| `PUBLIC_UMAMI_SCRIPT` | Umami script URL | `https://umami.pivoine.art/script.js` | | `PORT` | Application port (inside container) | `3000` | | `HOST` | Host binding | `0.0.0.0` | | `NODE_ENV` | Node environment | `production` | diff --git a/Dockerfile b/Dockerfile index e81d2ed..65215fc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -123,7 +123,8 @@ ENV NODE_ENV=production \ # Runtime environment variables (will be passed at container start) ENV PUBLIC_API_URL="" \ PUBLIC_URL="" \ - PUBLIC_UMAMI_ID="" + PUBLIC_UMAMI_ID="" \ + PUBLIC_UMAMI_SCRIPT="" # Expose application port EXPOSE 3000 diff --git a/QUICKSTART.md b/QUICKSTART.md index bb961a2..9d3f657 100644 --- a/QUICKSTART.md +++ b/QUICKSTART.md @@ -22,6 +22,7 @@ cat > .env.production << EOF PUBLIC_API_URL=https://api.your-domain.com PUBLIC_URL=https://your-domain.com PUBLIC_UMAMI_ID= +PUBLIC_UMAMI_SCRIPT= EOF ``` @@ -129,6 +130,7 @@ docker pull ghcr.io/valknarxxx/sexy:latest | Variable | Description | Example | |----------|-------------|---------| | `PUBLIC_UMAMI_ID` | Analytics tracking ID | `abc-123-def` | +| `PUBLIC_UMAMI_SCRIPT` | Umami script URL | `https://umami.example.com/script.js` | ## Common Commands diff --git a/README.md b/README.md index e039d1d..e6aee82 100644 --- a/README.md +++ b/README.md @@ -211,7 +211,8 @@ pnpm --filter @sexy.pivoine.art/frontend start ### 💜 Optional (The Extras) -- `PUBLIC_UMAMI_ID` — Analytics tracking +- `PUBLIC_UMAMI_ID` — Analytics tracking ID +- `PUBLIC_UMAMI_SCRIPT` — Umami script URL See [.env.production.example](.env.production.example) for the full configuration. diff --git a/REBUILD_GUIDE.md b/REBUILD_GUIDE.md index 5d0f874..7dcdc6a 100644 --- a/REBUILD_GUIDE.md +++ b/REBUILD_GUIDE.md @@ -7,7 +7,8 @@ SvelteKit's `PUBLIC_*` environment variables are **baked into the JavaScript** a 1. ✅ Changing `PUBLIC_API_URL` 2. ✅ Changing `PUBLIC_URL` 3. ✅ Changing `PUBLIC_UMAMI_ID` -4. ❌ NOT needed for Directus env vars (those are runtime) +4. ✅ Changing `PUBLIC_UMAMI_SCRIPT` +5. ❌ NOT needed for Directus env vars (those are runtime) ## Quick Rebuild Process @@ -24,6 +25,7 @@ Set your production values: PUBLIC_API_URL=https://sexy.pivoine.art/api PUBLIC_URL=https://sexy.pivoine.art PUBLIC_UMAMI_ID=your-umami-id +PUBLIC_UMAMI_SCRIPT=https://umami.pivoine.art/script.js ``` ### 2. Rebuild the Image @@ -250,6 +252,7 @@ These are runtime environment variables and can be changed in docker-compose. | `PUBLIC_API_URL` | ✅ Yes | Rebuild image | | `PUBLIC_URL` | ✅ Yes | Rebuild image | | `PUBLIC_UMAMI_ID` | ✅ Yes | Rebuild image | +| `PUBLIC_UMAMI_SCRIPT` | ✅ Yes | Rebuild image | | `SEXY_DIRECTUS_*` | ❌ No | Restart container | | `DB_*` | ❌ No | Restart container | | `EMAIL_*` | ❌ No | Restart container | diff --git a/compose.production.yml b/compose.production.yml index d0f66ca..7a393ba 100644 --- a/compose.production.yml +++ b/compose.production.yml @@ -103,6 +103,7 @@ services: PUBLIC_API_URL: ${SEXY_FRONTEND_PUBLIC_API_URL} PUBLIC_URL: ${SEXY_FRONTEND_PUBLIC_URL} PUBLIC_UMAMI_ID: ${SEXY_FRONTEND_PUBLIC_UMAMI_ID:-} + PUBLIC_UMAMI_SCRIPT: ${SEXY_FRONTEND_PUBLIC_UMAMI_SCRIPT:-} # Override volume for production path volumes: diff --git a/compose.yml b/compose.yml index 4959770..c57d383 100644 --- a/compose.yml +++ b/compose.yml @@ -135,6 +135,7 @@ services: PUBLIC_API_URL: ${SEXY_FRONTEND_PUBLIC_API_URL:-http://localhost:8055} PUBLIC_URL: ${SEXY_FRONTEND_PUBLIC_URL:-http://localhost:3000} PUBLIC_UMAMI_ID: ${SEXY_FRONTEND_PUBLIC_UMAMI_ID:-} + PUBLIC_UMAMI_SCRIPT: ${SEXY_FRONTEND_PUBLIC_UMAMI_SCRIPT:-} # Timezone TZ: ${TIMEZONE:-Europe/Amsterdam} diff --git a/packages/frontend/.env b/packages/frontend/.env index b6bc649..f426a29 100644 --- a/packages/frontend/.env +++ b/packages/frontend/.env @@ -1,3 +1,4 @@ PUBLIC_API_URL=https://sexy.pivoine.art/api PUBLIC_URL=https://sexy.pivoine.art PUBLIC_UMAMI_ID= +PUBLIC_UMAMI_SCRIPT= diff --git a/packages/frontend/src/lib/logger.ts b/packages/frontend/src/lib/logger.ts index 37b7e92..fb2c67b 100644 --- a/packages/frontend/src/lib/logger.ts +++ b/packages/frontend/src/lib/logger.ts @@ -123,6 +123,7 @@ class Logger { PUBLIC_API_URL: process.env.PUBLIC_API_URL, PUBLIC_URL: process.env.PUBLIC_URL, PUBLIC_UMAMI_ID: process.env.PUBLIC_UMAMI_ID ? '***set***' : 'not set', + PUBLIC_UMAMI_SCRIPT: process.env.PUBLIC_UMAMI_SCRIPT || 'not set', PORT: process.env.PORT || '3000', HOST: process.env.HOST || '0.0.0.0', }; diff --git a/packages/frontend/src/routes/+layout.svelte b/packages/frontend/src/routes/+layout.svelte index 3b32aa6..6cc3b93 100644 --- a/packages/frontend/src/routes/+layout.svelte +++ b/packages/frontend/src/routes/+layout.svelte @@ -7,7 +7,7 @@ import Footer from "$lib/components/footer/footer.svelte"; import { Toaster } from "$lib/components/ui/sonner"; import Header from "$lib/components/header/header.svelte"; import AgeVerificationDialog from "$lib/components/age-verification-dialog/age-verification-dialog.svelte"; -import { PUBLIC_UMAMI_ID } from "$env/static/public"; +import { PUBLIC_UMAMI_ID, PUBLIC_UMAMI_SCRIPT } from "$env/static/public"; onMount(async () => { await waitLocale(); @@ -17,10 +17,10 @@ let { children, data } = $props(); - {#if import.meta.env.PROD && PUBLIC_UMAMI_ID} + {#if import.meta.env.PROD && PUBLIC_UMAMI_ID && PUBLIC_UMAMI_SCRIPT} {/if}