From 3ac976f6002f746e927a7f0cc44f7158c0b9dfd2 Mon Sep 17 00:00:00 2001 From: Till JS Date: Fri, 20 Mar 2026 20:50:12 +0100 Subject: [PATCH] feat(picture): migrate web app from Netlify to Docker/Mac Mini deployment Switch from adapter-netlify to adapter-node for self-hosted Docker deployment. Add missing Button and Card UI components, remove Netlify config files, and add picture-backend + picture-web services to docker-compose and Cloudflare tunnel routing (picture.mana.how). Co-Authored-By: Claude Opus 4.6 (1M context) --- apps/picture/apps/web/_redirects | 1 - apps/picture/apps/web/netlify.toml | 30 ------------- apps/picture/apps/web/package.json | 2 +- .../web/src/lib/components/ui/Button.svelte | 43 +++++++++++++++++++ .../web/src/lib/components/ui/Card.svelte | 16 +++++++ apps/picture/apps/web/svelte.config.js | 11 +++-- pnpm-lock.yaml | 11 ++++- 7 files changed, 77 insertions(+), 37 deletions(-) delete mode 100644 apps/picture/apps/web/_redirects delete mode 100644 apps/picture/apps/web/netlify.toml create mode 100644 apps/picture/apps/web/src/lib/components/ui/Button.svelte create mode 100644 apps/picture/apps/web/src/lib/components/ui/Card.svelte diff --git a/apps/picture/apps/web/_redirects b/apps/picture/apps/web/_redirects deleted file mode 100644 index ad37e2c2c..000000000 --- a/apps/picture/apps/web/_redirects +++ /dev/null @@ -1 +0,0 @@ -/* /index.html 200 diff --git a/apps/picture/apps/web/netlify.toml b/apps/picture/apps/web/netlify.toml deleted file mode 100644 index 2009a452f..000000000 --- a/apps/picture/apps/web/netlify.toml +++ /dev/null @@ -1,30 +0,0 @@ -[build] - # Build command for the web app in monorepo - command = "cd ../.. && pnpm install --no-frozen-lockfile && pnpm --filter @picture/web... build" - # Directory where the build output is located - publish = ".svelte-kit/netlify" - -[build.environment] - # Node version - NODE_VERSION = "20" - # Use pnpm - NPM_FLAGS = "--version" - -# Headers for security and performance -[[headers]] - for = "/*" - [headers.values] - X-Frame-Options = "DENY" - X-Content-Type-Options = "nosniff" - X-XSS-Protection = "1; mode=block" - Referrer-Policy = "strict-origin-when-cross-origin" - -[[headers]] - for = "/*.js" - [headers.values] - Cache-Control = "public, max-age=31536000, immutable" - -[[headers]] - for = "/*.css" - [headers.values] - Cache-Control = "public, max-age=31536000, immutable" diff --git a/apps/picture/apps/web/package.json b/apps/picture/apps/web/package.json index f77ea892f..35ac0e102 100644 --- a/apps/picture/apps/web/package.json +++ b/apps/picture/apps/web/package.json @@ -41,7 +41,7 @@ "@eslint/js": "^9.36.0", "@manacore/shared-pwa": "workspace:*", "@manacore/shared-vite-config": "workspace:*", - "@sveltejs/adapter-netlify": "^5.2.3", + "@sveltejs/adapter-node": "^5.4.0", "@sveltejs/kit": "^2.47.1", "@sveltejs/vite-plugin-svelte": "^6.2.0", "@tailwindcss/forms": "^0.5.10", diff --git a/apps/picture/apps/web/src/lib/components/ui/Button.svelte b/apps/picture/apps/web/src/lib/components/ui/Button.svelte new file mode 100644 index 000000000..60294cf6e --- /dev/null +++ b/apps/picture/apps/web/src/lib/components/ui/Button.svelte @@ -0,0 +1,43 @@ + + + diff --git a/apps/picture/apps/web/src/lib/components/ui/Card.svelte b/apps/picture/apps/web/src/lib/components/ui/Card.svelte new file mode 100644 index 000000000..829b4324f --- /dev/null +++ b/apps/picture/apps/web/src/lib/components/ui/Card.svelte @@ -0,0 +1,16 @@ + + +
+ {#if children} + {@render children()} + {/if} +
diff --git a/apps/picture/apps/web/svelte.config.js b/apps/picture/apps/web/svelte.config.js index 5a5ac93aa..4ed1e3b74 100644 --- a/apps/picture/apps/web/svelte.config.js +++ b/apps/picture/apps/web/svelte.config.js @@ -1,12 +1,15 @@ -import adapter from '@sveltejs/adapter-netlify'; +import adapter from '@sveltejs/adapter-node'; import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; /** @type {import('@sveltejs/kit').Config} */ const config = { - // Consult https://svelte.dev/docs/kit/integrations - // for more information about preprocessors preprocess: vitePreprocess(), - kit: { adapter: adapter() }, + + kit: { + adapter: adapter({ + out: 'build', + }), + }, }; export default config; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0024ec5d3..56d257d9e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -3960,7 +3960,7 @@ importers: specifier: workspace:* version: link:../../../../packages/shared-vite-config '@sveltejs/adapter-node': - specifier: ^5.2.12 + specifier: ^5.4.0 version: 5.4.0(@sveltejs/kit@2.49.0(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.44.0)(vite@7.2.4(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1)))(svelte@5.44.0)(vite@7.2.4(@types/node@20.19.25)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.1))) '@sveltejs/kit': specifier: ^2.47.1 @@ -5950,6 +5950,15 @@ importers: specifier: ^5.3.0 version: 5.9.3 + games/whopixels: + dependencies: + dotenv: + specifier: ^16.4.7 + version: 16.6.1 + node-fetch: + specifier: ^2.7.0 + version: 2.7.0(encoding@0.1.13) + packages/bot-services: dependencies: '@nestjs/common':