Angular 21 app built with standalone components, zoneless change detection, and the Wacom platform services (routing meta, CRUD helpers, signals-first state). The project ships with ready-to-use UI libraries, feature modules, and example pages for guest, public, user, and admin flows.
- Node 20+ and npm 10+ (Angular CLI 21 is provided locally via devDependencies)
- Chrome/Chromium for Playwright E2E (install once with
npx playwright installif browsers are missing)
https://chatgpt.com/g/g-68d25d311af08191be5aad28fca904b1-angular-web-art-work
npm install # install dependencies
npm start # serves 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– run the dev server with proxying to the configured API URLnpm run build– production build todist/npm run test– unit tests with Jestnpm run e2e– Playwright end-to-end tests (ensure browsers are installed)
src/app/app.config.ts– root providers (zoneless change detection, Wacom config, TinyMCE, router)src/app/app.routes.ts– route map for public, guest, user, and admin areassrc/app/layouts/– layout shells for public/guest/user routessrc/app/pages/– routed pages per role (guest/sign,public/components,user/profile)src/app/modules/– feature domains (auth/users with guards, translate flows, bird sample CRUD)src/app/libs/– reusable UI building blocks (alert, button, file picker/cropper, form builder, input, modal, select, table, etc.)src/app/form-components/+src/app/app.formcomponents.ts– template registry for the dynamic form systemsrc/app/page-components/– marketing/section blocks (hero, stats, gallery, pagination, etc.)src/app/icons/– icon packs used across the UIsrc/environments/– API/meta/language configuration
- Components are standalone and use signals; favor
computed/signal/effectplus OnPush change detection. - Wacom services power guards (
MetaGuard), CRUD helpers, store/http access, and meta tags. Updateenvironment.metawhen changing branding. - Dynamic form templates must be registered in
FORM_TEMPLATE_COMPONENTSso schemas can reference them by name. - Auth/user settings (roles, themes, defaults) and language options come from the environment files; update those when wiring to a new backend.
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 (
_). - Services injected in constructors should follow:
public configService: ConfigService private _configService: ConfigService
Scaffolding commands (requires global waw CLI):
waw add MODULENAME– creates a module with interfaces, services, pages, selectors, form-components, and formswaw page ROLE PAGENAME– creates a page under a specific rolewaw service SERVICENAME– creates a service in theservicesfolder
Examples:
waw add user
waw page user dashboard
waw service user- Fork and create a feature branch.
- Keep changes aligned with the existing standalone + signals pattern.
- Add or update tests where relevant (
npm run test/npm run e2e). - Open a pull request. . Create a new branch for your feature.
- Follow the coding guidelines outlined in this document.
- Submit a pull request for review.