# daiki0918/cosmopolitanmemorial architecture

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

- Interactive diagram: https://gitdiagram.com/daiki0918/cosmopolitanmemorial
- Repository: https://github.com/daiki0918/cosmopolitanmemorial

## Overview

Cosmopolitan Funeral Homes is a public funeral-home website with an administrative backend for branch and inquiry operations. Visitors browse information and branches, submit inquiries, and can track them; staff authenticate to manage branches, inquiries, users, and published content. The README confirms inquiry intake, reference numbers, status workflow, branch search, RBAC, and dashboard aggregates. The sampled files establish routing, authentication, models, and frontend API behavior; several route implementations were not excerpted, so uncertain service-to-storage links are marked dashed.

Main entry points: [`apps/web/src/App.tsx`](https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/web/src/App.tsx) (Web Router), [`apps/web/src/lib/api.ts`](https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/web/src/lib/api.ts) (API Client), [`apps/api/src/app.ts`](https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/api/src/app.ts) (Express Router), [`apps/api/src/models/index.ts`](https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/api/src/models/index.ts) (Domain Models)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Public and Admin Web"]
  node_webapp["Web Router<br/>[App.tsx]"]
  node_home["Home Content<br/>[Home.tsx]"]
  node_branchespage["Branch Search<br/>[Branches.tsx]"]
  node_contactpage["Inquiry Form<br/>[Contact.tsx]"]
  node_trackpage["Inquiry Tracking<br/>[TrackInquiry.tsx]"]
  node_publiccontent["Public Pages<br/>[Public.tsx]"]
  node_adminui["Admin Workspace<br/>[Admin.tsx]"]
  node_teamui["Team Management<br/>[Team.tsx]"]
  node_webapi["API Client<br/>[api.ts]"]
end

subgraph group_api["API Workflows"]
  node_apiapp["Express Router<br/>[app.ts]"]
  node_publicroutes["Public Endpoints<br/>[public.ts]"]
  node_adminroutes["Admin Operations<br/>[admin.ts]"]
  node_contentroutes["Content Endpoints<br/>[content.ts]"]
end

subgraph group_security["Identity and Access"]
  node_authstate["Session State<br/>[auth.tsx]"]
  node_authroutes["Auth Endpoints<br/>[auth.ts]"]
  node_authmw["Auth Middleware<br/>[auth.ts]"]
  node_permissions["Role Permissions<br/>[permissions.ts]"]
end

subgraph group_data["Persistent Domain Data"]
  node_models[("Domain Models<br/>[index.ts]")]
end

node_visitor(("Visitor"))
node_staff(("Admin Staff"))

node_visitor -->|"browses"| node_webapp
node_staff -->|"uses"| node_webapp
node_webapp -->|"routes to"| node_home
node_webapp -->|"routes to"| node_branchespage
node_webapp -->|"routes to"| node_contactpage
node_webapp -->|"routes to"| node_trackpage
node_webapp -->|"routes to"| node_publiccontent
node_webapp -->|"routes to"| node_adminui
node_webapp -->|"routes to"| node_teamui
node_branchespage -->|"requests data"| node_webapi
node_contactpage -->|"submits inquiry"| node_webapi
node_trackpage -->|"looks up inquiry"| node_webapi
node_adminui -->|"requests operations"| node_webapi
node_teamui -->|"requests team data"| node_webapi
node_authstate -->|"refreshes session"| node_webapi
node_webapi -.->|"calls API"| node_apiapp
node_apiapp -->|"dispatches"| node_authroutes
node_apiapp -->|"dispatches"| node_publicroutes
node_apiapp -->|"dispatches"| node_adminroutes
node_apiapp -->|"dispatches"| node_contentroutes
node_apiapp -->|"handles errors"| node_authmw
node_authroutes -->|"requires authentication"| node_authmw
node_authmw -->|"checks roles"| node_permissions
node_authroutes -->|"reads and updates"| node_models
node_publicroutes -.->|"reads and creates"| node_models
node_adminroutes -.->|"manages records"| node_models
node_contentroutes -.->|"manages content"| node_models

