aethex-forge/vercel.json
Builder.io 68a31dff84 Add cache and security headers to Vercel config
cgen-145877db21534653a60477bdbda6f88d
2025-10-19 00:34:21 +00:00

42 lines
1.5 KiB
JSON

{
"version": 2,
"buildCommand": "npm ci && npm run build",
"outputDirectory": "dist",
"rewrites": [
{ "source": "/api/:path*", "destination": "https://e7c3806a9bfe4bdf9bb8a72a7f0d31cd-324f24a826ec4eb198c1a0eef.fly.dev/api/:path*" },
{ "source": "/(.*)", "destination": "/" }
],
"headers": [
{
"source": "/assets/(.*)",
"headers": [
{ "key": "Cache-Control", "value": "public, max-age=31536000, immutable" }
]
},
{
"source": "/(.*).(css|js|png|jpg|jpeg|gif|svg|webp|ico|woff2)",
"headers": [
{ "key": "Cache-Control", "value": "public, max-age=31536000, immutable" }
]
},
{
"source": "/api/(.*)",
"headers": [
{ "key": "Cache-Control", "value": "no-store" }
]
},
{
"source": "/(.*)",
"headers": [
{ "key": "X-Frame-Options", "value": "DENY" },
{ "key": "X-Content-Type-Options", "value": "nosniff" },
{ "key": "Referrer-Policy", "value": "strict-origin-when-cross-origin" },
{ "key": "Permissions-Policy", "value": "geolocation=(), microphone=(), camera=()" },
{
"key": "Content-Security-Policy",
"value": "default-src 'self' https: data: blob:; script-src 'self' 'unsafe-inline' 'unsafe-eval' https:; style-src 'self' 'unsafe-inline' https:; img-src 'self' data: blob: https:; font-src 'self' data: https:; connect-src 'self' https: wss:; frame-ancestors 'none'"
}
]
}
]
}