From ccc9958621c4e75398597e28a9aeaa357484f503 Mon Sep 17 00:00:00 2001 From: martin-mfg <2026226+martin-mfg@users.noreply.github.com> Date: Fri, 6 Feb 2026 12:18:19 +0100 Subject: [PATCH 01/16] disable minify --- apps/frontend/vite.config.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/frontend/vite.config.ts b/apps/frontend/vite.config.ts index 1fc377bb..73423890 100644 --- a/apps/frontend/vite.config.ts +++ b/apps/frontend/vite.config.ts @@ -41,6 +41,7 @@ export default defineConfig({ }, ], build: { + minify: false, outDir: "build", /** @todo use chunks to split bundle? */ From 8cfe8f3023eb1fd1bb9be5f143079956827ed6bc Mon Sep 17 00:00:00 2001 From: martin-mfg <2026226+martin-mfg@users.noreply.github.com> Date: Fri, 6 Feb 2026 12:21:35 +0100 Subject: [PATCH 02/16] update backend rewrite --- apps/backend/vercel.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/backend/vercel.json b/apps/backend/vercel.json index ab041f10..e812fdd7 100644 --- a/apps/backend/vercel.json +++ b/apps/backend/vercel.json @@ -10,7 +10,7 @@ "rewrites": [ { "source": "/frontend/:match*", - "destination": "https://gse-frontend-preview.vercel.app/:match*" + "destination": "https://github-stats-extended-frontend-git-d78d21-martin-mfgs-projects.vercel.app/:match*" } ] } From ef0518a44c03c4c4b118247e9c9cdc72d201aa0a Mon Sep 17 00:00:00 2001 From: martin-mfg <2026226+martin-mfg@users.noreply.github.com> Date: Fri, 6 Feb 2026 13:36:01 +0100 Subject: [PATCH 03/16] exclude 'process' polyfill --- apps/frontend/vite.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/frontend/vite.config.ts b/apps/frontend/vite.config.ts index 73423890..c9585b15 100644 --- a/apps/frontend/vite.config.ts +++ b/apps/frontend/vite.config.ts @@ -18,7 +18,7 @@ export default defineConfig({ "stream", "buffer", ], - exclude: ["fs", "net"], + exclude: ["fs", "net", "process"], }), react(), From db7e859f9e7fd86c705186f6267c6c580535eb1f Mon Sep 17 00:00:00 2001 From: martin-mfg <2026226+martin-mfg@users.noreply.github.com> Date: Fri, 6 Feb 2026 13:46:16 +0100 Subject: [PATCH 04/16] remove 'process.env' define --- apps/frontend/vite.config.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/apps/frontend/vite.config.ts b/apps/frontend/vite.config.ts index c9585b15..ef21dd19 100644 --- a/apps/frontend/vite.config.ts +++ b/apps/frontend/vite.config.ts @@ -47,10 +47,6 @@ export default defineConfig({ /** @todo use chunks to split bundle? */ chunkSizeWarningLimit: 800, }, - define: { - // Prevent Vite from injecting process.env like Webpack DefinePlugin - "process.env": {}, - }, resolve: { alias: [ { From d28e11696e141f80d26a80c5fc9527e3ba7809a2 Mon Sep 17 00:00:00 2001 From: martin-mfg <2026226+martin-mfg@users.noreply.github.com> Date: Fri, 6 Feb 2026 16:50:26 +0100 Subject: [PATCH 05/16] use different env define --- apps/frontend/vite.config.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/frontend/vite.config.ts b/apps/frontend/vite.config.ts index ef21dd19..74e6372d 100644 --- a/apps/frontend/vite.config.ts +++ b/apps/frontend/vite.config.ts @@ -18,7 +18,7 @@ export default defineConfig({ "stream", "buffer", ], - exclude: ["fs", "net", "process"], + exclude: ["fs", "net"], }), react(), @@ -47,6 +47,10 @@ export default defineConfig({ /** @todo use chunks to split bundle? */ chunkSizeWarningLimit: 800, }, + define: { + // Prevent Vite from injecting process.env like Webpack DefinePlugin + "process.env": "windows.process.env", + }, resolve: { alias: [ { From 063baf7808a7e80f2da6aa9d588b33fbe9636d23 Mon Sep 17 00:00:00 2001 From: martin-mfg <2026226+martin-mfg@users.noreply.github.com> Date: Fri, 6 Feb 2026 16:53:38 +0100 Subject: [PATCH 06/16] fix typo --- apps/frontend/vite.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/frontend/vite.config.ts b/apps/frontend/vite.config.ts index 74e6372d..63965298 100644 --- a/apps/frontend/vite.config.ts +++ b/apps/frontend/vite.config.ts @@ -49,7 +49,7 @@ export default defineConfig({ }, define: { // Prevent Vite from injecting process.env like Webpack DefinePlugin - "process.env": "windows.process.env", + "process.env": "window.process.env", }, resolve: { alias: [ From ad30a5bd2eaac0dfc3f1c691868a36f64d18ac88 Mon Sep 17 00:00:00 2001 From: martin-mfg <2026226+martin-mfg@users.noreply.github.com> Date: Fri, 6 Feb 2026 17:20:49 +0100 Subject: [PATCH 07/16] cleanup, remove redundant 'build-trends' --- .github/CONTRIBUTING.md | 2 +- .github/workflows/ci.yml | 2 +- apps/frontend/README.md | 25 ------------------------- apps/frontend/package.json | 1 - apps/frontend/vercel.json | 2 +- apps/frontend/vite.config.ts | 1 - 6 files changed, 3 insertions(+), 30 deletions(-) delete mode 100644 apps/frontend/README.md diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index d61fd7bf..a304b2f9 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -7,7 +7,7 @@ To set up the project GitHub-Stats-Extended locally, run the following commands: ```bash ./vercel-preparation.sh pnpm install -pnpm --filter frontend run build-trends +pnpm --filter frontend run build ``` The easiest way to run and test the project is to deploy it to Vercel as described in the [deployment guide](../docs/deploy.md). diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ff0b186d..8cbc5279 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -41,7 +41,7 @@ jobs: ./vercel-preparation.sh - name: Build frontend - run: pnpm --filter frontend run build-trends + run: pnpm --filter frontend run build code-checks: name: Code checks diff --git a/apps/frontend/README.md b/apps/frontend/README.md deleted file mode 100644 index 7ddf0889..00000000 --- a/apps/frontend/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# Frontend - -## Installation - -``` -yarn install -``` - -## Run Locally - -``` -yarn start-trends -``` - -## Build - -``` -yarn build-trends -``` - -Then, just commit on the main branch (Vercel takes care of the rest) - -## Adding a Secret - -Update .env, .env-template, and Vercel. diff --git a/apps/frontend/package.json b/apps/frontend/package.json index 0535d4ac..a0f88811 100644 --- a/apps/frontend/package.json +++ b/apps/frontend/package.json @@ -37,7 +37,6 @@ "scripts": { "dev": "vite", "build": "vite build", - "build-trends": "vite build", "preview": "vite preview", "typecheck": "tsc --noEmit" }, diff --git a/apps/frontend/vercel.json b/apps/frontend/vercel.json index c41c8e63..3baa54fd 100644 --- a/apps/frontend/vercel.json +++ b/apps/frontend/vercel.json @@ -1,6 +1,6 @@ { "$schema": "https://openapi.vercel.sh/vercel.json", "installCommand": "cd ../../ && pnpm install && rm -rf ./apps/frontend/node_modules && ./vercel-preparation.sh && pnpm --filter ./apps/frontend/ --legacy deploy ./apps/deployment/ && mv ./apps/deployment/node_modules/ ./apps/frontend/node_modules/", - "buildCommand": "pnpm run build-trends", + "buildCommand": "pnpm run build", "outputDirectory": "build" } diff --git a/apps/frontend/vite.config.ts b/apps/frontend/vite.config.ts index 63965298..07ad3988 100644 --- a/apps/frontend/vite.config.ts +++ b/apps/frontend/vite.config.ts @@ -41,7 +41,6 @@ export default defineConfig({ }, ], build: { - minify: false, outDir: "build", /** @todo use chunks to split bundle? */ From 35955f93f12fd8111e957a773d3f16ed46c87d2d Mon Sep 17 00:00:00 2001 From: martin-mfg <2026226+martin-mfg@users.noreply.github.com> Date: Fri, 6 Feb 2026 17:24:50 +0100 Subject: [PATCH 08/16] add skipping build cache to docs --- docs/deploy.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/deploy.md b/docs/deploy.md index 8b884102..196dec45 100644 --- a/docs/deploy.md +++ b/docs/deploy.md @@ -123,6 +123,7 @@ Click on the deploy button to get started! 13. optional: add an SQL database; by using e.g. the ["Nile" integration](https://vercel.com/marketplace/nile) or by manually setting the environment variable `POSTGRES_URL` 14. optional: [create your own OAuth App](https://github.com/settings/developers) and set environment variables `OAUTH_REDIRECT_URI`, `OAUTH_CLIENT_ID` and `OAUTH_CLIENT_SECRET` on Vercel accordingly 15. optional: in addition to the Vercel project based on the `apps/backend` folder, create a second project based on the `apps/frontend` folder. No environment variables needed. +16. optional: if your Vercel deployments fail but after a redeployment without build cache they work, add an environment variable [`VERCEL_FORCE_NO_BUILD_CACHE`](https://vercel.com/docs/deployments/troubleshoot-a-build#managing-build-cache) with value `1` to force Vercel to not use the build cache. From ca5a59df072e8321ce65ce1fc0b98bd671be13bc Mon Sep 17 00:00:00 2001 From: martin-mfg <2026226+martin-mfg@users.noreply.github.com> Date: Fri, 6 Feb 2026 17:34:37 +0100 Subject: [PATCH 09/16] revert rewrite change --- apps/backend/vercel.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/backend/vercel.json b/apps/backend/vercel.json index e812fdd7..ab041f10 100644 --- a/apps/backend/vercel.json +++ b/apps/backend/vercel.json @@ -10,7 +10,7 @@ "rewrites": [ { "source": "/frontend/:match*", - "destination": "https://github-stats-extended-frontend-git-d78d21-martin-mfgs-projects.vercel.app/:match*" + "destination": "https://gse-frontend-preview.vercel.app/:match*" } ] } From 7549265c8d2b8ba6a40f8ae28049a8685d483b44 Mon Sep 17 00:00:00 2001 From: martin-mfg <2026226+martin-mfg@users.noreply.github.com> Date: Sat, 7 Feb 2026 13:39:52 +0100 Subject: [PATCH 10/16] comment: fix 'dev' command --- apps/frontend/vite.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/frontend/vite.config.ts b/apps/frontend/vite.config.ts index 07ad3988..e819982a 100644 --- a/apps/frontend/vite.config.ts +++ b/apps/frontend/vite.config.ts @@ -48,7 +48,7 @@ export default defineConfig({ }, define: { // Prevent Vite from injecting process.env like Webpack DefinePlugin - "process.env": "window.process.env", + "process.env": "window?.process?.env", }, resolve: { alias: [ From 601f2d999a1941f9b87464b1028c1c0c643b8a1c Mon Sep 17 00:00:00 2001 From: martin-mfg <2026226+martin-mfg@users.noreply.github.com> Date: Sat, 7 Feb 2026 15:36:25 +0100 Subject: [PATCH 11/16] different approach for 'process.env' --- apps/frontend/package.json | 3 +- apps/frontend/vite.config.ts | 13 ++++++--- pnpm-lock.yaml | 54 ++++++++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+), 5 deletions(-) diff --git a/apps/frontend/package.json b/apps/frontend/package.json index a0f88811..14a8735c 100644 --- a/apps/frontend/package.json +++ b/apps/frontend/package.json @@ -32,7 +32,8 @@ "postcss": "^8.4.31", "tailwindcss": "^3.3.5", "vite": "7.3.1", - "vite-plugin-node-polyfills": "0.25.0" + "vite-plugin-node-polyfills": "0.25.0", + "vite-plugin-string-replace": "^1.1.5" }, "scripts": { "dev": "vite", diff --git a/apps/frontend/vite.config.ts b/apps/frontend/vite.config.ts index e819982a..35976299 100644 --- a/apps/frontend/vite.config.ts +++ b/apps/frontend/vite.config.ts @@ -4,10 +4,19 @@ import { defineConfig } from "vite"; import { nodePolyfills } from "vite-plugin-node-polyfills"; import react from "@vitejs/plugin-react-swc"; +import StringReplace from "vite-plugin-string-replace"; + // https://vitejs.dev/config/ export default defineConfig({ base: "/frontend/", plugins: [ + StringReplace([ + { + search: "process.env", + replace: "window.process.env", + fileName: ".*backend.*", + }, + ]), nodePolyfills({ include: [ "path", @@ -46,10 +55,6 @@ export default defineConfig({ /** @todo use chunks to split bundle? */ chunkSizeWarningLimit: 800, }, - define: { - // Prevent Vite from injecting process.env like Webpack DefinePlugin - "process.env": "window?.process?.env", - }, resolve: { alias: [ { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5d766cc4..e8ec0adb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -199,6 +199,9 @@ importers: vite-plugin-node-polyfills: specifier: 0.25.0 version: 0.25.0(rollup@4.55.1)(vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(terser@5.44.1)(yaml@2.8.2)) + vite-plugin-string-replace: + specifier: ^1.1.5 + version: 1.1.5 packages: @@ -1160,6 +1163,10 @@ packages: resolution: {integrity: sha512-TeheYy0ILzBEI/CO55CP6zJCSdSWeRtGnHy8U8dWSUH4I68iqTsy7HkMktR4xakThc9jotkPQUXT4ITdbV7cHA==} engines: {node: '>=18'} + '@sindresorhus/merge-streams@2.3.0': + resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} + engines: {node: '>=18'} + '@sinonjs/commons@3.0.1': resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} @@ -2190,6 +2197,10 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + eslint-plugin-jsdoc@61.7.1: resolution: {integrity: sha512-36DpldF95MlTX//n3/naULFVt8d1cV4jmSkx7ZKrE9ikkKHAgMLesuWp1SmwpVwAs5ndIM6abKd6PeOYZUgdWg==} engines: {node: '>=20.11.0'} @@ -2482,6 +2493,10 @@ packages: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} + globby@14.1.0: + resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} + engines: {node: '>=18'} + gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -3370,6 +3385,10 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + path-type@6.0.0: + resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} + engines: {node: '>=18'} + pbkdf2@3.1.5: resolution: {integrity: sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==} engines: {node: '>= 0.10'} @@ -3836,6 +3855,10 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} + slash@5.1.0: + resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} + engines: {node: '>=14.16'} + slice-ansi@7.1.2: resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} engines: {node: '>=18'} @@ -4147,6 +4170,10 @@ packages: resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} engines: {node: '>=14.0'} + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} + universal-user-agent@6.0.1: resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} @@ -4201,6 +4228,9 @@ packages: peerDependencies: vite: ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + vite-plugin-string-replace@1.1.5: + resolution: {integrity: sha512-6kxox6rs/v5mbmV7BvRmSjALyYEmXC/IRBVS5ymgaV9iXe/OW84s3XNJrQX8B8/u9M/LK3gbQ6hWiYiOzqSRYQ==} + vite@7.3.1: resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -5314,6 +5344,8 @@ snapshots: '@sindresorhus/base62@1.0.0': {} + '@sindresorhus/merge-streams@2.3.0': {} + '@sinonjs/commons@3.0.1': dependencies: type-detect: 4.0.8 @@ -6494,6 +6526,8 @@ snapshots: escape-string-regexp@4.0.0: {} + escape-string-regexp@5.0.0: {} + eslint-plugin-jsdoc@61.7.1(eslint@9.39.2(jiti@2.6.1)): dependencies: '@es-joy/jsdoccomment': 0.78.0 @@ -6884,6 +6918,15 @@ snapshots: define-properties: 1.2.1 gopd: 1.2.0 + globby@14.1.0: + dependencies: + '@sindresorhus/merge-streams': 2.3.0 + fast-glob: 3.3.3 + ignore: 7.0.5 + path-type: 6.0.0 + slash: 5.1.0 + unicorn-magic: 0.3.0 + gopd@1.2.0: {} graceful-fs@4.2.11: {} @@ -8003,6 +8046,8 @@ snapshots: path-type@4.0.0: optional: true + path-type@6.0.0: {} + pbkdf2@3.1.5: dependencies: create-hash: 1.2.0 @@ -8517,6 +8562,8 @@ snapshots: slash@3.0.0: {} + slash@5.1.0: {} + slice-ansi@7.1.2: dependencies: ansi-styles: 6.2.3 @@ -8904,6 +8951,8 @@ snapshots: dependencies: '@fastify/busboy': 2.1.1 + unicorn-magic@0.3.0: {} + universal-user-agent@6.0.1: {} unpipe@1.0.0: {} @@ -8982,6 +9031,11 @@ snapshots: transitivePeerDependencies: - rollup + vite-plugin-string-replace@1.1.5: + dependencies: + escape-string-regexp: 5.0.0 + globby: 14.1.0 + vite@7.3.1(@types/node@25.0.3)(jiti@1.21.7)(terser@5.44.1)(yaml@2.8.2): dependencies: esbuild: 0.27.2 From 8ef2c8034f92adb74a7655908f3608b9171befa3 Mon Sep 17 00:00:00 2001 From: martin-mfg <2026226+martin-mfg@users.noreply.github.com> Date: Sat, 7 Feb 2026 15:54:51 +0100 Subject: [PATCH 12/16] try with Vercel build cache --- apps/backend/vercel.json | 2 +- apps/frontend/vercel.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/backend/vercel.json b/apps/backend/vercel.json index ab041f10..d3a57640 100644 --- a/apps/backend/vercel.json +++ b/apps/backend/vercel.json @@ -1,6 +1,6 @@ { "$schema": "https://openapi.vercel.sh/vercel.json", - "buildCommand": "cd ../../ && rm -rf ./apps/backend/node_modules && pnpm --filter ./apps/backend/ --legacy deploy ./apps/deployment/ && mv ./apps/deployment/node_modules/ ./apps/backend/node_modules/ && ./vercel-preparation.sh", + "buildCommand": "cd ../../ && rm -rf ./apps/deployment && rm -rf ./apps/backend/node_modules && pnpm --filter ./apps/backend/ --legacy deploy ./apps/deployment/ && mv ./apps/deployment/node_modules/ ./apps/backend/node_modules/ && ./vercel-preparation.sh", "redirects": [ { "source": "/", diff --git a/apps/frontend/vercel.json b/apps/frontend/vercel.json index 3baa54fd..0d5116bb 100644 --- a/apps/frontend/vercel.json +++ b/apps/frontend/vercel.json @@ -1,6 +1,6 @@ { "$schema": "https://openapi.vercel.sh/vercel.json", - "installCommand": "cd ../../ && pnpm install && rm -rf ./apps/frontend/node_modules && ./vercel-preparation.sh && pnpm --filter ./apps/frontend/ --legacy deploy ./apps/deployment/ && mv ./apps/deployment/node_modules/ ./apps/frontend/node_modules/", + "installCommand": "cd ../../ && rm -rf ./apps/deployment && pnpm install && rm -rf ./apps/frontend/node_modules && ./vercel-preparation.sh && pnpm --filter ./apps/frontend/ --legacy deploy ./apps/deployment/ && mv ./apps/deployment/node_modules/ ./apps/frontend/node_modules/", "buildCommand": "pnpm run build", "outputDirectory": "build" } From d5fd9990bf2ae0f2b01552c4085dcc4013d6175d Mon Sep 17 00:00:00 2001 From: martin-mfg <2026226+martin-mfg@users.noreply.github.com> Date: Sat, 7 Feb 2026 16:00:34 +0100 Subject: [PATCH 13/16] try with Vercel build cache 2 --- vercel-preparation.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/vercel-preparation.sh b/vercel-preparation.sh index 35ebfe01..481c152b 100755 --- a/vercel-preparation.sh +++ b/vercel-preparation.sh @@ -6,6 +6,9 @@ set -euo pipefail # move into the folder of this script cd "$(dirname "$0")" + +rm -rf apps/backend/.vercel/output/functions/api.func/node_modules + mkdir -p apps/backend/.vercel/output/functions/api.func/ # copying `backend` to `backend/.vercel/...` directly may cause problems cp -RP apps/backend/. apps/backend-copy/ From 43dbca0e9c5220f17796923525353219018982f9 Mon Sep 17 00:00:00 2001 From: martin-mfg <2026226+martin-mfg@users.noreply.github.com> Date: Sat, 7 Feb 2026 16:11:16 +0100 Subject: [PATCH 14/16] remove docs for skipping vercel build --- docs/deploy.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/deploy.md b/docs/deploy.md index 196dec45..8b884102 100644 --- a/docs/deploy.md +++ b/docs/deploy.md @@ -123,7 +123,6 @@ Click on the deploy button to get started! 13. optional: add an SQL database; by using e.g. the ["Nile" integration](https://vercel.com/marketplace/nile) or by manually setting the environment variable `POSTGRES_URL` 14. optional: [create your own OAuth App](https://github.com/settings/developers) and set environment variables `OAUTH_REDIRECT_URI`, `OAUTH_CLIENT_ID` and `OAUTH_CLIENT_SECRET` on Vercel accordingly 15. optional: in addition to the Vercel project based on the `apps/backend` folder, create a second project based on the `apps/frontend` folder. No environment variables needed. -16. optional: if your Vercel deployments fail but after a redeployment without build cache they work, add an environment variable [`VERCEL_FORCE_NO_BUILD_CACHE`](https://vercel.com/docs/deployments/troubleshoot-a-build#managing-build-cache) with value `1` to force Vercel to not use the build cache. From d2d2d4bc7154e9ad01c35147ee376d7f512edb05 Mon Sep 17 00:00:00 2001 From: martin-mfg <2026226+martin-mfg@users.noreply.github.com> Date: Sat, 7 Feb 2026 17:26:34 +0100 Subject: [PATCH 15/16] try with Vercel build cache 3 --- vercel-preparation.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/vercel-preparation.sh b/vercel-preparation.sh index 481c152b..3027cd3a 100755 --- a/vercel-preparation.sh +++ b/vercel-preparation.sh @@ -6,8 +6,7 @@ set -euo pipefail # move into the folder of this script cd "$(dirname "$0")" - -rm -rf apps/backend/.vercel/output/functions/api.func/node_modules +git clean ./apps -fx mkdir -p apps/backend/.vercel/output/functions/api.func/ # copying `backend` to `backend/.vercel/...` directly may cause problems From 8cd32880c2163f64b4ef0220755f5f2efbb11798 Mon Sep 17 00:00:00 2001 From: martin-mfg <2026226+martin-mfg@users.noreply.github.com> Date: Sat, 7 Feb 2026 17:40:34 +0100 Subject: [PATCH 16/16] try with Vercel build cache 4 --- apps/backend/vercel.json | 2 +- apps/frontend/vercel.json | 2 +- vercel-preparation.sh | 2 -- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/apps/backend/vercel.json b/apps/backend/vercel.json index d3a57640..62ccb490 100644 --- a/apps/backend/vercel.json +++ b/apps/backend/vercel.json @@ -1,6 +1,6 @@ { "$schema": "https://openapi.vercel.sh/vercel.json", - "buildCommand": "cd ../../ && rm -rf ./apps/deployment && rm -rf ./apps/backend/node_modules && pnpm --filter ./apps/backend/ --legacy deploy ./apps/deployment/ && mv ./apps/deployment/node_modules/ ./apps/backend/node_modules/ && ./vercel-preparation.sh", + "buildCommand": "cd ../../ && git clean ./apps -fx && pnpm --filter ./apps/backend/ --legacy deploy ./apps/deployment/ && mv ./apps/deployment/node_modules/ ./apps/backend/node_modules/ && ./vercel-preparation.sh", "redirects": [ { "source": "/", diff --git a/apps/frontend/vercel.json b/apps/frontend/vercel.json index 0d5116bb..138025f9 100644 --- a/apps/frontend/vercel.json +++ b/apps/frontend/vercel.json @@ -1,6 +1,6 @@ { "$schema": "https://openapi.vercel.sh/vercel.json", - "installCommand": "cd ../../ && rm -rf ./apps/deployment && pnpm install && rm -rf ./apps/frontend/node_modules && ./vercel-preparation.sh && pnpm --filter ./apps/frontend/ --legacy deploy ./apps/deployment/ && mv ./apps/deployment/node_modules/ ./apps/frontend/node_modules/", + "installCommand": "cd ../../ && git clean ./apps -fx && pnpm install && rm -rf ./apps/frontend/node_modules && ./vercel-preparation.sh && pnpm --filter ./apps/frontend/ --legacy deploy ./apps/deployment/ && mv ./apps/deployment/node_modules/ ./apps/frontend/node_modules/", "buildCommand": "pnpm run build", "outputDirectory": "build" } diff --git a/vercel-preparation.sh b/vercel-preparation.sh index 3027cd3a..35ebfe01 100755 --- a/vercel-preparation.sh +++ b/vercel-preparation.sh @@ -6,8 +6,6 @@ set -euo pipefail # move into the folder of this script cd "$(dirname "$0")" -git clean ./apps -fx - mkdir -p apps/backend/.vercel/output/functions/api.func/ # copying `backend` to `backend/.vercel/...` directly may cause problems cp -RP apps/backend/. apps/backend-copy/