React Router v8 / Express frontend for OpenTourBuilder. Multi-tenant: the subdomain determines which tour set is loaded.
| Environment | Root URL | Tenant URL |
|---|---|---|
| Production | opentour.site |
<tenant>.opentour.site |
| Staging | dev.opentour.site |
<tenant>.dev.opentour.site |
| Local | lvh.me:4200 |
<tenant>.lvh.me:4200 |
The server resolves the tenant by finding the leftmost subdomain that is not a known environment label (dev, staging, www). Requests with no tenant (e.g. the root domain) are served the tour set index.
Start the dev server:
npm run devTo test location services (requires HTTPS):
PROTOCOL=https npm run devSee this article for generating local wildcard certs.
npm testDeployments are automated via GitHub Actions on push to develop or main.
| Branch | Image tag | NODE_ENV |
ECS target |
|---|---|---|---|
develop |
latest |
staging |
otb-pub-dev |
main |
stable |
production |
otb-pub-prod |
The workflow builds a Docker image, pushes it to ECR, and force-restarts the ECS service. The registry URI is stored in the ECR_REGISTRY GitHub secret.
To deploy manually:
npm run build
npm start