Skip to main content

Admin dashboard URLs

Last reviewed 29 Aug 2026. Canonical production paths live at the root of admin.finmatch.io. There is no /admin/ folder in gs://finmatch-admin.

The one-sentence rule​

admin/ is the folder in git. It is not a path on the live website.

CI copies admin/css/…, admin/merchants/… onto the bucket root, so the live files are /css/admin.css and /merchants/index.html. Asking GCS for /admin/css/admin.css returns NoSuchKey XML (HTTP 404).

Canonical production URLs​

WhatLive URL
Dashboardhttps://admin.finmatch.io/
Applicationshttps://admin.finmatch.io/applications/
Partner webhookshttps://admin.finmatch.io/partner-webhooks/
Merchants listhttps://admin.finmatch.io/merchants/
One merchanthttps://admin.finmatch.io/merchants/?id=M797483
Admin CSShttps://admin.finmatch.io/css/admin.css
Admin docshttps://admin.finmatch.io/docs/

Query-string IDs (?id=) are the refresh-safe form. Path IDs (/merchants/M797483) are not objects and 404 unless a load-balancer rewrite is actually firing (the old pathTemplateMatch one never did).

/admin/… bookmarks​

Local admin/local-server.js strips /admin so http://localhost:5500/admin/merchants/ works. Production did not, until the url-map grew a prefixMatch: /admin/ → / rewrite. That is a compatibility shim for old bookmarks and leftover JS. New nav (PR #481) already emits /merchants/?id=… on admin.finmatch.io.

/admin with no trailing slash is not covered by prefixMatch: /admin/.

Load balancer — what actually matches​

platform/load-balancer-url-map.yaml is finmatch-admin-urlmap. Merging it does nothing. Apply with gcloud compute url-maps import (see platform/LOAD_BALANCER_CONFIG.md).

This balancer honours prefixMatch and fullPathMatch (docs.finmatch.io already uses those). It stores then ignores pathTemplateMatch. Do not add another {path=**} rule expecting it to serve traffic.

If a curl 404s​

curl -sI 'https://admin.finmatch.io/admin/css/admin.css' | head -8
curl -sI 'https://admin.finmatch.io/css/admin.css' | head -8
  • Both 404 → the site or the file is actually missing.
  • /admin/… is 404 XML and the root path is 200 → wrong prefix, or the prefixMatch: /admin/ rewrite is not imported yet.
  • /merchants/?id=M797483 is 200 HTML → that merchant page is fine; the /admin/ URL is the leftover hallway, not a missing merchant.