| 3.1 | Admin portal shell (layout, nav, routing) | Create the admin Angular app with a responsive sidebar, top bar (user avatar, notifications bell, theme toggle), and lazy-loaded route modules for each feature area. | Navigating between routes renders the correct module; the sidebar highlights the active route; the layout is responsive down to 768 px. |
| 3.2 | Dashboard page | Build the default landing page of the admin portal showing summary cards: total domains, recent scans, active alerts, and quick-action buttons (new scan, add domain). | Dashboard loads within 2 seconds; cards show real data from API calls (or graceful empty states if no data exists yet). |
| 3.3 | Theme switcher in admin portal | Port the theme switcher from the landing page into the admin portal, applying the selected theme to all admin components. Share theme tokens via a common library. | Toggling themes in the admin portal updates colors, typography, and component styles instantly; the choice syncs with the landing page preference. |
| 3.4 | Integrate chat service | Stand up the chat-service (NestJS + gRPC), create PostgreSQL tables for channels and messages, and build an admin UI panel for real-time messaging (WebSocket via NATS). | Users can send and receive messages in real time; messages persist across page reloads; the chat panel is accessible from the sidebar. |
| 3.5 | Integrate forum service | Stand up the forum-service (NestJS + gRPC), create PostgreSQL tables for categories, threads, and posts, index posts in Elasticsearch, and build a forum UI module. | Users can create threads, post replies, and search posts by keyword; search results appear within 1 second. |
| 3.6 | Integrate notifications | Stand up the notification-service (NestJS + gRPC), subscribe to NATS events (scan complete, new chat message, forum reply), and deliver in-app notifications via WebSocket. | Notifications appear in the bell dropdown in real time; clicking a notification navigates to the relevant page; notifications can be marked as read. |
| 3.7 | Profile & account settings | Build a profile page where users can update their display name, avatar, email, and password (delegated to Keycloak Account API). | Changes save successfully and are reflected across the portal; password change triggers Keycloak re-authentication. |