07 · Clients & surfaces

Who hits which app. Preventing “I fixed the wrong SPA” mistakes.

Surface map

flowchart TB
  subgraph STAFF["Staff SPA — frontend/"]
    DASH["/dashboard"]
    POS["/pos/*"]
    ADM["/admin/*"]
    INV["/inventory/*"]
    REP["/reports/*"]
    BH["/business-hub"]
    MA["/master-admin/*"]
  end

  subgraph PUBLIC["Public SPA — public-site/"]
    HOME["Marketing /"]
    SIGN["/signup · /login"]
    STORE["/:slug/store"]
    BC["/barcode"]
  end

  subgraph PORTALS["Also on staff SPA or public"]
    EMP["/employee-portal"]
    TIX["public ticket portals"]
    BOOK["/book/:slug"]
    SIGP["/:slug/signage/:display"]
  end

  STAFF --> API["backend :4000"]
  PUBLIC --> API
  PORTALS --> API
          

URL cheat sheet (staging)

AudienceExample pathsApp
Merchant staff/login/dashboard · /pos · /adminfrontend
Platform operator/master-adminfrontend
Shoppers/{tenant}/storefrontend store routes + public marketing
Employees (ESS)/employee-portal/{tenant}frontend
Service customers/book/{tenant} · public ticketsfrontend
Lobby displays/{tenant}/signage/{slug}frontend SignagePlayer
Anyone (catalog demo)/barcode on public sitepublic-site
Developers (us)dochub.gopastearth.comDocHub static

Nginx routing mental model

Path prefixGoes to
/api /auth /customer /mediaBackend :4000
/admin /dashboard /login /posFrontend Vite :5173
/ marketing etc.public-site dist/