[general]
host = "::"
port = 80
root = "/public"
log-level = "info"
compression = true
compression-level = "default"
cache-control-headers = false  # disable default cache headers, we define our own below

[advanced]

# HTML files — always revalidate with the server
# Browser caches it but checks if it's still fresh on every request.
# This means after a rebuild + redeploy, users get the new page on next visit
# without needing a manual refresh.
[[advanced.headers]]
source = "**/*.html"
[advanced.headers.headers]
Cache-Control = "no-cache, must-revalidate"

# Astro-fingerprinted assets (JS, CSS) — cache forever
# Astro hashes filenames like `_astro/index.DkJh93xa.js`, so a new build
# produces a new filename. The browser will never serve a stale file because
# the HTML (always revalidated above) will reference the new filename.
[[advanced.headers]]
source = "**/_astro/**"
[advanced.headers.headers]
Cache-Control = "public, max-age=31536000, immutable"

# Images and fonts — cache for 1 week
# These don't get Astro's fingerprinting by default (unless imported in JS/CSS),
# so we use a shorter TTL as a safety net.
[[advanced.headers]]
source = "**/*.{png,jpg,jpeg,gif,webp,avif,svg,ico}"
[advanced.headers.headers]
Cache-Control = "public, max-age=604800"

[[advanced.headers]]
source = "**/*.{woff,woff2,ttf,otf}"
[advanced.headers.headers]
Cache-Control = "public, max-age=604800"
