diff --git a/headroom/dashboard/templates/dashboard.html b/headroom/dashboard/templates/dashboard.html
index 168fa73e2..1aa01f8cb 100644
--- a/headroom/dashboard/templates/dashboard.html
+++ b/headroom/dashboard/templates/dashboard.html
@@ -1180,7 +1180,7 @@
HEADROOM
No per-project data yet.
Add to each project's .claude/settings.local.json:
- ANTHROPIC_BASE_URL: http://127.0.0.1:8787/p/<project-name>
+
diff --git a/tests/test_dashboard_cache_ttl_playwright.py b/tests/test_dashboard_cache_ttl_playwright.py
index 7144aa55b..a2ae2ad88 100644
--- a/tests/test_dashboard_cache_ttl_playwright.py
+++ b/tests/test_dashboard_cache_ttl_playwright.py
@@ -187,6 +187,39 @@ def handler(route) -> None: # type: ignore[no-untyped-def]
page.route("**/*", handler)
+def test_dashboard_per_project_setup_url_uses_current_origin() -> None:
+ with sync_playwright() as pw:
+ browser = pw.chromium.launch()
+ page = browser.new_page(viewport={"width": 1720, "height": 1400}, color_scheme="dark")
+ _install_dashboard_routes(page)
+
+ page.goto("http://127.0.0.1:8788/dashboard", wait_until="load")
+ expect(
+ page.get_by_text(
+ "ANTHROPIC_BASE_URL: http://127.0.0.1:8788/p/", exact=True
+ )
+ ).to_be_visible()
+ expect(
+ page.get_by_text(
+ "ANTHROPIC_BASE_URL: http://127.0.0.1:8787/p/", exact=True
+ )
+ ).to_have_count(0)
+
+ page.goto("http://headroom.local:9393/dashboard", wait_until="load")
+ expect(
+ page.get_by_text(
+ "ANTHROPIC_BASE_URL: http://headroom.local:9393/p/", exact=True
+ )
+ ).to_be_visible()
+ expect(
+ page.get_by_text(
+ "ANTHROPIC_BASE_URL: http://127.0.0.1:8787/p/", exact=True
+ )
+ ).to_have_count(0)
+
+ browser.close()
+
+
def test_dashboard_renders_observed_ttl_metrics_and_can_capture_screenshot() -> None:
artifact_dir = os.environ.get("HEADROOM_PLAYWRIGHT_ARTIFACT_DIR")