Angular (Web)
Nx monorepo with 26 publishable SDK libraries, ~65 custom UI components, NgRx ComponentStore state management, and a CSS design token system β giving you a complete Angular web application foundation.
What It Does
The Angular platform spans two repositories:
sdks-angularβ The Foundation layer. An Nx-managed monorepo of 26 publishable libraries providing auth, RBAC, theming, messaging, notifications, files, search, commerce, and more.- Your product app β An Angular CLI workspace consuming Foundation SDKs. Product apps are built on top of the Foundation layer and compose its packages into domain-specific experiences.
Foundation libraries are published as @engineering11/*-web npm packages to GitHub Packages. Product apps consume them via npm install.
Key Capabilities
| Capability | Description |
|---|---|
| Nx 18 Monorepo | Parallel builds, dependency graph, remote caching on GCP β developers build only what changed |
| 26 SDK Libraries | Publishable @engineering11/*-web packages covering every Foundation domain |
| ~65 UI Components | Custom e11- prefixed library (no Angular Material dependency) with secondary entry points for tree-shaking |
| CSS Design Token System | Three-layer architecture: static theme packages β runtime tenant overrides β Tailwind utility mapping |
| NgRx ComponentStore | Reactive state management across all SDK libraries with EntityAdapter for collections |
| Firebase Auth + RBAC | Multi-tenant auth, route guards, session timeout, and product Γ role β permissions mapping |
| Config Provider Pattern | Abstract BaseConfigProvider + forRoot() β SDKs stay encapsulated, product apps plug in their own config |
| Cross-Repo Dependency Cascade | Release Please β publish β repository_dispatch β auto-update PRs in downstream repos |
| Cloud Build + Firebase Hosting | Multi-environment CI/CD with parallel builds, source-map upload, and per-branch preview URLs |
| Conventional Commits | Commitizen + commitlint + AI PR review driving automated changelogs and semver versioning |
How It Fits Together
ββββββββββββββββββββββββββββββββββββββββββββββββ
β sdks-angular (Foundation Layer) β
β Published as @engineering11/*-web to β
β GitHub Packages (npm.pkg.github.com) β
β β
β 26 SDK libraries: auth, access, config, β
β files, messaging, notifications, search, β
β commerce, community, social, and more β
ββββββββββββββββββββββββββββββββββββββββββββββββ€
β npm install β
ββββββββββββββββββββββββββββββββββββββββββββββββ€
β Your Product App (Product Layer) β
β Consumes @engineering11/* packages β
β β
β Apps: your domain-specific applications β
β Shared: shared-lib (domain components, β
β error mappings, product services) β
ββββββββββββββββββββββββββββββββββββββββββββββββArchitecture
Module Structure
Feature modules follow a consistent pattern with lazy-loaded routes:
modules/jobs/
βββ jobs.module.ts
βββ jobs-routing.module.ts
βββ views/ # Routed page components
βββ components/ # Reusable feature components
βββ services/ # Feature-level services
βββ stores/ # ComponentStore filesThe codebase is primarily NgModule-based with ~60 standalone components in newer features. Migration to standalone is underway.
SDK Configuration
Every SDK uses the same forRoot() pattern β abstract base config, concrete provider, module import:
// SDK defines the contract
export abstract class BaseAuthConfigProvider {
abstract get config(): IAuthConfig
}
// Your product app provides its implementation
export class AuthConfigProvider extends BaseAuthConfigProvider {
get config(): IAuthConfig {
return {
authBaseURL: environment.services.auth,
tenantId: this.appConfig.config.auth.tenantId,
}
}
}
// Wired via forRoot()
AuthModule.forRoot({ configProvider: AuthConfigProvider })Routing
All feature modules are lazy-loaded with multi-layered guards:
- Auth guards (
@engineering11/auth-web) βsuperGuard,loggedInOnlyGuard - Permission guards (
@engineering11/access-web) βPermissionsGuardwith route data - Feature guards (
@engineering11/config-web) βFeatureGuardchecks feature flags - Domain guards (product-level) β data pre-loading and role checks
What You Donβt Have to Build
- 26 publishable SDK libraries covering auth, RBAC, theming, config, files, messaging, notifications, search, commerce, community, social, maps, multimedia, payment, analytics, content, events, registration, user management, and tenant bootstrap
- ~65 UI components (forms, layout, feedback, data display, media, loaders, rich text, overlays)
- CSS design token system with runtime white-label theming
- Firebase Auth integration with multi-tenant support, guards, and session timeout
- Product Γ role permission system backed by Firestore
- NgRx ComponentStore for every SDK domain
- Cross-repo dependency cascade (SDK publish β auto-update product apps)
- Cloud Build CI/CD to Firebase Hosting with preview deployments
- Conventional commit enforcement with AI PR review
- Rollbar error monitoring with structured error handler classes
- Nx remote caching on GCP for fast CI builds
What You Build
- Product-specific features, views, and business logic
- Config providers for each SDK (
BaseXxxConfigProviderimplementations) - Route definitions and guard configuration
- Product-specific error type constants and handler mappings
- Domain components for product-specific UI
- Environment files (Firebase configs, API URLs, third-party keys)
- NgRx store logic for product-level state
Next Steps
- React Web β The React web platform
- Platforms Overview β Compare all frontend platforms
- Architecture β Cross-platform architecture patterns
- Capabilities β Authentication, theming, error handling, state, and more
Last updated on