diff --git a/compose.yml b/compose.yml
index 425efcd..40856ac 100644
--- a/compose.yml
+++ b/compose.yml
@@ -197,7 +197,7 @@ services:
- GRAMPSWEB_ADMIN_EMAIL=${GRAMPSWEB_ADMIN_EMAIL}
- GRAMPSWEB_ADMIN_PASSWORD=${GRAMPSWEB_ADMIN_PASSWORD}
- GRAMPSWEB_TREE=${GRAMPSWEB_TREE:-Stiftung}
- - GRAMPSWEB_BASE_URL=${GRAMPSWEB_BASE_URL:-/ahnenforschung}
+ - GRAMPSWEB_BASE_URL=${GRAMPSWEB_BASE_URL:-http://localhost:8090}
- GRAMPSWEB_CELERY_CONFIG__broker_url=redis://redis:6379/0
- GRAMPSWEB_CELERY_CONFIG__result_backend=redis://redis:6379/0
- GRAMPSWEB_RATELIMIT_STORAGE_URI=redis://redis:6379/1
diff --git a/deploy-production/nginx.conf b/deploy-production/nginx.conf
index da57054..7ee8f8e 100644
--- a/deploy-production/nginx.conf
+++ b/deploy-production/nginx.conf
@@ -83,6 +83,8 @@ server {
}
# GrampsWeb Ahnenforschung
+ # GrampsWeb SPA has hardcoded — sub_filter rewrites it
+ # so asset URLs resolve under /ahnenforschung/ instead of /
location /ahnenforschung/ {
proxy_pass http://127.0.0.1:8090/;
proxy_set_header Host $host;
@@ -91,7 +93,14 @@ server {
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Script-Name /ahnenforschung;
- # WebSocket support (GrampsWeb uses SSE/WS for real-time updates)
+ # Rewrite to
+ # so the SPA loads JS/CSS from the correct subpath
+ proxy_set_header Accept-Encoding "";
+ sub_filter '' '';
+ sub_filter_once on;
+ sub_filter_types text/html;
+
+ # WebSocket support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";