- canvas fills the entire screen on any device; the 480x640 world is scaled to fit and bottom-aligned so the ground always sits on the bottom edge, with the sky painted full-bleed behind it - the canvas buffer now always matches its laid-out size, so the drawing can never drift out of step with the screen - HUD (score, badge, buffs, toasts, biome banner) moved to screen space so it stays pinned to the real screen edges - sun and stars drawn in screen space so the sky above the play area is not empty - PWA: manifest, service worker (offline), generated app icons and an in-game INSTALL APP button - overlays now dim the whole screen, not just the game strip
57 lines
1.6 KiB
Nginx Configuration File
57 lines
1.6 KiB
Nginx Configuration File
server {
|
|
listen 80;
|
|
listen [::]:80;
|
|
# Coolify's default app port - serve the game there too so the proxy
|
|
# can route to 80 or 3000 and the site works either way
|
|
listen 3000;
|
|
listen [::]:3000;
|
|
server_name _;
|
|
|
|
root /usr/share/nginx/html;
|
|
index index.html;
|
|
|
|
server_tokens off;
|
|
charset utf-8;
|
|
|
|
# The game is one file - never cache it, so a redeploy shows up at once
|
|
location = /index.html {
|
|
add_header Cache-Control "no-cache, no-store, must-revalidate" always;
|
|
try_files $uri =404;
|
|
}
|
|
|
|
# the service worker must always be revalidated or updates never land
|
|
location = /sw.js {
|
|
add_header Cache-Control "no-cache, no-store, must-revalidate" always;
|
|
add_header Service-Worker-Allowed "/" always;
|
|
try_files $uri =404;
|
|
}
|
|
|
|
# the web app manifest needs its own content type
|
|
location = /manifest.webmanifest {
|
|
default_type application/manifest+json;
|
|
add_header Cache-Control "public, max-age=604800" always;
|
|
try_files $uri =404;
|
|
}
|
|
|
|
# icons can be cached hard - they only change with a version bump
|
|
location ~* \.png$ {
|
|
add_header Cache-Control "public, max-age=604800" always;
|
|
try_files $uri =404;
|
|
}
|
|
|
|
location = /healthz {
|
|
access_log off;
|
|
default_type text/plain;
|
|
return 200 "ok\n";
|
|
}
|
|
|
|
location / {
|
|
try_files $uri $uri/ =404;
|
|
}
|
|
|
|
gzip on;
|
|
gzip_vary on;
|
|
gzip_min_length 1024;
|
|
gzip_comp_level 5;
|
|
gzip_types text/plain text/css application/javascript application/json image/svg+xml;
|
|
}
|