SkateSpots/netlify.toml
2026-10-27 21:00:39 +07:00

50 lines
1.9 KiB
TOML

[build]
command = "npm run build"
publish = "dist"
# Server-side AI proxy for Sasquatch (holds the OpenRouter key).
[functions]
directory = "netlify/functions"
[[headers]]
for = "/*"
[headers.values]
# Keep this Content-Security-Policy in sync with public/_headers.
# Web-only hardening; the native Capacitor build is unaffected (it has no CSP).
Content-Security-Policy = "default-src 'none'; script-src 'self' 'wasm-unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob: https:; font-src 'self' https://fonts.gstatic.com data:; connect-src 'self' https: wss:; media-src 'self' blob: https:; frame-src 'self' https:; worker-src 'self' blob:; manifest-src 'self'; object-src 'none'; base-uri 'none'; form-action 'self'; frame-ancestors 'none'; upgrade-insecure-requests"
X-Frame-Options = "DENY"
X-Content-Type-Options = "nosniff"
Referrer-Policy = "strict-origin-when-cross-origin"
Permissions-Policy = "geolocation=(self), camera=(self), microphone=()"
[[headers]]
for = "/assets/*"
[headers.values]
Cache-Control = "public, max-age=31536000, immutable"
# Human-friendly short links.
# /community -> the app's Community page (HashRouter route).
# /c -> the Cordn room reference (short link for sharing).
# Keep these BEFORE the SPA fallback.
[[redirects]]
from = "/community"
to = "/#/community"
status = 302
force = true
[[redirects]]
from = "/c"
to = "https://cordn.net/chat/cordn1qgdhwumn8ghj7un9d3shjtnnddshgefdwdcx7arn9ehhyecpyqpgz6s9k82wwznal8r39mm0wfe8wsnf6eda3ghjvt8qxvxs3ptfxqq5wd4kzar9wdcx7arn8f3k7mtdw4hxjare8hqt74"
status = 302
force = true
[[redirects]]
from = "/cordn"
to = "https://cordn.net/chat/cordn1qgdhwumn8ghj7un9d3shjtnnddshgefdwdcx7arn9ehhyecpyqpgz6s9k82wwznal8r39mm0wfe8wsnf6eda3ghjvt8qxvxs3ptfxqq5wd4kzar9wdcx7arn8f3k7mtdw4hxjare8hqt74"
status = 302
force = true
[[redirects]]
from = "/*"
to = "/index.html"
status = 200