# team-digitalmarketersperth/for-after-digital-vault architecture

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

- Interactive diagram: https://gitdiagram.com/team-digitalmarketersperth/for-after-digital-vault
- Repository: https://github.com/team-digitalmarketersperth/for-after-digital-vault

## Overview

For After is a digital legacy vault: customers create private messages, memories, and wishes for recipients, scheduling release for a future date or after a verified death event. Trusted contacts can report a death, recipients access released messages, and administrators review verification and platform operations. The README documents the frontend-to-API boundary and the platform capabilities; sampled backend code confirms session authorization, storage quotas, media handling, and database access. Most domain-service internals were not sampled, so uncertain runtime links are omitted or marked unverified.

Main entry points: [`for-after-backend/src/main.ts`](https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/main.ts) (NestJS API), [`for-after-backend/src/prisma/prisma.service.ts`](https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/prisma/prisma.service.ts) (PostgreSQL), [`for-after-frontend/src/app`](https://github.com/team-digitalmarketersperth/for-after-digital-vault/tree/master/for-after-frontend/src/app) (Web application), [`for-after-backend/src/admin/admin.service.ts`](https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/admin/admin.service.ts) (Admin operations)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["User experiences"]
  node_web_app["Web application"]
  node_api["NestJS API<br/>[main.ts]"]
  node_customer_auth["Customer authentication<br/>[auth.service.ts]"]
  node_recipient_portal["Recipient portal"]
  node_trusted_portal["Trusted contact portal"]
end

subgraph group_vault["Vault content"]
  node_messages["Messages and schedules"]
  node_people["Recipients and contacts"]
  node_memory_vault["Memory Vault"]
  node_life_story["Life story"]
  node_wishes["Personal wishes"]
  node_media["Media handling<br/>[media.service.ts]"]
end

subgraph group_release["Verification and release"]
  node_death_workflow["Death verification"]
  node_release_jobs["Message release jobs"]
end

subgraph group_platform["Platform services"]
  node_storage_quota["Storage quota"]
  node_object_storage["Object storage"]
  node_database[("PostgreSQL<br/>[prisma.service.ts]")]
  node_redis[("Redis sessions and queues<br/>[redis.service.ts]")]
  node_email["Email delivery"]
end

subgraph group_operations["Administration"]
  node_admin_portal["Admin operations<br/>[admin.service.ts]"]
  node_announcements["Announcements"]
  node_audit["Audit logging"]
end

node_customer(("Customer"))
node_trusted_actor(("Trusted contact"))
node_recipient_actor(("Recipient"))
node_admin_actor(("Administrator"))
node_external_storage["Media services"]

node_customer -->|"uses"| node_web_app
node_trusted_actor -->|"uses"| node_web_app
node_recipient_actor -->|"uses"| node_web_app
node_admin_actor -->|"uses"| node_web_app
node_web_app -->|"HTTP and cookies"| node_api
node_api -.->|"routes auth"| node_customer_auth
node_customer_auth -.->|"reads and writes"| node_database
node_api -.->|"routes messages"| node_messages
node_api -.->|"routes people"| node_people
node_api -->|"routes vault"| node_memory_vault
node_memory_vault -->|"creates messages"| node_messages
node_api -->|"routes story"| node_life_story
node_life_story -->|"creates messages"| node_messages
node_api -->|"routes wishes"| node_wishes
node_wishes -->|"creates messages"| node_messages
node_api -.->|"routes uploads"| node_media
node_media -.->|"checks quota"| node_storage_quota
node_media -->|"stores media"| node_external_storage
node_api -->|"serves usage"| node_storage_quota
node_storage_quota -->|"queries media rows"| node_database
node_trusted_actor -->|"reports death"| node_trusted_portal
node_trusted_portal -.->|"submits report"| node_death_workflow
node_death_workflow -.->|"records review"| node_database
node_release_jobs -.->|"loads releases"| node_database
node_release_jobs -.->|"delivers messages"| node_email
node_recipient_actor -->|"opens messages"| node_recipient_portal
node_recipient_portal -.->|"reads released content"| node_release_jobs
node_api -->|"uses Prisma"| node_database
node_api -->|"uses sessions"| node_redis
node_admin_actor -->|"reviews operations"| node_admin_portal
node_api -.->|"routes admin"| node_admin_portal
node_admin_portal -.->|"manages broadcasts"| node_announcements
node_admin_portal -.->|"reviews audit logs"| node_audit
node_announcements -.->|"stores announcements"| node_database
node_audit -->|"writes audit records"| node_database

click node_web_app "https://github.com/team-digitalmarketersperth/for-after-digital-vault/tree/master/for-after-frontend/src/app"
click node_api "https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/main.ts"
click node_customer_auth "https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/auth/auth.service.ts"
click node_recipient_portal "https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/recipient-portal/recipient-messages.service.ts"
click node_trusted_portal "https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/trusted-contact-portal/trusted-contact-portal.service.ts"
click node_messages "https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/messages/messages.service.ts"
click node_people "https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/recipients/recipients.service.ts"
click node_memory_vault "https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/memory-vault/memory-vault.service.ts"
click node_life_story "https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/my-story/my-story.service.ts"
click node_wishes "https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/my-wishes/my-wishes.service.ts"
click node_media "https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/media/media.service.ts"
click node_storage_quota "https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/media/storage-quota.service.ts"
click node_object_storage "https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/media/storage/imagekit-media-storage.service.ts"
click node_death_workflow "https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/death-verification/death-verification-workflow.service.ts"
click node_release_jobs "https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/message-release/message-release.processor.ts"
click node_database "https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/prisma/prisma.service.ts"
click node_redis "https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/redis/redis.service.ts"
click node_email "https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/email/email-provider.factory.ts"
click node_admin_portal "https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/admin/admin.service.ts"
click node_announcements "https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/announcements/announcements.service.ts"
click node_audit "https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/audit/audit-log.service.ts"

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_web_app,node_api,node_customer_auth,node_recipient_portal,node_trusted_portal toneBlue
class node_messages,node_people,node_memory_vault,node_life_story,node_wishes,node_media toneAmber
class node_death_workflow,node_release_jobs toneMint
class node_storage_quota,node_object_storage,node_database,node_redis,node_email toneRose
class node_admin_portal,node_announcements,node_audit,node_customer,node_trusted_actor,node_recipient_actor,node_admin_actor,node_external_storage toneIndigo
```

## Components

### User experiences

- [Web application](https://github.com/team-digitalmarketersperth/for-after-digital-vault/tree/master/for-after-frontend/src/app): `for-after-frontend/src/app`
- [NestJS API](https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/main.ts): `for-after-backend/src/main.ts`
- [Customer authentication](https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/auth/auth.service.ts): `for-after-backend/src/auth/auth.service.ts`
- [Recipient portal](https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/recipient-portal/recipient-messages.service.ts): `for-after-backend/src/recipient-portal/recipient-messages.service.ts`
- [Trusted contact portal](https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/trusted-contact-portal/trusted-contact-portal.service.ts): `for-after-backend/src/trusted-contact-portal/trusted-contact-portal.service.ts`

### Vault content

- [Messages and schedules](https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/messages/messages.service.ts): `for-after-backend/src/messages/messages.service.ts`
- [Recipients and contacts](https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/recipients/recipients.service.ts): `for-after-backend/src/recipients/recipients.service.ts`
- [Memory Vault](https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/memory-vault/memory-vault.service.ts): `for-after-backend/src/memory-vault/memory-vault.service.ts`
- [Life story](https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/my-story/my-story.service.ts): `for-after-backend/src/my-story/my-story.service.ts`
- [Personal wishes](https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/my-wishes/my-wishes.service.ts): `for-after-backend/src/my-wishes/my-wishes.service.ts`
- [Media handling](https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/media/media.service.ts): `for-after-backend/src/media/media.service.ts`

### Verification and release

- [Death verification](https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/death-verification/death-verification-workflow.service.ts): `for-after-backend/src/death-verification/death-verification-workflow.service.ts`
- [Message release jobs](https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/message-release/message-release.processor.ts): `for-after-backend/src/message-release/message-release.processor.ts`

### Platform services

- [Storage quota](https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/media/storage-quota.service.ts): `for-after-backend/src/media/storage-quota.service.ts`
- [Object storage](https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/media/storage/imagekit-media-storage.service.ts): `for-after-backend/src/media/storage/imagekit-media-storage.service.ts`
- [PostgreSQL](https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/prisma/prisma.service.ts): `for-after-backend/src/prisma/prisma.service.ts`
- [Redis sessions and queues](https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/redis/redis.service.ts): `for-after-backend/src/redis/redis.service.ts`
- [Email delivery](https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/email/email-provider.factory.ts): `for-after-backend/src/email/email-provider.factory.ts`

### Administration

- [Admin operations](https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/admin/admin.service.ts): `for-after-backend/src/admin/admin.service.ts`
- [Announcements](https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/announcements/announcements.service.ts): `for-after-backend/src/announcements/announcements.service.ts`
- [Audit logging](https://github.com/team-digitalmarketersperth/for-after-digital-vault/blob/master/for-after-backend/src/audit/audit-log.service.ts): `for-after-backend/src/audit/audit-log.service.ts`

### Other components

- **Customer**
- **Trusted contact**
- **Recipient**
- **Administrator**
- **Media services**

## Connections

- Customer → Web application: uses (evidence: `README.md`)
- Trusted contact → Web application: uses (evidence: `README.md`)
- Recipient → Web application: uses (evidence: `README.md`)
- Administrator → Web application: uses (evidence: `README.md`)
- Web application → NestJS API: HTTP and cookies (evidence: `README.md`)
- NestJS API → Customer authentication: routes auth
- Customer authentication → PostgreSQL: reads and writes
- NestJS API → Messages and schedules: routes messages
- NestJS API → Recipients and contacts: routes people
- NestJS API → Memory Vault: routes vault
- Memory Vault → Messages and schedules: creates messages (evidence: `for-after-backend/src/memory-vault/memory-vault.controller.ts`)
- NestJS API → Life story: routes story
- Life story → Messages and schedules: creates messages (evidence: `for-after-backend/src/my-story/my-story.controller.ts`)
- NestJS API → Personal wishes: routes wishes
- Personal wishes → Messages and schedules: creates messages (evidence: `for-after-backend/src/my-wishes/my-wishes.controller.ts`)
- NestJS API → Media handling: routes uploads
- Media handling → Storage quota: checks quota (evidence: `for-after-backend/src/media/media.service.ts`)
- Media handling → Media services: stores media (evidence: `README.md`)
- NestJS API → Storage quota: serves usage
- Storage quota → PostgreSQL: queries media rows (evidence: `for-after-backend/src/media/storage-quota.service.ts`)
- Trusted contact → Trusted contact portal: reports death (evidence: `README.md`)
- Trusted contact portal → Death verification: submits report
- Death verification → PostgreSQL: records review
- Message release jobs → PostgreSQL: loads releases
- Message release jobs → Email delivery: delivers messages
- Recipient → Recipient portal: opens messages (evidence: `README.md`)
- Recipient portal → Message release jobs: reads released content
- NestJS API → PostgreSQL: uses Prisma (evidence: `README.md`)
- NestJS API → Redis sessions and queues: uses sessions (evidence: `README.md`)
- Administrator → Admin operations: reviews operations (evidence: `README.md`)
- NestJS API → Admin operations: routes admin
- Admin operations → Announcements: manages broadcasts
- Admin operations → Audit logging: reviews audit logs
- Announcements → PostgreSQL: stores announcements
- Audit logging → PostgreSQL: writes audit records (evidence: `for-after-backend/src/audit/audit-log.service.ts`)
