Frontend Features

June 14, 2026 · View on GitHub

Catalog of Angular apps, admin feature areas, and common-ui API services. Before adding UI or HTTP clients, check shared-infrastructure.md.

Applications

AppPathPortDescriptionStatus
admin-uifrontend/projects/admin-ui/5100Role-gated admin dashboard (Material UI)Active
user-uifrontend/projects/user-ui/5200Public-facing app shellMinimal starter
common-uifrontend/projects/common-ui/Shared services, base classes, auth, pipesShared layer

admin-ui Feature Areas

Top-level routes defined in frontend/projects/admin-ui/src/app/app.routes.ts. All authenticated routes use LayoutComponent with isLoggedIn + hasRole guards.

FeatureRoute prefixRolesRoutes fileAPI service(s)Description
Auth/authPublicfeatures/auth/auth.routes.tsAuthServiceLogin page; redirects by role after login
Dashboard/dashboardAdmin, Managerfeatures/dashboard/dashboard.routes.tsDashboardService, AlertsServiceWidgets: user tiles, login charts, alerts
Users/usersAdminfeatures/users/users.routes.tsUsersService, LoginRecordsServiceUser list, create/edit, password, avatar, embedded login records
Tasks/tasksAdminfeatures/tasks/tasks.routes.tsTasksService, TaskLogsServiceTask list, create/edit, start/stop, global and embedded task logs
Contact Requests/contact-requestsAdminfeatures/contact-requests/contact-requests.routes.tsContactRequestsServiceInbound contact form list and detail
System Settings/system-settingsAdminfeatures/system-settings/system-settings.routes.tsSystemConfigServiceRead-only system config view
System Health/system-healthAdminfeatures/system-health/system-health.routes.tsHealthServiceApplication health check status
Circuit Breakers/circuit-breakersAdminfeatures/circuit-breaker/circuit-breaker.routes.tsCircuitBreakersServiceList and detail with reset action

Route Details

Auth

RouteComponentDescription
/auth/loginLoginComponentUsername/password login

Dashboard

RouteComponentDescription
/dashboardDashboardComponentDashboard landing with widgets

Widgets: UserTilesWidgetComponent, LoginRecordsByDeviceWidgetComponent, LoginRecordsByCountryWidgetComponent, AlertsWidgetComponent.

Users

RouteComponentDescription
/users/listUsersListComponentFilterable paginated user table
/users/createUserComponentCreate user form
/users/:idUserComponentEdit user, change password, login records

Tasks

RouteComponentDescription
/tasks/listTasksListComponentTask list with start/stop toggles
/tasks/createTaskComponentCreate task
/tasks/:idTaskComponentEdit task, embedded task logs
/tasks/logsTaskLogsListComponentGlobal task log list
/tasks/logs/:idTaskLogComponentTask log detail

Contact Requests

RouteComponentDescription
/contact-requests/listContactRequestsListComponentFilterable contact request list
/contact-requests/:idContactRequestComponentView and mark as read

System Settings

RouteComponentDescription
/system-settingsSystemSettingsComponentRead-only system config

System Health

RouteComponentDescription
/system-healthSystemHealthComponentMongoDB and overall app health via Terminus

Circuit Breakers

RouteComponentDescription
/circuit-breakers/listCircuitBreakersListComponentFilterable circuit breaker list
/circuit-breakers/:idCircuitBreakerComponentView and reset breaker

admin-ui Core Components (not feature routes)

ComponentPathDescription
CardComponentcore/components/card/Content card wrapper
SpinnerComponentcore/components/spinner/Loading overlay
AppTextComponentcore/components/text/Read-only labeled text
ValidationErrorComponentcore/components/validation-error/Form validation messages
SectionDividerComponentcore/components/section-divider/Section separator

Side Menu

Menu items registered in layout/side-menu/side-menu.service.ts. Icons must be registered in AppComponent FaIconLibrary.

user-ui Features

RouteComponentDescriptionStatus
/HomeComponentPlaceholder home pageActive
MainLayoutComponentShell wrapper with router outletActive

No feature folders, no lazy routes, no backend API calls yet. Uses BaseComponent and EnvironmentService from common-ui only.

common-ui API Services

All extend BaseApiService and call ${env.apiUrl}/.... Located in frontend/projects/common-ui/services/.

ServiceBackend endpointsUsed by
AuthServicePOST /auth/login, POST /auth/refreshadmin-ui auth
UsersServiceCRUD /users, password, avataradmin-ui users
TasksServiceCRUD /tasks, start/stop/statusadmin-ui tasks
TaskLogsServiceGET /task-logs, GET /task-logs/:idadmin-ui tasks
LoginRecordsServiceGET /login-recordsadmin-ui users
AlertsServiceGET /alerts, dismiss actionsadmin-ui dashboard
ContactRequestsServiceGET /contact-request, mark-as-readadmin-ui contact-requests
CircuitBreakersServiceGET /circuit-breakers, resetadmin-ui circuit-breakers
DashboardServiceGET /dashboard/*admin-ui dashboard
SystemConfigServiceGET /system-configadmin-ui system-settings
HealthServiceGET /healthadmin-ui system-health
EnvironmentService— (reads window.__env)Both apps
MeServiceGET /meStub — backend endpoint active; service not wired
GlobalWipService— (localStorage drafts)Unused

Stubs and Unused Pieces

PiecePathNotes
MeServicecommon-ui/services/me.service.tsEmpty stub; backend GET /v1/me is active
DialogServicecommon-ui/dialog/Built but not integrated in either app
BasePickerComponentcommon-ui/base/base-picker.component.tsNo concrete subclasses
BaseInputComponentcommon-ui/base/base-input.component.tsNo concrete subclasses
BaseButtonComponentcommon-ui/base/base-button.component.tsNo concrete subclasses
GlobalWipServicecommon-ui/services/global-wip.service.tsWipSection enum empty

Reference Implementations

PatternExample path
Full CRUD entityadmin-ui/src/app/features/users/
List + detail (read-only actions)admin-ui/src/app/features/contact-requests/
List + admin actionsadmin-ui/src/app/features/circuit-breaker/
System read-only configadmin-ui/src/app/features/system-settings/
Nested sub-listsadmin-ui/src/app/features/tasks/ (logs), features/users/ (login records)
Dashboard widgetsadmin-ui/src/app/features/dashboard/

Adding a New admin-ui Entity (Checklist)

  1. Contracts → backend/libs/contracts/src/{dto,queries,commands,enums}/
  2. Backend module → backend/src/<entity>/
  3. API service → common-ui/services/<entity>.service.ts
  4. List page → admin-ui/features/<entity>/<entity>-list/ (extends BaseListComponent)
  5. Edit/create → admin-ui/features/<entity>/<entity>/ (extends BaseEditComponent)
  6. Routes → admin-ui/features/<entity>/<entity>.routes.ts
  7. Register → admin-ui/app.routes.ts + side-menu.service.ts + FaIcon in app.component.ts
  8. Update this doc and features-backend.md

See .cursor/rules/frontend/admin-ui-entity-features.mdc for detailed patterns.

Adding a New Entry

| **MyFeature** | `/my-feature` | Admin | `features/my-feature/my-feature.routes.ts` | `MyFeatureService` | One-line description |

Last updated

2026-06-15