server {
    listen 80;
    server_name _;
    root /usr/share/nginx/html;
    index index.html;

    # Vue Router uses history mode — every unmatched path must fall through
    # to index.html or a hard refresh on /alerts returns 404.
    location / {
        try_files $uri $uri/ /index.html;
    }

    # Hashed assets are immutable; index.html must never be cached or clients
    # keep loading the previous release's asset manifest.
    location /assets/ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }
    location = /index.html {
        add_header Cache-Control "no-cache, no-store, must-revalidate";
    }

    gzip on;
    gzip_types text/css application/javascript application/json image/svg+xml;
    gzip_min_length 1024;
}