An enterprise-grade admin dashboard built with Angular v21, designed to reflect real-world frontend architecture, scalability concerns, and accessibility-first development practices.
This project is a production-oriented reference implementation showcasing senior-level Angular and frontend engineering.
- Modern Angular v21 with standalone components
- Signals + RxJS for predictable state management
- Role-Based Access Control (RBAC) with Users, Roles, and Permissions
- Enterprise-grade UX and accessibility (A11y)
- Localization with English (LTR) & Arabic (RTL) support
- Unit-tested core logic and UI flows
- Clean, scalable project structure aligned with enterprise standards
- Framework: Angular v21
- Architecture: Standalone components, feature-based structure
- State Management: Angular Signals with RxJS where appropriate
- Styling: SCSS
- Testing: Vitest (unit testing)
- Localization: Angular built-in i18n (XLIFF)
- Accessibility: WCAG-aligned ARIA practices
-
Persistent application shell (header + sidenav)
-
Layout-driven routing with a routed content area
-
Responsive navigation patterns:
- Desktop: fixed sidebar
- Tablet & Mobile: off-canvas sidenav with overlay
-
Clear separation between layout and feature concerns
- Authentication (Login)
- Users
- Admin
- Roles & Permissions
- Role Details
app-badge- read-only status indicatorsapp-paginationapp-tabs- Shared pipes for mapping role and permission codes to human-readable labels
- Standalone components to simplify dependency boundaries and enable granular composition
- Signals for core state with RxJS only where stream operators add real value
- Feature-first folder structure to keep routing, state, and UI co-located
- Compile-time i18n for reliable RTL and predictable release artifacts
- Accessibility as a design constraint, not a retrofit
This project includes a realistic authentication and authorization foundation:
-
Authentication state managed using Angular Signals
-
Session persistence with safe bootstrap restoration
-
Role-Based Access Control (RBAC):
- Permissions derived from roles
- Permission-based route protection using
canMatch - Permission-driven navigation rendering
-
Secure-by-default access model (no permission -> no access)
Authorization logic is intentionally centralized to avoid stale or inconsistent permission state.
Accessibility was treated as a first-class requirement, not a retrofit. A full pass was completed across the entire application (login -> role details).
-
Proper heading hierarchy (
h1per page, no skipped levels) -
Semantic HTML tables with
thead,tbody, andscope="col" -
Accessible navigation with
aria-current="page" -
ARIA-labeled pagination, tabs, and action buttons
-
Keyboard-safe navigation patterns:
- ESC key handling
- Focus trapping within overlays
- Focus restoration on close
-
Icons treated as decorative unless interactive
Badges are intentionally presentational-only and kept free of ARIA roles.
The application uses Angular's built-in i18n with support for:
- English (LTR)
- Arabic (RTL)
Compile-time localization was chosen for v1 to prioritize:
- Strong compile-time safety
- Correct RTL behavior
- Simplicity and clarity for an initial production-ready version
- No runtime language switching
- Rebuild required per locale
- Limited scalability for large translation teams
Localized builds are emitted under:
dist/enterprise-dashboard/browser/en/
dist/enterprise-dashboard/browser/ar/
In future iterations, a runtime i18n solution (e.g. Transloco) would be considered for dynamic language switching and improved developer experience.
- Unit tests implemented using Vitest
- Focus on predictable behavior, state transitions, and UI logic
- Tests added alongside features to avoid test debt
Testing is treated as a core quality practice, not an afterthought.
- Node.js: v24.12.0 (used during development)
- npm: v11.x (as defined in
packageManager) - Angular CLI: v21+
npm install# Default (English)
npm start
# Arabic (RTL)
npm run start:arOptional: after npm run build:localize, you can serve the locale folders with any static server and open /en/ or /ar/ paths to validate the production output.
# Standard build
npm run build
# Production build with localization
npm run build:localizenpm testnpm run lint
npm run lint:fix
npm run formatnpm run extract-i18nTranslation files are maintained under:
src/locale/
This project uses Husky + lint-staged to enforce code quality before commits:
- ESLint on staged files
- Prettier for consistent formatting
Hooks are installed automatically via:
npm run preparePotential next steps:
- Runtime language switching
- Integration testing
- End-to-end (E2E) testing
- Test coverage reporting
- Feature toggles
- Expanded Roles & Permissions CRUD
- Performance profiling & optimization
- Theming support
This project exists to demonstrate:
- Real-world Angular architecture and patterns
- Role-based access control in frontend applications
- Accessibility-first UI development
- Scalable, maintainable frontend decision-making
- Conscious trade-offs instead of premature over-engineering
It reflects how I approach building production-ready frontend systems in an enterprise environment.