click node_webapp "https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/web/src/App.tsx"
click node_home "https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/web/src/pages/Home.tsx"
click node_branchespage "https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/web/src/pages/Branches.tsx"
click node_contactpage "https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/web/src/pages/Contact.tsx"
click node_trackpage "https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/web/src/pages/TrackInquiry.tsx"
click node_publiccontent "https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/web/src/pages/Public.tsx"
click node_adminui "https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/web/src/admin/Admin.tsx"
click node_teamui "https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/web/src/admin/Team.tsx"
click node_webapi "https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/web/src/lib/api.ts"
click node_authstate "https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/web/src/lib/auth.tsx"
click node_apiapp "https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/api/src/app.ts"
click node_authroutes "https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/api/src/routes/auth.ts"
click node_authmw "https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/api/src/middleware/auth.ts"
click node_permissions "https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/api/src/config/permissions.ts"
click node_publicroutes "https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/api/src/routes/public.ts"
click node_adminroutes "https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/api/src/routes/admin.ts"
click node_contentroutes "https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/api/src/routes/content.ts"
click node_models "https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/api/src/models/index.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_webapp,node_home,node_branchespage,node_contactpage,node_trackpage,node_publiccontent,node_adminui,node_teamui,node_webapi toneBlue
class node_apiapp,node_publicroutes,node_adminroutes,node_contentroutes toneAmber
class node_authstate,node_authroutes,node_authmw,node_permissions toneMint
class node_models toneRose
class node_visitor,node_staff toneIndigo
```

## Components

### Public and Admin Web

- [Web Router](https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/web/src/App.tsx): `apps/web/src/App.tsx`
- [Home Content](https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/web/src/pages/Home.tsx): `apps/web/src/pages/Home.tsx`
- [Branch Search](https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/web/src/pages/Branches.tsx): `apps/web/src/pages/Branches.tsx`
- [Inquiry Form](https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/web/src/pages/Contact.tsx): `apps/web/src/pages/Contact.tsx`
- [Inquiry Tracking](https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/web/src/pages/TrackInquiry.tsx): `apps/web/src/pages/TrackInquiry.tsx`
- [Public Pages](https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/web/src/pages/Public.tsx): `apps/web/src/pages/Public.tsx`
- [Admin Workspace](https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/web/src/admin/Admin.tsx): `apps/web/src/admin/Admin.tsx`
- [Team Management](https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/web/src/admin/Team.tsx): `apps/web/src/admin/Team.tsx`
- [API Client](https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/web/src/lib/api.ts): `apps/web/src/lib/api.ts`

### API Workflows

- [Express Router](https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/api/src/app.ts): `apps/api/src/app.ts`
- [Public Endpoints](https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/api/src/routes/public.ts): `apps/api/src/routes/public.ts`
- [Admin Operations](https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/api/src/routes/admin.ts): `apps/api/src/routes/admin.ts`
- [Content Endpoints](https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/api/src/routes/content.ts): `apps/api/src/routes/content.ts`

### Identity and Access

- [Session State](https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/web/src/lib/auth.tsx): `apps/web/src/lib/auth.tsx`
- [Auth Endpoints](https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/api/src/routes/auth.ts): `apps/api/src/routes/auth.ts`
- [Auth Middleware](https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/api/src/middleware/auth.ts): `apps/api/src/middleware/auth.ts`
- [Role Permissions](https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/api/src/config/permissions.ts): `apps/api/src/config/permissions.ts`

### Persistent Domain Data

- [Domain Models](https://github.com/daiki0918/cosmopolitanmemorial/blob/main/apps/api/src/models/index.ts): `apps/api/src/models/index.ts`

### Other components

- **Visitor**
- **Admin Staff**

## Connections

- Visitor → Web Router: browses
- Admin Staff → Web Router: uses
- Web Router → Home Content: routes to (evidence: `apps/web/src/App.tsx`)
- Web Router → Branch Search: routes to (evidence: `apps/web/src/App.tsx`)
- Web Router → Inquiry Form: routes to (evidence: `apps/web/src/App.tsx`)
- Web Router → Inquiry Tracking: routes to (evidence: `apps/web/src/App.tsx`)
- Web Router → Public Pages: routes to (evidence: `apps/web/src/App.tsx`)
- Web Router → Admin Workspace: routes to (evidence: `apps/web/src/App.tsx`)
- Web Router → Team Management: routes to (evidence: `apps/web/src/App.tsx`)
- Branch Search → API Client: requests data (evidence: `apps/web/src/pages/Branches.tsx`)
- Inquiry Form → API Client: submits inquiry (evidence: `apps/web/src/pages/Contact.tsx`)
- Inquiry Tracking → API Client: looks up inquiry (evidence: `apps/web/src/pages/TrackInquiry.tsx`)
- Admin Workspace → API Client: requests operations (evidence: `apps/web/src/admin/Admin.tsx`)
- Team Management → API Client: requests team data (evidence: `apps/web/src/admin/Team.tsx`)
- Session State → API Client: refreshes session (evidence: `apps/web/src/lib/auth.tsx`)
- API Client → Express Router: calls API
- Express Router → Auth Endpoints: dispatches (evidence: `apps/api/src/app.ts`)
- Express Router → Public Endpoints: dispatches (evidence: `apps/api/src/app.ts`)
- Express Router → Admin Operations: dispatches (evidence: `apps/api/src/app.ts`)
- Express Router → Content Endpoints: dispatches (evidence: `apps/api/src/app.ts`)
- Express Router → Auth Middleware: handles errors (evidence: `apps/api/src/app.ts`)
- Auth Endpoints → Auth Middleware: requires authentication (evidence: `apps/api/src/routes/auth.ts`)
- Auth Middleware → Role Permissions: checks roles (evidence: `apps/api/src/middleware/auth.ts`)
- Auth Endpoints → Domain Models: reads and updates (evidence: `apps/api/src/routes/auth.ts`)
- Public Endpoints → Domain Models: reads and creates (evidence: `apps/api/src/routes/public.ts`)
- Admin Operations → Domain Models: manages records (evidence: `apps/api/src/routes/admin.ts`)
- Content Endpoints → Domain Models: manages content (evidence: `apps/api/src/routes/content.ts`)
