ad6de29115
The previous attempt put 'middlewareClientMaxBodySize' at the top level of NextConfig — Next 16.1 rejected it as an unrecognised key. Inspecting the shipped config schema (node_modules/next/dist/server/config-schema.js) revealed the option lives under experimental and was renamed to 'proxyClientMaxBodySize' when middleware.ts → proxy.ts; the old name is still accepted but deprecated. Switched to the new name and confirmed Next now lists it in the Experiments banner at boot. While we were at it the cap was bumped to 500MB (was 100MB) so batch uploads have headroom over the 30MB-per-file bucket limit. Added a client-side pre-flight in JobFilesPanel: rejects individual files >30MB and total batches >400MB *before* hitting the server, with inline error messaging instead of a cryptic 'Unexpected end of form' bounce. Also raised serverActions.bodySizeLimit to 500mb to match.
48 lines
1.4 KiB
TypeScript
48 lines
1.4 KiB
TypeScript
import type { NextConfig } from "next";
|
|
|
|
const nextConfig: NextConfig = {
|
|
experimental: {
|
|
optimizePackageImports: ["lucide-react", "@radix-ui/react-icons"],
|
|
serverActions: {
|
|
// Job files bucket caps individual files at 30MB; allow batch uploads
|
|
// (multipart overhead + ~16 files of 30MB worst case).
|
|
bodySizeLimit: "500mb",
|
|
},
|
|
// Next 16 renamed `middlewareClientMaxBodySize` to `proxyClientMaxBodySize`
|
|
// (middleware.ts → proxy.ts). Default 10MB gates every body that flows
|
|
// through our auth proxy — without this override multipart uploads exceed
|
|
// the cap and the parser dies with "Unexpected end of form".
|
|
proxyClientMaxBodySize: "500mb",
|
|
},
|
|
turbopack: {},
|
|
|
|
images: {
|
|
remotePatterns: [
|
|
{ protocol: "https", hostname: "ui.shadcn.com" },
|
|
{ protocol: "https", hostname: "images.unsplash.com" },
|
|
],
|
|
formats: ["image/webp", "image/avif"],
|
|
},
|
|
|
|
async headers() {
|
|
return [
|
|
{
|
|
source: "/(.*)",
|
|
headers: [
|
|
{ key: "X-Frame-Options", value: "DENY" },
|
|
{ key: "X-Content-Type-Options", value: "nosniff" },
|
|
{ key: "Referrer-Policy", value: "origin-when-cross-origin" },
|
|
],
|
|
},
|
|
];
|
|
},
|
|
|
|
async redirects() {
|
|
return [
|
|
{ source: "/home", destination: "/dashboard", permanent: true },
|
|
];
|
|
},
|
|
};
|
|
|
|
export default nextConfig;
|