- Hugo static site at root: config, content (home/about/resume/blog + 5 projects), data/resume.yaml, custom layouts (gpu background, resume renderer, projects list), dark theme with canvas behind content - gpu-bg/: extracted WebGPU/WebGL2 spiral engine as a Vite sub-package; slim bootstrap drops router/overlay/text renderer; fixed uniforms (scene0/dim0); self-contained engine.js - archive/: retired Vite SPA preserved (router, overlay, data, engine/text orphaned) - 3-stage Dockerfile (node -> hugo extended/dart-sass -> nginx), static nginx config - DEPLOYMENT.md handover + README rewrite; pre-hugo rollback tag
30 lines
1.1 KiB
Plaintext
30 lines
1.1 KiB
Plaintext
server {
|
|
listen 8080 default_server;
|
|
server_name _;
|
|
|
|
root /usr/share/nginx/html;
|
|
index index.html;
|
|
|
|
add_header X-Content-Type-Options "nosniff" always;
|
|
add_header X-Frame-Options "DENY" always;
|
|
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
|
|
|
|
gzip on;
|
|
gzip_types text/css application/javascript text/javascript application/wasm image/svg+xml;
|
|
gzip_min_length 512;
|
|
|
|
# fingerprint-hashed Hugo assets (css/js) and the engine bundle: immutable
|
|
location /css/ { expires 1y; add_header Cache-Control "public, immutable"; }
|
|
location /js/ { expires 1y; add_header Cache-Control "public, immutable"; }
|
|
location /gpu/ { expires 1y; add_header Cache-Control "public, immutable"; }
|
|
|
|
# static fonts/favicons
|
|
location /fonts/ { expires 1y; add_header Cache-Control "public, immutable"; }
|
|
|
|
# everything else: plain static — real files, 404 is legitimate (no SPA fallback)
|
|
location / {
|
|
try_files $uri $uri/ =404;
|
|
expires -1;
|
|
add_header Cache-Control "no-cache";
|
|
}
|
|
} |