A Docker-based Angular 21 frontend, served by Nginx in production.
~/.npmrcbin/dev build
bin/dev upTo stop:
Example :bin/dev downbin/dev Commands| Command | Description |
|---|---|
bin/dev up | Start containers |
bin/dev down | Stop and remove containers |
bin/dev build | Build images (--pull --no-cache) |
bin/dev restart | Down then up |
bin/dev npm <cmd> | Run npm in container |
bin/dev ng <cmd> | Run any Angular CLI command in container |
bin/dev test | Run unit tests once (vitest via ng test --watch=false) |
bin/dev test-watch | Run unit tests in watch mode |
bin/dev lint | Run ESLint (ng lint) |
bin/dev lint-fix | Auto-fix lint issues |
bin/dev format | Check formatting with Prettier |
bin/dev format-fix | Auto-fix formatting with Prettier |
bin/dev logs | Show container logs |
bin/dev sh | Open a shell in the app container |
bin/dev exec <args> | Run a command in a container |
bin/dev ps | List running containers |
# Run tests
bin/dev test
# Production build
bin/dev ng build --configuration=production
# Generate a component
bin/dev ng generate component features/my-feature/my-component --standalone --style=scss
# Install a new dependency
bin/dev npm install some-package
# View logs
bin/dev logs -fThe project includes a pre-commit hook that runs ng lint and prettier --check inside the container before each commit. To activate:
git config core.hooksPath .githooks@tooling/jumpin)The @tooling/jumpin package is generated by the backend CI pipeline from the OpenAPI spec. It is published with dist-tags based on the backend branch:
| Dist-tag | Backend branch | Description |
|---|---|---|
latest | production | Stable production API client |
staging | staging | Staging API client |
<branch-name> | feature branches | Client from a specific feature branch |
To install or update:
Example :# Install latest production client
bin/dev npm install @tooling/jumpin@latest
# Install staging client
bin/dev npm install @tooling/jumpin@staging
# Install from a specific feature branch
bin/dev npm install @tooling/jumpin@my-feature-branchA plain Angular CLI project (no Nx, no monorepo libraries). Everything lives under src/app/:
src/app/
├── core/
│ ├── config/ # app.config.ts, APP_CONFIG token, runtime /config.json loader
│ ├── guards/ # authGuard, guestGuard, adminGuard
│ ├── store/ # AuthStore, UiStore (NgRx Signal Stores)
│ └── util/ # core helpers
├── shared/
│ ├── components/ # bbc-call-state, bbc-delete-confirm-dialog, bbc-editor, bbc-emoji,
│ │ # bbc-emoji-picker-dialog, bbc-header, bbc-navigation, bbc-noise-overlay,
│ │ # bbc-status-indicator, icons/
│ └── util/ # error, logger.service, meta, with-call-state
├── layout/
│ ├── main-layout/ # Wraps dashboard, program, info, map, activities
│ ├── splash-layout/ # Wraps welcome + landing (fullscreen)
│ └── admin-layout/ # Wraps admin pages
└── features/
├── welcome/
├── landing/
├── dashboard/
├── program/ # incl. program-header (feature-scoped)
├── info/
├── map/
├── activities/
└── admin/
├── events/
├── info-pages/
└── locations/A single TypeScript alias is defined in tsconfig.json: @/* → src/app/*. Use it in imports:
import { AuthStore } from '@/core/store/auth.store';
import { HeaderComponent } from '@/shared/components/header/header.component';bbc- (kebab-case) — enforced by eslint.config.js.bbc (camelCase).I (e.g. INavigationItem, IAuthState).See docs/shared-components.md for the shared-component catalog and the component generator command.
The app loads its configuration at runtime from /config.json. In development, this file is served from public/config.json with local defaults. In production, it is generated at container startup from environment variables (see .docker/docker-entrypoint.sh).
public/config.json)| Variable | Default | Description |
|---|---|---|
AZURE_TENANT_ID | 36c9760a-... | Azure AD tenant ID |
AZURE_FRONTEND_CLIENT_ID | 288ae0ae-... | Azure AD Frontend-app registration ID |
AZURE_BACKEND_CLIENT_ID | 123ade3a-... | Azure AD Backend-app registration ID |
REDIRECT_URI | / | Post-authentication redirect path |
ENDPOINT_URI | https://jumpin.paka.test/api/jumpin/v1/ | Backend API base URL |
CLIENT_ACCESS | access_as_user | API scopes (space-separated) |
| Variable | Description |
|---|---|
AZURE_TENANT_ID | Azure AD tenant ID |
AZURE_FRONTEND_CLIENT_ID | Client ID of the Frontend Application for the Jumpin App |
AZURE_BACKEND_CLIENT_ID | Client ID of the Backend Application for the Jumpin App |
ENDPOINT_URI | Backend API base URL (e.g. https://jumpin.bbcag.ch/api/jumpin/v1/) |
REDIRECT_URI | Post-authentication redirect path (default: /) |
CLIENT_ACCESS | API scopes (default: access_as_user) |
Production deployment is handled by GitLab CI/CD. Pushing to staging deploys to the test server, pushing to production deploys to the production server.
See .gitlab-ci.yml for pipeline configuration. Required variables:
| Variable | Scope | Description |
|---|---|---|
DUCKY_GCLOUD | all | GCR authentication JSON key |
DUCKY_SSH_KEY | all | SSH private key |
AZURE_TENANT_ID | per environment | Azure AD tenant ID |
AZURE_CLIENT_ID | per environment | Azure AD app registration ID |