import type { NextConfig } from "next"; // basePath: пусто в dev / `/trade-in` в production когда сидим под gendsgn.ru/trade-in. // Прокидывается через env при сборке Docker. const BASE_PATH = process.env.NEXT_PUBLIC_BASE_PATH ?? ""; const nextConfig: NextConfig = { reactStrictMode: true, output: "standalone", // basePath сдвигает ВСЕ routes на /trade-in/* — Next сам префиксит ассеты // и navigation. Пустая строка = no-op. basePath: BASE_PATH || undefined, // assetPrefix — для CDN (мы не используем, оставляем пустым) // trailingSlash — false (default), важно чтобы Caddy /trade-in без слэша // редиректил на /trade-in/. // Каноничная витрина = /v2. Легаси-корень (app/page.tsx, HeroSummary) // остаётся в репо, но корень редиректит на /v2, чтобы оценщики попадали // сразу на новую версию. permanent:false → 307 (обратимо, не кэшируется // навсегда). basePath авто-префиксит source/destination → редирект живёт // на /trade-in → /trade-in/v2. Query-string Next пробрасывает автоматически // (destination без своего query), поэтому /trade-in/?id= → // /trade-in/v2?id= — ссылки на конкретную оценку (restore по ?id=) // не ломаются. async redirects() { return [{ source: "/", destination: "/v2", permanent: false }]; }, // В dev (без Caddy) Next.js сам проксирует /api/* и /health на backend // так что браузер использует относительные same-origin URLs. async rewrites() { const backend = process.env.BACKEND_URL ?? "http://localhost:8000"; return [ { source: "/api/:path*", destination: `${backend}/api/:path*` }, { source: "/health", destination: `${backend}/health` }, ]; }, }; export default nextConfig;