Admin dashboard URLs
Last reviewed 29 Aug 2026. Canonical production paths live at the root of
admin.finmatch.io. There is no/admin/folder ings://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
| What | Live URL |
|---|---|
| Dashboard | https://admin.finmatch.io/ |
| Applications | https://admin.finmatch.io/applications/ |
| Partner webhooks | https://admin.finmatch.io/partner-webhooks/ |
| Merchants list | https://admin.finmatch.io/merchants/ |
| One merchant | https://admin.finmatch.io/merchants/?id=M797483 |
| Admin CSS | https://admin.finmatch.io/css/admin.css |
| Admin docs | https://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 theprefixMatch: /admin/rewrite is not imported yet./merchants/?id=M797483is 200 HTML → that merchant page is fine; the/admin/URL is the leftover hallway, not a missing merchant.