Browser apps are the browser version of your app component. The pipeline builds a Docker image from Flutter Web, React Native Web (Expo), or Next.js and rolls it out to the server of your project; for production you need a domain. The deploy flow is described in Git workflow and deployment.
How the browser app is served
Traefik forwards requests to the browser app’s container based on the domain; MainPath sets up the HTTPS certificates. Dev and production are separate environments with their own configuration in the gitops-configuration repository.
Backend address and other variables
MainPath writes the backend URL of each environment into env/dev.generated.env and env/prod.generated.env; values shared across stages, such as the Sentry DSN, live in env/shared.generated.env. These files are regenerated whenever the project changes and are not edited; your own variables belong in the matching env/*.custom.env. How the files are loaded during the build and by mp run-local is covered in Environment variables.
Your browser app’s addresses
| Environment | URL |
|---|---|
| Dev | <app>.dev.<project>.<organization-domain>, assigned automatically |
| Production | your own domain from the project configuration |
For production, you enter your domain in the project; MainPath shows the required DNS records in the domain detail and keeps checking whether they are set, as described in Configure DNS. If the domain is hosted at a connected DNS provider, MainPath sets the records itself once that access is stored under Connections.
In a whitelabel project, every variant gets its own domains; without a custom domain, MainPath assigns <variant>.<project>.<organization-domain>.
Errors from the browser app show up in your Sentry project once you enable Sentry for the component under Features (Error tracking).