From 5ef56a77826b7dd2373159ada55c8add97a3962a Mon Sep 17 00:00:00 2001 From: James Grugett Date: Wed, 6 May 2026 20:08:35 -0700 Subject: [PATCH 1/4] Fix freebuff web build --- bun.lock | 28 ++++++++++++---------------- freebuff/web/package.json | 2 +- freebuff/web/src/app/home-client.tsx | 2 +- packages/internal/src/env.ts | 21 +++++++++++++++------ web/package.json | 2 +- 5 files changed, 30 insertions(+), 25 deletions(-) diff --git a/bun.lock b/bun.lock index 6a7d3a9fb6..c0bb36d628 100644 --- a/bun.lock +++ b/bun.lock @@ -146,7 +146,7 @@ "clsx": "^2.1.1", "framer-motion": "^11.13.3", "lucide-react": "^0.487.0", - "next": "15.5.11", + "next": "15.5.16", "next-auth": "^4.24.11", "next-themes": "^0.4.6", "pino": "^9.6.0", @@ -294,7 +294,7 @@ "geoip-lite": "^2.0.0", "lucide-react": "^0.487.0", "mermaid": "^11.8.1", - "next": "15.5.11", + "next": "15.5.16", "next-auth": "^4.24.11", "next-contentlayer2": "^0.5.8", "next-themes": "^0.4.6", @@ -914,27 +914,27 @@ "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@0.2.4", "", { "dependencies": { "@emnapi/core": "^1.1.0", "@emnapi/runtime": "^1.1.0", "@tybys/wasm-util": "^0.9.0" } }, "sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ=="], - "@next/env": ["@next/env@15.5.11", "", {}, "sha512-g9s5SS9gC7GJCEOR3OV3zqs7C5VddqxP9X+/6BpMbdXRkqsWfFf2CJPBZNvNEtAkKTNuRgRXAgNxSAXzfLdaTg=="], + "@next/env": ["@next/env@15.5.16", "", {}, "sha512-9QMKolCl+JnJtaRAQSXy4RQrhgfe8W7/G1+Hl3QSB/HZY7zQMzTwPDdTRwwio8BS96ps1MHpHhbS8qxoNV3JIQ=="], "@next/eslint-plugin-next": ["@next/eslint-plugin-next@14.2.25", "", { "dependencies": { "glob": "10.3.10" } }, "sha512-L2jcdEEa0bTv1DhE67Cdx1kLLkL0iLL9ILdBYx0j7noi2AUJM7bwcqmcN8awGg+8uyKGAGof/OkFom50x+ZyZg=="], "@next/mdx": ["@next/mdx@15.5.6", "", { "dependencies": { "source-map": "^0.7.0" }, "peerDependencies": { "@mdx-js/loader": ">=0.15.0", "@mdx-js/react": ">=0.15.0" }, "optionalPeers": ["@mdx-js/loader", "@mdx-js/react"] }, "sha512-lyzXcnZWPjYxbkz/5tv1bRlCOjKYX1lFg3LIuoIf9ERTOUBDzkCvUnWjtRsmFRxKv1/6uwpLVQvrJDd54gVDBw=="], - "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@15.5.7", "", { "os": "darwin", "cpu": "arm64" }, "sha512-IZwtxCEpI91HVU/rAUOOobWSZv4P2DeTtNaCdHqLcTJU4wdNXgAySvKa/qJCgR5m6KI8UsKDXtO2B31jcaw1Yw=="], + "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@15.5.16", "", { "os": "darwin", "cpu": "arm64" }, "sha512-wzdER4JZj+31vNkhaZ1Ght3IsNI8DMwj7VqadfIOqJB5sh8FiOqNSopYADQn6mgEPomzDd/DHqBcfo2fmVMYtg=="], - "@next/swc-darwin-x64": ["@next/swc-darwin-x64@15.5.7", "", { "os": "darwin", "cpu": "x64" }, "sha512-UP6CaDBcqaCBuiq/gfCEJw7sPEoX1aIjZHnBWN9v9qYHQdMKvCKcAVs4OX1vIjeE+tC5EIuwDTVIoXpUes29lg=="], + "@next/swc-darwin-x64": ["@next/swc-darwin-x64@15.5.16", "", { "os": "darwin", "cpu": "x64" }, "sha512-PPTo+cvcanxkuDEuDyZGk28ntmu0WjfkxqlG7hw9Mhsiribs4x1C6h2Culn0cJKqsne1gFjjZRK3ax7WYlSxgg=="], - "@next/swc-linux-arm64-gnu": ["@next/swc-linux-arm64-gnu@15.5.7", "", { "os": "linux", "cpu": "arm64" }, "sha512-NCslw3GrNIw7OgmRBxHtdWFQYhexoUCq+0oS2ccjyYLtcn1SzGzeM54jpTFonIMUjNbHmpKpziXnpxhSWLcmBA=="], + "@next/swc-linux-arm64-gnu": ["@next/swc-linux-arm64-gnu@15.5.16", "", { "os": "linux", "cpu": "arm64" }, "sha512-Jl0IL9P7S8uNl5oI1TqrQmfmLp7OqjWM58000pVnUVIsHrvPP6m9QDW/uNWYUbmd+8IYvc6MTeZKICstBMBpew=="], - "@next/swc-linux-arm64-musl": ["@next/swc-linux-arm64-musl@15.5.7", "", { "os": "linux", "cpu": "arm64" }, "sha512-nfymt+SE5cvtTrG9u1wdoxBr9bVB7mtKTcj0ltRn6gkP/2Nu1zM5ei8rwP9qKQP0Y//umK+TtkKgNtfboBxRrw=="], + "@next/swc-linux-arm64-musl": ["@next/swc-linux-arm64-musl@15.5.16", "", { "os": "linux", "cpu": "arm64" }, "sha512-Zf0BIqv/o5uOWfyRkzgGhyV2Tky7HLt0bG+w7XWdaU1JpyX0tltM3TrSfa/Y9c597SJG4CzN47+u2InhgZZ4vg=="], - "@next/swc-linux-x64-gnu": ["@next/swc-linux-x64-gnu@15.5.7", "", { "os": "linux", "cpu": "x64" }, "sha512-hvXcZvCaaEbCZcVzcY7E1uXN9xWZfFvkNHwbe/n4OkRhFWrs1J1QV+4U1BN06tXLdaS4DazEGXwgqnu/VMcmqw=="], + "@next/swc-linux-x64-gnu": ["@next/swc-linux-x64-gnu@15.5.16", "", { "os": "linux", "cpu": "x64" }, "sha512-HCDDU1TRLeUDV180QQTWrs5Oa4lIcI7XH9nF0UVUVmYLN/boZ6LqyFtm3814gc1fv+lOVyKaw5B6bVC9BpXTSQ=="], - "@next/swc-linux-x64-musl": ["@next/swc-linux-x64-musl@15.5.7", "", { "os": "linux", "cpu": "x64" }, "sha512-4IUO539b8FmF0odY6/SqANJdgwn1xs1GkPO5doZugwZ3ETF6JUdckk7RGmsfSf7ws8Qb2YB5It33mvNL/0acqA=="], + "@next/swc-linux-x64-musl": ["@next/swc-linux-x64-musl@15.5.16", "", { "os": "linux", "cpu": "x64" }, "sha512-kvXUY1dn5wxKuMkXxQRUbPjEnKxW1PR9uKOm0zpIpj3574+cFfaePhYFmBVtrOuwt+w34OdDzNaJr5Iixf+HBQ=="], - "@next/swc-win32-arm64-msvc": ["@next/swc-win32-arm64-msvc@15.5.7", "", { "os": "win32", "cpu": "arm64" }, "sha512-CpJVTkYI3ZajQkC5vajM7/ApKJUOlm6uP4BknM3XKvJ7VXAvCqSjSLmM0LKdYzn6nBJVSjdclx8nYJSa3xlTgQ=="], + "@next/swc-win32-arm64-msvc": ["@next/swc-win32-arm64-msvc@15.5.16", "", { "os": "win32", "cpu": "arm64" }, "sha512-zpOQuF+eyENMXRjglp2hZCIrUjTdO37suEBnDn1mX4PXSuetXZDMLpjKOh4dYSw3SiDTnOoOUwBl5i5Elr6nnQ=="], - "@next/swc-win32-x64-msvc": ["@next/swc-win32-x64-msvc@15.5.7", "", { "os": "win32", "cpu": "x64" }, "sha512-gMzgBX164I6DN+9/PGA+9dQiwmTkE4TloBNx8Kv9UiGARsr9Nba7IpcBRA1iTV9vwlYnrE3Uy6I7Aj6qLjQuqw=="], + "@next/swc-win32-x64-msvc": ["@next/swc-win32-x64-msvc@15.5.16", "", { "os": "win32", "cpu": "x64" }, "sha512-LnwKYpiSmIzXlTq76hMeeIzZoDcFwu848p6H+QBkGFJIbZphgzNUPdHruJcHM/bFnaFeco0l1Frie5I27VKglA=="], "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], @@ -2814,7 +2814,7 @@ "negotiator": ["negotiator@1.0.0", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="], - "next": ["next@15.5.11", "", { "dependencies": { "@next/env": "15.5.11", "@swc/helpers": "0.5.15", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "15.5.7", "@next/swc-darwin-x64": "15.5.7", "@next/swc-linux-arm64-gnu": "15.5.7", "@next/swc-linux-arm64-musl": "15.5.7", "@next/swc-linux-x64-gnu": "15.5.7", "@next/swc-linux-x64-musl": "15.5.7", "@next/swc-win32-arm64-msvc": "15.5.7", "@next/swc-win32-x64-msvc": "15.5.7", "sharp": "^0.34.3" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-L2KPiKmqTDpRdeVDdPjhf43g2/VPe0NCNndq7OKDCgOLWtxe1kbr/zXGIZtYY7kZEAjRf7Bj/mwUFSr+tYC2Yg=="], + "next": ["next@15.5.16", "", { "dependencies": { "@next/env": "15.5.16", "@swc/helpers": "0.5.15", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "15.5.16", "@next/swc-darwin-x64": "15.5.16", "@next/swc-linux-arm64-gnu": "15.5.16", "@next/swc-linux-arm64-musl": "15.5.16", "@next/swc-linux-x64-gnu": "15.5.16", "@next/swc-linux-x64-musl": "15.5.16", "@next/swc-win32-arm64-msvc": "15.5.16", "@next/swc-win32-x64-msvc": "15.5.16", "sharp": "^0.34.3" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-aZExBk/V6JCu3NCFc90twdj9L/M3y0+ukeQwUAZbOiqRhAX+h2oMEa0NZFhcpj6HYRYjVS3V2/3xvyOpNnmw7A=="], "next-auth": ["next-auth@4.24.13", "", { "dependencies": { "@babel/runtime": "^7.20.13", "@panva/hkdf": "^1.0.2", "cookie": "^0.7.0", "jose": "^4.15.5", "oauth": "^0.9.15", "openid-client": "^5.4.0", "preact": "^10.6.3", "preact-render-to-string": "^5.1.19", "uuid": "^8.3.2" }, "peerDependencies": { "@auth/core": "0.34.3", "next": "^12.2.5 || ^13 || ^14 || ^15 || ^16", "nodemailer": "^7.0.7", "react": "^17.0.2 || ^18 || ^19", "react-dom": "^17.0.2 || ^18 || ^19" }, "optionalPeers": ["@auth/core", "nodemailer"] }, "sha512-sgObCfcfL7BzIK76SS5TnQtc3yo2Oifp/yIpfv6fMfeBOiBJkDWF3A2y9+yqnmJ4JKc2C+nMjSjmgDeTwgN1rQ=="], @@ -3682,8 +3682,6 @@ "@codebuff/web/pino": ["pino@9.14.0", "", { "dependencies": { "@pinojs/redact": "^0.4.0", "atomic-sleep": "^1.0.0", "on-exit-leak-free": "^2.1.0", "pino-abstract-transport": "^2.0.0", "pino-std-serializers": "^7.0.0", "process-warning": "^5.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.2.0", "safe-stable-stringify": "^2.3.1", "sonic-boom": "^4.0.1", "thread-stream": "^3.0.0" }, "bin": { "pino": "bin.js" } }, "sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w=="], - "@codebuff/web/posthog-js": ["posthog-js@1.283.0", "", { "dependencies": { "@posthog/core": "1.5.0", "core-js": "^3.38.1", "fflate": "^0.4.8", "preact": "^10.19.3", "web-vitals": "^4.2.4" } }, "sha512-CJJiqK6wPCRTHkmCJ7i8zEDFYded1CURqZ1JSDL4au97TBFX8J50nxw5wI9jHoNlHlkIgfiBPPMDOlBsiIHpMQ=="], - "@commitlint/config-validator/ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="], "@commitlint/top-level/find-up": ["find-up@7.0.0", "", { "dependencies": { "locate-path": "^7.2.0", "path-exists": "^5.0.0", "unicorn-magic": "^0.1.0" } }, "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g=="], @@ -4294,8 +4292,6 @@ "@codebuff/web/pino/process-warning": ["process-warning@5.0.0", "", {}, "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA=="], - "@codebuff/web/posthog-js/web-vitals": ["web-vitals@4.2.4", "", {}, "sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw=="], - "@commitlint/config-validator/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], "@commitlint/top-level/find-up/locate-path": ["locate-path@7.2.0", "", { "dependencies": { "p-locate": "^6.0.0" } }, "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA=="], diff --git a/freebuff/web/package.json b/freebuff/web/package.json index 4b79e08cfd..b22be8891a 100644 --- a/freebuff/web/package.json +++ b/freebuff/web/package.json @@ -21,7 +21,7 @@ "clsx": "^2.1.1", "framer-motion": "^11.13.3", "lucide-react": "^0.487.0", - "next": "15.5.11", + "next": "15.5.16", "next-auth": "^4.24.11", "next-themes": "^0.4.6", "pino": "^9.6.0", diff --git a/freebuff/web/src/app/home-client.tsx b/freebuff/web/src/app/home-client.tsx index 3ccd90fa3d..25ff0af6d3 100644 --- a/freebuff/web/src/app/home-client.tsx +++ b/freebuff/web/src/app/home-client.tsx @@ -26,7 +26,7 @@ const faqs = [ { question: 'What models do you use?', answer: - 'Pick DeepSeek V4 Pro (default and smartest, but its API collects data for training) or Kimi K2.6 (no data retention) as the main coding agent. Gemini 3.1 Flash Lite for finding files and research.\n\nConnect your ChatGPT subscription to unlock GPT-5.4 for deep thinking.', + 'You can choose from three coding models. DeepSeek and Kimi share 5 one-hour premium sessions per day:\n\n- DeepSeek V4 Pro: premium and smartest. Its API collects data for training.\n- Kimi K2.6: premium and balanced.\n- MiniMax M2.7: fastest, with unlimited sessions.\n\nGemini 3.1 Flash Lite handles file finding and research. Connect your ChatGPT subscription to unlock GPT-5.4 for deep thinking.', }, { question: 'Which countries is Freebuff available in?', diff --git a/packages/internal/src/env.ts b/packages/internal/src/env.ts index 6edcea4d7f..4c2100493f 100644 --- a/packages/internal/src/env.ts +++ b/packages/internal/src/env.ts @@ -3,16 +3,18 @@ import { serverEnvSchema, serverProcessEnv } from './env-schema' // Only provide safe defaults in CI to avoid schema failures during tests // In local dev, missing env vars should fail fast so devs know to configure them const isCI = process.env.CI === 'true' || process.env.CI === '1' +const isNextProductionBuild = + process.env.NEXT_PHASE === 'phase-production-build' const envInput = { ...serverProcessEnv } -if (isCI) { - const ensureEnvDefault = (key: string, value: string) => { - if (!process.env[key]) { - process.env[key] = value - } - envInput[key as keyof typeof envInput] = process.env[key] +const ensureEnvDefault = (key: keyof typeof envInput, value: string) => { + if (!process.env[key]) { + process.env[key] = value } + envInput[key] = process.env[key] +} +if (isCI) { ensureEnvDefault('OPEN_ROUTER_API_KEY', 'test') ensureEnvDefault('OPENAI_API_KEY', 'test') ensureEnvDefault('ANTHROPIC_API_KEY', 'test') @@ -41,6 +43,13 @@ if (isCI) { ensureEnvDefault('DISCORD_APPLICATION_ID', 'test') } +// Next imports server route modules while collecting production build data. +// Freebuff auth routes do not use IPinfo, so keep build-time validation from +// requiring the runtime-only country-gating token. Runtime still fails fast. +if (isNextProductionBuild) { + ensureEnvDefault('IPINFO_TOKEN', 'build-time-placeholder') +} + // Only log environment in non-production if (process.env.NEXT_PUBLIC_CB_ENVIRONMENT !== 'prod') { console.log('Using environment:', process.env.NEXT_PUBLIC_CB_ENVIRONMENT) diff --git a/web/package.json b/web/package.json index 41ab9177ca..830cbbdc36 100644 --- a/web/package.json +++ b/web/package.json @@ -73,7 +73,7 @@ "geoip-lite": "^2.0.0", "lucide-react": "^0.487.0", "mermaid": "^11.8.1", - "next": "15.5.11", + "next": "15.5.16", "next-auth": "^4.24.11", "next-contentlayer2": "^0.5.8", "next-themes": "^0.4.6", From b60d947b600b293354b1c14f82c9f623afa5ded3 Mon Sep 17 00:00:00 2001 From: James Grugett Date: Wed, 6 May 2026 21:11:10 -0700 Subject: [PATCH 2/4] Clarify Freebuff model FAQ --- freebuff/web/src/app/home-client.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/freebuff/web/src/app/home-client.tsx b/freebuff/web/src/app/home-client.tsx index 25ff0af6d3..d6c04383f8 100644 --- a/freebuff/web/src/app/home-client.tsx +++ b/freebuff/web/src/app/home-client.tsx @@ -26,7 +26,7 @@ const faqs = [ { question: 'What models do you use?', answer: - 'You can choose from three coding models. DeepSeek and Kimi share 5 one-hour premium sessions per day:\n\n- DeepSeek V4 Pro: premium and smartest. Its API collects data for training.\n- Kimi K2.6: premium and balanced.\n- MiniMax M2.7: fastest, with unlimited sessions.\n\nGemini 3.1 Flash Lite handles file finding and research. Connect your ChatGPT subscription to unlock GPT-5.4 for deep thinking.', + 'You can choose from DeepSeek V4 Pro, Kimi K2.6, and MiniMax M2.7.\n\nSession limits: DeepSeek and Kimi share 5 one-hour premium sessions per day. MiniMax has unlimited sessions.\n\n- DeepSeek V4 Pro: premium and smartest. Its API collects data for training.\n- Kimi K2.6: premium and balanced.\n- MiniMax M2.7: fastest.\n\nGemini 3.1 Flash Lite handles file finding and research. Connect your ChatGPT subscription to unlock GPT-5.4 for deep thinking.', }, { question: 'Which countries is Freebuff available in?', From 3cc9421bb6350ae0a5dbceed39fc1306107a5dc2 Mon Sep 17 00:00:00 2001 From: James Grugett Date: Wed, 6 May 2026 21:12:31 -0700 Subject: [PATCH 3/4] Refine Freebuff model descriptions --- freebuff/web/src/app/home-client.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/freebuff/web/src/app/home-client.tsx b/freebuff/web/src/app/home-client.tsx index d6c04383f8..83ea0c976e 100644 --- a/freebuff/web/src/app/home-client.tsx +++ b/freebuff/web/src/app/home-client.tsx @@ -26,7 +26,7 @@ const faqs = [ { question: 'What models do you use?', answer: - 'You can choose from DeepSeek V4 Pro, Kimi K2.6, and MiniMax M2.7.\n\nSession limits: DeepSeek and Kimi share 5 one-hour premium sessions per day. MiniMax has unlimited sessions.\n\n- DeepSeek V4 Pro: premium and smartest. Its API collects data for training.\n- Kimi K2.6: premium and balanced.\n- MiniMax M2.7: fastest.\n\nGemini 3.1 Flash Lite handles file finding and research. Connect your ChatGPT subscription to unlock GPT-5.4 for deep thinking.', + 'You can choose from DeepSeek V4 Pro, Kimi K2.6, and MiniMax M2.7.\n\nSession limits: DeepSeek and Kimi share 5 one-hour premium sessions per day. MiniMax has unlimited sessions.\n\n- DeepSeek V4 Pro: smartest. Its API collects data for training.\n- Kimi K2.6: balanced.\n- MiniMax M2.7: fastest.\n\nGemini 3.1 Flash Lite handles file finding and research. Connect your ChatGPT subscription to unlock GPT-5.4 for deep thinking.', }, { question: 'Which countries is Freebuff available in?', From 5003a2b081d2b181900d4af93645d44cd65a7b75 Mon Sep 17 00:00:00 2001 From: James Grugett Date: Wed, 6 May 2026 21:15:40 -0700 Subject: [PATCH 4/4] Remove build-time IPinfo fallback --- bun.lock | 3 ++- package.json | 1 + packages/internal/src/env.ts | 9 --------- 3 files changed, 3 insertions(+), 10 deletions(-) diff --git a/bun.lock b/bun.lock index c0bb36d628..e575f4f9df 100644 --- a/bun.lock +++ b/bun.lock @@ -358,6 +358,7 @@ "@types/react": "19.2.14", "@types/react-dom": "19.2.3", "baseline-browser-mapping": "^2.9.14", + "caniuse-lite": "^1.0.30001792", "react": "^19.0.0", "react-dom": "^19.0.0", "signal-exit": "3.0.7", @@ -1618,7 +1619,7 @@ "camelcase-css": ["camelcase-css@2.0.1", "", {}, "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA=="], - "caniuse-lite": ["caniuse-lite@1.0.30001752", "", {}, "sha512-vKUk7beoukxE47P5gcVNKkDRzXdVofotshHwfR9vmpeFKxmI5PBpgOMC18LUJUA/DvJ70Y7RveasIBraqsyO/g=="], + "caniuse-lite": ["caniuse-lite@1.0.30001792", "", {}, "sha512-hVLMUZFgR4JJ6ACt1uEESvQN1/dBVqPAKY0hgrV70eN3391K6juAfTjKZLKvOMsx8PxA7gsY1/tLMMTcfFLLpw=="], "canvas": ["canvas@3.2.1", "", { "dependencies": { "node-addon-api": "^7.0.0", "prebuild-install": "^7.1.3" } }, "sha512-ej1sPFR5+0YWtaVp6S1N1FVz69TQCqmrkGeRvQxZeAB1nAIcjNTHVwrZtYtWFFBmQsF40/uDLehsW5KuYC99mg=="], diff --git a/package.json b/package.json index ad1d8002dc..6ae23fa737 100644 --- a/package.json +++ b/package.json @@ -50,6 +50,7 @@ "@types/react": "19.2.14", "@types/react-dom": "19.2.3", "baseline-browser-mapping": "^2.9.14", + "caniuse-lite": "^1.0.30001792", "zod": "^4.2.1", "signal-exit": "3.0.7" }, diff --git a/packages/internal/src/env.ts b/packages/internal/src/env.ts index 4c2100493f..14e023fef6 100644 --- a/packages/internal/src/env.ts +++ b/packages/internal/src/env.ts @@ -3,8 +3,6 @@ import { serverEnvSchema, serverProcessEnv } from './env-schema' // Only provide safe defaults in CI to avoid schema failures during tests // In local dev, missing env vars should fail fast so devs know to configure them const isCI = process.env.CI === 'true' || process.env.CI === '1' -const isNextProductionBuild = - process.env.NEXT_PHASE === 'phase-production-build' const envInput = { ...serverProcessEnv } const ensureEnvDefault = (key: keyof typeof envInput, value: string) => { @@ -43,13 +41,6 @@ if (isCI) { ensureEnvDefault('DISCORD_APPLICATION_ID', 'test') } -// Next imports server route modules while collecting production build data. -// Freebuff auth routes do not use IPinfo, so keep build-time validation from -// requiring the runtime-only country-gating token. Runtime still fails fast. -if (isNextProductionBuild) { - ensureEnvDefault('IPINFO_TOKEN', 'build-time-placeholder') -} - // Only log environment in non-production if (process.env.NEXT_PUBLIC_CB_ENVIRONMENT !== 'prod') { console.log('Using environment:', process.env.NEXT_PUBLIC_CB_ENVIRONMENT)