diff --git a/ui/package-lock.json b/ui/package-lock.json index a15fae8..e6fa7b5 100644 --- a/ui/package-lock.json +++ b/ui/package-lock.json @@ -14,6 +14,7 @@ "@sveltejs/kit": "^2.63.0", "@sveltejs/vite-plugin-svelte": "^7.1.2", "@tailwindcss/vite": "^4.3.0", + "@types/node": "^26.2.0", "svelte": "^5.56.1", "svelte-check": "^4.6.0", "tailwindcss": "^4.3.0", @@ -867,6 +868,16 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/node": { + "version": "26.2.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.2.0.tgz", + "integrity": "sha512-5IviulTZeRNp2vAJ514cc/HUlY5nZ9fCbq9DMyC52BrhFZACo3nI0R7qBxhQmo/d27NFe96ur/b7Wwxklda+kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~8.3.0" + } + }, "node_modules/@types/trusted-types": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", @@ -2350,6 +2361,13 @@ "node": ">=14.17" } }, + "node_modules/undici-types": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.3.0.tgz", + "integrity": "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==", + "dev": true, + "license": "MIT" + }, "node_modules/uqr": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/uqr/-/uqr-0.1.3.tgz", diff --git a/ui/package.json b/ui/package.json index 53e07b4..e1ca7ae 100644 --- a/ui/package.json +++ b/ui/package.json @@ -18,6 +18,7 @@ "@sveltejs/kit": "^2.63.0", "@sveltejs/vite-plugin-svelte": "^7.1.2", "@tailwindcss/vite": "^4.3.0", + "@types/node": "^26.2.0", "svelte": "^5.56.1", "svelte-check": "^4.6.0", "tailwindcss": "^4.3.0", diff --git a/ui/src/app.d.ts b/ui/src/app.d.ts index da08e6d..dfce0b0 100644 --- a/ui/src/app.d.ts +++ b/ui/src/app.d.ts @@ -8,6 +8,9 @@ declare global { // interface PageState {} // interface Platform {} } + + // Filenames in static/photos, injected at build time (see vite.config.ts). + const __PHOTO_FILES__: string[]; } export {}; diff --git a/ui/src/lib/components/PhotoBackground.svelte b/ui/src/lib/components/PhotoBackground.svelte index 660e5a8..795d0a9 100644 --- a/ui/src/lib/components/PhotoBackground.svelte +++ b/ui/src/lib/components/PhotoBackground.svelte @@ -2,14 +2,9 @@ import { backOut, cubicIn } from "svelte/easing"; import { browser } from "$app/environment"; - const modules = import.meta.glob( - "../../../assets/photos/*.{jpg,jpeg,png,JPG,JPEG,PNG}", - { - eager: true, - import: "default", - query: "?url", - }, - ) as Record; + const photoUrls = __PHOTO_FILES__.map( + (name) => `/photos/${encodeURIComponent(name)}`, + ); function shuffle(items: T[]): T[] { const result = [...items]; @@ -56,7 +51,7 @@ $effect(() => { if (!browser) return; - photos = shuffle(Object.values(modules)); + photos = shuffle(photoUrls); }); $effect(() => { diff --git a/ui/assets/photos/13.jpg b/ui/static/photos/13.jpg similarity index 100% rename from ui/assets/photos/13.jpg rename to ui/static/photos/13.jpg diff --git a/ui/assets/photos/15.jpg b/ui/static/photos/15.jpg similarity index 100% rename from ui/assets/photos/15.jpg rename to ui/static/photos/15.jpg diff --git a/ui/assets/photos/4.jpg b/ui/static/photos/4.jpg similarity index 100% rename from ui/assets/photos/4.jpg rename to ui/static/photos/4.jpg diff --git a/ui/assets/photos/Elite_Models_250.jpg b/ui/static/photos/Elite_Models_250.jpg similarity index 100% rename from ui/assets/photos/Elite_Models_250.jpg rename to ui/static/photos/Elite_Models_250.jpg diff --git a/ui/assets/photos/Engagement 2023.jpg b/ui/static/photos/Engagement 2023.jpg similarity index 100% rename from ui/assets/photos/Engagement 2023.jpg rename to ui/static/photos/Engagement 2023.jpg diff --git a/ui/assets/photos/FB_IMG_1703527669142.jpg b/ui/static/photos/FB_IMG_1703527669142.jpg similarity index 100% rename from ui/assets/photos/FB_IMG_1703527669142.jpg rename to ui/static/photos/FB_IMG_1703527669142.jpg diff --git a/ui/assets/photos/FB_IMG_1743444484838.jpg b/ui/static/photos/FB_IMG_1743444484838.jpg similarity index 100% rename from ui/assets/photos/FB_IMG_1743444484838.jpg rename to ui/static/photos/FB_IMG_1743444484838.jpg diff --git a/ui/assets/photos/IFKB8122.JPG b/ui/static/photos/IFKB8122.JPG similarity index 100% rename from ui/assets/photos/IFKB8122.JPG rename to ui/static/photos/IFKB8122.JPG diff --git a/ui/assets/photos/IMG-20201003-WA0004.jpg b/ui/static/photos/IMG-20201003-WA0004.jpg similarity index 100% rename from ui/assets/photos/IMG-20201003-WA0004.jpg rename to ui/static/photos/IMG-20201003-WA0004.jpg diff --git a/ui/assets/photos/IMG-20211024-WA0017.jpg b/ui/static/photos/IMG-20211024-WA0017.jpg similarity index 100% rename from ui/assets/photos/IMG-20211024-WA0017.jpg rename to ui/static/photos/IMG-20211024-WA0017.jpg diff --git a/ui/assets/photos/IMG-20220131-WA0069.jpg b/ui/static/photos/IMG-20220131-WA0069.jpg similarity index 100% rename from ui/assets/photos/IMG-20220131-WA0069.jpg rename to ui/static/photos/IMG-20220131-WA0069.jpg diff --git a/ui/assets/photos/IMG-20220316-WA0022.jpg b/ui/static/photos/IMG-20220316-WA0022.jpg similarity index 100% rename from ui/assets/photos/IMG-20220316-WA0022.jpg rename to ui/static/photos/IMG-20220316-WA0022.jpg diff --git a/ui/assets/photos/IMG-20231002-WA0001.jpg b/ui/static/photos/IMG-20231002-WA0001.jpg similarity index 100% rename from ui/assets/photos/IMG-20231002-WA0001.jpg rename to ui/static/photos/IMG-20231002-WA0001.jpg diff --git a/ui/assets/photos/IMG-20240418-WA0011.jpg b/ui/static/photos/IMG-20240418-WA0011.jpg similarity index 100% rename from ui/assets/photos/IMG-20240418-WA0011.jpg rename to ui/static/photos/IMG-20240418-WA0011.jpg diff --git a/ui/assets/photos/IMG-20240418-WA0029.jpg b/ui/static/photos/IMG-20240418-WA0029.jpg similarity index 100% rename from ui/assets/photos/IMG-20240418-WA0029.jpg rename to ui/static/photos/IMG-20240418-WA0029.jpg diff --git a/ui/assets/photos/IMG-20240418-WA0035.jpg b/ui/static/photos/IMG-20240418-WA0035.jpg similarity index 100% rename from ui/assets/photos/IMG-20240418-WA0035.jpg rename to ui/static/photos/IMG-20240418-WA0035.jpg diff --git a/ui/assets/photos/IMG-20240418-WA0050.jpg b/ui/static/photos/IMG-20240418-WA0050.jpg similarity index 100% rename from ui/assets/photos/IMG-20240418-WA0050.jpg rename to ui/static/photos/IMG-20240418-WA0050.jpg diff --git a/ui/assets/photos/IMG-20240418-WA0059.jpg b/ui/static/photos/IMG-20240418-WA0059.jpg similarity index 100% rename from ui/assets/photos/IMG-20240418-WA0059.jpg rename to ui/static/photos/IMG-20240418-WA0059.jpg diff --git a/ui/assets/photos/IMG-20240418-WA0062.jpg b/ui/static/photos/IMG-20240418-WA0062.jpg similarity index 100% rename from ui/assets/photos/IMG-20240418-WA0062.jpg rename to ui/static/photos/IMG-20240418-WA0062.jpg diff --git a/ui/assets/photos/IMG-20240418-WA0066.jpg b/ui/static/photos/IMG-20240418-WA0066.jpg similarity index 100% rename from ui/assets/photos/IMG-20240418-WA0066.jpg rename to ui/static/photos/IMG-20240418-WA0066.jpg diff --git a/ui/assets/photos/IMG-20240418-WA0072.jpg b/ui/static/photos/IMG-20240418-WA0072.jpg similarity index 100% rename from ui/assets/photos/IMG-20240418-WA0072.jpg rename to ui/static/photos/IMG-20240418-WA0072.jpg diff --git a/ui/assets/photos/IMG-20240418-WA0080.jpg b/ui/static/photos/IMG-20240418-WA0080.jpg similarity index 100% rename from ui/assets/photos/IMG-20240418-WA0080.jpg rename to ui/static/photos/IMG-20240418-WA0080.jpg diff --git a/ui/assets/photos/IMG-20240418-WA0090.jpg b/ui/static/photos/IMG-20240418-WA0090.jpg similarity index 100% rename from ui/assets/photos/IMG-20240418-WA0090.jpg rename to ui/static/photos/IMG-20240418-WA0090.jpg diff --git a/ui/assets/photos/IMG-20240418-WA0113.jpg b/ui/static/photos/IMG-20240418-WA0113.jpg similarity index 100% rename from ui/assets/photos/IMG-20240418-WA0113.jpg rename to ui/static/photos/IMG-20240418-WA0113.jpg diff --git a/ui/assets/photos/IMG-20240418-WA0116.jpg b/ui/static/photos/IMG-20240418-WA0116.jpg similarity index 100% rename from ui/assets/photos/IMG-20240418-WA0116.jpg rename to ui/static/photos/IMG-20240418-WA0116.jpg diff --git a/ui/assets/photos/IMG-20240418-WA0120.jpg b/ui/static/photos/IMG-20240418-WA0120.jpg similarity index 100% rename from ui/assets/photos/IMG-20240418-WA0120.jpg rename to ui/static/photos/IMG-20240418-WA0120.jpg diff --git a/ui/assets/photos/IMG-20240418-WA0141.jpg b/ui/static/photos/IMG-20240418-WA0141.jpg similarity index 100% rename from ui/assets/photos/IMG-20240418-WA0141.jpg rename to ui/static/photos/IMG-20240418-WA0141.jpg diff --git a/ui/assets/photos/IMG-20240418-WA0144.jpg b/ui/static/photos/IMG-20240418-WA0144.jpg similarity index 100% rename from ui/assets/photos/IMG-20240418-WA0144.jpg rename to ui/static/photos/IMG-20240418-WA0144.jpg diff --git a/ui/assets/photos/IMG-20240418-WA0165.jpg b/ui/static/photos/IMG-20240418-WA0165.jpg similarity index 100% rename from ui/assets/photos/IMG-20240418-WA0165.jpg rename to ui/static/photos/IMG-20240418-WA0165.jpg diff --git a/ui/assets/photos/IMG20210903192403.jpg b/ui/static/photos/IMG20210903192403.jpg similarity index 100% rename from ui/assets/photos/IMG20210903192403.jpg rename to ui/static/photos/IMG20210903192403.jpg diff --git a/ui/assets/photos/IMG20220121181023.jpg b/ui/static/photos/IMG20220121181023.jpg similarity index 100% rename from ui/assets/photos/IMG20220121181023.jpg rename to ui/static/photos/IMG20220121181023.jpg diff --git a/ui/assets/photos/IMG_0528.JPG b/ui/static/photos/IMG_0528.JPG similarity index 100% rename from ui/assets/photos/IMG_0528.JPG rename to ui/static/photos/IMG_0528.JPG diff --git a/ui/assets/photos/IMG_0563.JPG b/ui/static/photos/IMG_0563.JPG similarity index 100% rename from ui/assets/photos/IMG_0563.JPG rename to ui/static/photos/IMG_0563.JPG diff --git a/ui/assets/photos/imgfix.jpg b/ui/static/photos/imgfix.jpg similarity index 100% rename from ui/assets/photos/imgfix.jpg rename to ui/static/photos/imgfix.jpg diff --git a/ui/vite.config.ts b/ui/vite.config.ts index f7056fa..9ef7e7b 100644 --- a/ui/vite.config.ts +++ b/ui/vite.config.ts @@ -1,12 +1,23 @@ +import { readdirSync } from 'node:fs'; import tailwindcss from '@tailwindcss/vite'; import adapter from '@sveltejs/adapter-static'; import { sveltekit } from '@sveltejs/kit/vite'; import { defineConfig } from 'vite'; +// Background photos live in static/photos so Vite copies them verbatim +// (original filenames, no content hash) instead of running them through the +// module asset pipeline. +const photoFiles = readdirSync('static/photos').filter((name) => + /\.(jpe?g|png)$/i.test(name) +); + export default defineConfig({ server: { fs: { allow: ['assets'] } }, + define: { + __PHOTO_FILES__: JSON.stringify(photoFiles) + }, plugins: [ tailwindcss(), sveltekit({