Source workspace for the Ngx BOS CRM / business operating system. It contains two things:
- an app template under
src/— a browser-only SPA built with standalone components, signals-first state, native control flow, and the WAW platform services (@wawjs/*) - the
@wawjs/ngx-bospackage underprojects/ngx-bos/— reusable BOS contracts, services, guards, selectors, pages, and routes extracted from the app
Business apps own routes, roles, schemas, dashboards, integrations, environment values, and workflow copy under src/. Reusable behavior lives in @wawjs/ngx-bos. See AGENTS.md and documentation/ for the source/package split.
- Node
^22.22.3,^24.15.0, or>=26.0.0with npm 8+ (Angular CLI 22 is provided locally via devDependencies)
npm install # install dependencies
npm start # serve on http://localhost:4200 with proxy.conf.jsonEnvironments live in src/environments/:
environment.tsfor local development (extendsenvironment.prod.ts)environment.prod.tsfor production builds (API URL, meta tags, languages, defaults)
npm start— dev server with proxying to the configured API URL (proxy.conf.json)npm run build— production app build todist/npm run build:ngx-bos— build the@wawjs/ngx-bospackage with ng-packagr
src/app/app.config.ts— root providers (zoneless change detection,ngxBosProvide, WAW services, TinyMCE, router)src/app/app.routes.ts— route map for guest, user, and admin areassrc/app/app.formcomponents.ts— project-specific dynamic form componentssrc/app/layouts/— layout shells for guest/user routessrc/app/pages/— routed pages per role (e.g.guest/sign,user/profile)src/environments/— API / meta / language configurationsrc/i18n/— interface translations (served at/i18n)projects/ngx-bos/— the reusable@wawjs/ngx-bospackage (users/auth, file upload, form adapters, guards, selectors, pages, and routes). See projects/ngx-bos/README.md.
- Components are standalone and signals-first; favor
computed/signal/effect. Angular 22 uses OnPush by default, so do not setchangeDetectionexplicitly. - WAW services power guards, CRUD helpers, store/http access, and meta tags. Update
environment.metawhen changing branding. - Dynamic form templates must be registered through
src/app/app.formcomponents.tsso schemas can reference them by name. - Reusable package APIs are imported from
@wawjs/ngx-bos, never from package-internal source paths.
Keep component classes consistent in this order:
- Injections (via
inject()) - Inputs / outputs / view queries
- Variables (readonly/public first, then private)
- Constructor (only when needed)
- Lifecycle hooks (
ngOnInit,ngOnDestroy, etc.) - Functions (public, then private)
Private variables and functions start with an underscore (_).
- Create a feature branch.
- Keep changes aligned with the standalone + signals pattern.
- Open a pull request for review.