# arsbelkin/reminders architecture

> Architecture diagram of the GitHub repository arsbelkin/reminders, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/arsbelkin/reminders
- Repository: https://github.com/arsbelkin/reminders

## Overview

Reminders is a reminder-management application with an Angular client, ASP.NET API, persistence layer, and background notification workers. Users register or sign in, manage categorized reminders and participants, search and update completion state, and view notifications; administrators have reporting views. The client routes and reminder-controller behavior are excerpted, while most other feature internals are known only from the tree and SOURCE INDEX, so those subsystem links are left unverified where necessary.

Main entry points: [`Client/RemindersClient/src/app/app.routes.ts`](https://github.com/arsbelkin/reminders/blob/main/Client/RemindersClient/src/app/app.routes.ts) (Client routes), [`api/Reminders/Reminders.API/Controllers`](https://github.com/arsbelkin/reminders/tree/main/api/Reminders/Reminders.API/Controllers) (HTTP API), [`Client/RemindersClient/src/app/api/services`](https://github.com/arsbelkin/reminders/tree/main/Client/RemindersClient/src/app/api/services) (Generated API client), [`api/Reminders/Reminders.Infrastructure/Repositories`](https://github.com/arsbelkin/reminders/tree/main/api/Reminders/Reminders.Infrastructure/Repositories) (Repositories)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Angular client"]
  node_routes["Client routes<br/>[app.routes.ts]"]
  node_authui["Auth and session"]
  node_reminderui["Reminder views<br/>[reminders.ts]"]
  node_categoryui["Category views"]
  node_notificationui["Notification views<br/>[notifications.ts]"]
  node_profileui["Profile and avatar<br/>[profile.ts]"]
  node_adminui["Admin reports<br/>[admin-report.ts]"]
  node_clientapi["Generated API client"]
end

subgraph group_api["API and application"]
  node_web["HTTP API<br/>[Controllers]"]
  node_auth["Authentication<br/>[AuthService.cs]"]
  node_reminders["Reminder operations"]
  node_categories["Category operations"]
  node_notifications["Notification operations"]
  node_users["User and avatar<br/>[UsersController.cs]"]
  node_admin["Admin reports<br/>[AdminController.cs]"]
  node_appservices["Application services<br/>[Services]"]
end

subgraph group_domain["Domain and persistence"]
  node_entities["Reminder domain<br/>[Reminders.cs]"]
  node_repositories["Repositories<br/>[Repositories]"]
  node_database[("Reminders database")]
end

subgraph group_notify["Notification processing"]
  node_scanner["Notification scanner<br/>[Worker.cs]"]
  node_queue["Redis queue"]
  node_sender["Notification sender<br/>[Worker.cs]"]
  node_email["Email service<br/>[EmailSender.cs]"]
end

node_person(("User"))

node_person -->|"uses"| node_routes
node_routes -->|"routes to"| node_authui
node_routes -->|"routes to"| node_reminderui
node_routes -->|"routes to"| node_categoryui
node_routes -->|"routes to"| node_notificationui
node_routes -->|"routes to"| node_profileui
node_routes -->|"routes to"| node_adminui
node_authui -.->|"calls"| node_clientapi
node_reminderui -.->|"calls"| node_clientapi
node_categoryui -.->|"calls"| node_clientapi
node_notificationui -.->|"calls"| node_clientapi
node_profileui -.->|"calls"| node_clientapi
node_adminui -.->|"calls"| node_clientapi
node_clientapi -.->|"HTTP requests"| node_web
node_web -->|"dispatches"| node_reminders
node_web -->|"dispatches"| node_categories
node_web -.->|"dispatches"| node_auth
node_web -.->|"dispatches"| node_notifications
node_web -.->|"dispatches"| node_users
node_web -.->|"dispatches"| node_admin
node_auth -->|"reads and writes"| node_repositories
node_reminders -->|"calls"| node_appservices
node_categories -->|"calls"| node_appservices
node_appservices -.->|"uses"| node_repositories
node_repositories -.->|"persists"| node_database
node_scanner -.->|"publishes"| node_queue
node_sender -.->|"consumes"| node_queue
node_sender -.->|"sends email"| node_email
node_scanner -.->|"loads notifications"| node_repositories
node_sender -.->|"updates status"| node_repositories

click node_routes "https://github.com/arsbelkin/reminders/blob/main/Client/RemindersClient/src/app/app.routes.ts"
click node_authui "https://github.com/arsbelkin/reminders/tree/main/Client/RemindersClient/src/app/auth"
click node_reminderui "https://github.com/arsbelkin/reminders/blob/main/Client/RemindersClient/src/app/pages/reminders/reminders.ts"
click node_categoryui "https://github.com/arsbelkin/reminders/blob/main/Client/RemindersClient/src/app/pages/category-details/category-details.ts"
click node_notificationui "https://github.com/arsbelkin/reminders/blob/main/Client/RemindersClient/src/app/pages/notifications/notifications.ts"
click node_profileui "https://github.com/arsbelkin/reminders/blob/main/Client/RemindersClient/src/app/pages/profile/profile.ts"
click node_adminui "https://github.com/arsbelkin/reminders/blob/main/Client/RemindersClient/src/app/pages/admin-report/admin-report.ts"
click node_clientapi "https://github.com/arsbelkin/reminders/tree/main/Client/RemindersClient/src/app/api/services"
click node_web "https://github.com/arsbelkin/reminders/tree/main/api/Reminders/Reminders.API/Controllers"
click node_auth "https://github.com/arsbelkin/reminders/blob/main/api/Reminders/Reminders.Application/Services/AuthService.cs"
click node_reminders "https://github.com/arsbelkin/reminders/blob/main/api/Reminders/Reminders.API/Controllers/RemindersController.cs"
click node_categories "https://github.com/arsbelkin/reminders/blob/main/api/Reminders/Reminders.API/Controllers/CategoriesController.cs"
click node_notifications "https://github.com/arsbelkin/reminders/blob/main/api/Reminders/Reminders.API/Controllers/NotificationsController.cs"
click node_users "https://github.com/arsbelkin/reminders/blob/main/api/Reminders/Reminders.API/Controllers/UsersController.cs"
click node_admin "https://github.com/arsbelkin/reminders/blob/main/api/Reminders/Reminders.API/Controllers/AdminController.cs"
click node_appservices "https://github.com/arsbelkin/reminders/tree/main/api/Reminders/Reminders.Application/Services"
click node_entities "https://github.com/arsbelkin/reminders/blob/main/api/Reminders/Reminders.Domain/Models/Reminders.cs"
click node_repositories "https://github.com/arsbelkin/reminders/tree/main/api/Reminders/Reminders.Infrastructure/Repositories"
click node_database "https://github.com/arsbelkin/reminders/blob/main/api/Reminders/Reminders.Infrastructure/Contexts/RemindersContext.cs"
click node_scanner "https://github.com/arsbelkin/reminders/blob/main/api/Reminders/Reminders.DbScannerWorker/Worker.cs"
click node_queue "https://github.com/arsbelkin/reminders/blob/main/api/Reminders/Reminders.Infrastructure/Messaging/RedisNotificationClient.cs"
click node_sender "https://github.com/arsbelkin/reminders/blob/main/api/Reminders/Reminders.NotificationSenderWorker/Worker.cs"
click node_email "https://github.com/arsbelkin/reminders/blob/main/api/Reminders/Reminders.Infrastructure/Messaging/EmailSender.cs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_routes,node_authui,node_reminderui,node_categoryui,node_notificationui,node_profileui,node_adminui,node_clientapi,node_person toneBlue
class node_web,node_auth,node_reminders,node_categories,node_notifications,node_users,node_admin,node_appservices toneAmber
class node_entities,node_repositories,node_database toneMint
class node_scanner,node_queue,node_sender,node_email toneRose
```

## Components

### Angular client

- [Client routes](https://github.com/arsbelkin/reminders/blob/main/Client/RemindersClient/src/app/app.routes.ts): `Client/RemindersClient/src/app/app.routes.ts`
- [Auth and session](https://github.com/arsbelkin/reminders/tree/main/Client/RemindersClient/src/app/auth): `Client/RemindersClient/src/app/auth`
- [Reminder views](https://github.com/arsbelkin/reminders/blob/main/Client/RemindersClient/src/app/pages/reminders/reminders.ts): `Client/RemindersClient/src/app/pages/reminders/reminders.ts`
- [Category views](https://github.com/arsbelkin/reminders/blob/main/Client/RemindersClient/src/app/pages/category-details/category-details.ts): `Client/RemindersClient/src/app/pages/category-details/category-details.ts`
- [Notification views](https://github.com/arsbelkin/reminders/blob/main/Client/RemindersClient/src/app/pages/notifications/notifications.ts): `Client/RemindersClient/src/app/pages/notifications/notifications.ts`
- [Profile and avatar](https://github.com/arsbelkin/reminders/blob/main/Client/RemindersClient/src/app/pages/profile/profile.ts): `Client/RemindersClient/src/app/pages/profile/profile.ts`
- [Admin reports](https://github.com/arsbelkin/reminders/blob/main/Client/RemindersClient/src/app/pages/admin-report/admin-report.ts): `Client/RemindersClient/src/app/pages/admin-report/admin-report.ts`
- [Generated API client](https://github.com/arsbelkin/reminders/tree/main/Client/RemindersClient/src/app/api/services): `Client/RemindersClient/src/app/api/services`

### API and application

- [HTTP API](https://github.com/arsbelkin/reminders/tree/main/api/Reminders/Reminders.API/Controllers): `api/Reminders/Reminders.API/Controllers`
- [Authentication](https://github.com/arsbelkin/reminders/blob/main/api/Reminders/Reminders.Application/Services/AuthService.cs): `api/Reminders/Reminders.Application/Services/AuthService.cs`
- [Reminder operations](https://github.com/arsbelkin/reminders/blob/main/api/Reminders/Reminders.API/Controllers/RemindersController.cs): `api/Reminders/Reminders.API/Controllers/RemindersController.cs`
- [Category operations](https://github.com/arsbelkin/reminders/blob/main/api/Reminders/Reminders.API/Controllers/CategoriesController.cs): `api/Reminders/Reminders.API/Controllers/CategoriesController.cs`
- [Notification operations](https://github.com/arsbelkin/reminders/blob/main/api/Reminders/Reminders.API/Controllers/NotificationsController.cs): `api/Reminders/Reminders.API/Controllers/NotificationsController.cs`
- [User and avatar](https://github.com/arsbelkin/reminders/blob/main/api/Reminders/Reminders.API/Controllers/UsersController.cs): `api/Reminders/Reminders.API/Controllers/UsersController.cs`
- [Admin reports](https://github.com/arsbelkin/reminders/blob/main/api/Reminders/Reminders.API/Controllers/AdminController.cs): `api/Reminders/Reminders.API/Controllers/AdminController.cs`
- [Application services](https://github.com/arsbelkin/reminders/tree/main/api/Reminders/Reminders.Application/Services): `api/Reminders/Reminders.Application/Services`

### Domain and persistence

- [Reminder domain](https://github.com/arsbelkin/reminders/blob/main/api/Reminders/Reminders.Domain/Models/Reminders.cs): `api/Reminders/Reminders.Domain/Models/Reminders.cs`
- [Repositories](https://github.com/arsbelkin/reminders/tree/main/api/Reminders/Reminders.Infrastructure/Repositories): `api/Reminders/Reminders.Infrastructure/Repositories`
- [Reminders database](https://github.com/arsbelkin/reminders/blob/main/api/Reminders/Reminders.Infrastructure/Contexts/RemindersContext.cs): `api/Reminders/Reminders.Infrastructure/Contexts/RemindersContext.cs`

### Notification processing

- [Notification scanner](https://github.com/arsbelkin/reminders/blob/main/api/Reminders/Reminders.DbScannerWorker/Worker.cs): `api/Reminders/Reminders.DbScannerWorker/Worker.cs`
- [Redis queue](https://github.com/arsbelkin/reminders/blob/main/api/Reminders/Reminders.Infrastructure/Messaging/RedisNotificationClient.cs): `api/Reminders/Reminders.Infrastructure/Messaging/RedisNotificationClient.cs`
- [Notification sender](https://github.com/arsbelkin/reminders/blob/main/api/Reminders/Reminders.NotificationSenderWorker/Worker.cs): `api/Reminders/Reminders.NotificationSenderWorker/Worker.cs`
- [Email service](https://github.com/arsbelkin/reminders/blob/main/api/Reminders/Reminders.Infrastructure/Messaging/EmailSender.cs): `api/Reminders/Reminders.Infrastructure/Messaging/EmailSender.cs`

### Other components

- **User**

## Connections

- User → Client routes: uses (evidence: `Client/RemindersClient/src/app/app.routes.ts`)
- Client routes → Auth and session: routes to (evidence: `Client/RemindersClient/src/app/app.routes.ts`)
- Client routes → Reminder views: routes to (evidence: `Client/RemindersClient/src/app/app.routes.ts`)
- Client routes → Category views: routes to (evidence: `Client/RemindersClient/src/app/app.routes.ts`)
- Client routes → Notification views: routes to (evidence: `Client/RemindersClient/src/app/app.routes.ts`)
- Client routes → Profile and avatar: routes to (evidence: `Client/RemindersClient/src/app/app.routes.ts`)
- Client routes → Admin reports: routes to (evidence: `Client/RemindersClient/src/app/app.routes.ts`)
- Auth and session → Generated API client: calls (evidence: `Client/RemindersClient/src/app/auth/user-avatar.service.ts`)
- Reminder views → Generated API client: calls
- Category views → Generated API client: calls
- Notification views → Generated API client: calls
- Profile and avatar → Generated API client: calls
- Admin reports → Generated API client: calls
- Generated API client → HTTP API: HTTP requests
- HTTP API → Reminder operations: dispatches (evidence: `api/Reminders/Reminders.API/Controllers/RemindersController.cs`)
- HTTP API → Category operations: dispatches (evidence: `api/Reminders/Reminders.API/Controllers/CategoriesController.cs`)
- HTTP API → Authentication: dispatches
- HTTP API → Notification operations: dispatches
- HTTP API → User and avatar: dispatches
- HTTP API → Admin reports: dispatches
- Authentication → Repositories: reads and writes (evidence: `api/Reminders/Reminders.Application/Services/AuthService.cs`)
- Reminder operations → Application services: calls (evidence: `api/Reminders/Reminders.API/Controllers/RemindersController.cs`)
- Category operations → Application services: calls (evidence: `api/Reminders/Reminders.API/Controllers/CategoriesController.cs`)
- Application services → Repositories: uses
- Repositories → Reminders database: persists (evidence: `api/Reminders/Reminders.Infrastructure/Repositories/ReminderRepository.cs`)
- Notification scanner → Redis queue: publishes
- Notification sender → Redis queue: consumes
- Notification sender → Email service: sends email
- Notification scanner → Repositories: loads notifications
- Notification sender → Repositories: updates status
