# nl-codes/lms---event-media-sharing-website architecture

> Architecture diagram of the GitHub repository nl-codes/lms---event-media-sharing-website, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/nl-codes/lms---event-media-sharing-website
- Repository: https://github.com/nl-codes/lms---event-media-sharing-website

## Overview

LMS lets hosts create and tier events, invite participants, and collect media in shared galleries; participants then interact through likes, comments, chat, and notifications. The Next.js clients call an Express/MongoDB backend, while Socket.IO provides live updates and queued workers handle slower media and lifecycle work. Admins review reports and appeals. The graph follows documented capabilities and the sampled controller, server, sync, and client flows; unsampled subsystem wiring is shown only where the README establishes it.

Main entry points: [`backend/server.js`](https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/backend/server.js) (Server and sockets), [`backend/controllers/mediaController.js`](https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/backend/controllers/mediaController.js) (Media controller), [`backend/controllers/eventController.js`](https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/backend/controllers/eventController.js) (Event controller), [`backend/controllers/paymentController.js`](https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/backend/controllers/paymentController.js) (Payment controller)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web application"]
  node_event_ui["Event creation"]
  node_event_api_client["Event API client<br/>[eventApi.ts]"]
  node_gallery_ui["Gallery and media UI"]
  node_media_detail["Media detail UI"]
  node_chat_hook["Chat socket hook<br/>[useChatSocket.ts]"]
end

subgraph group_events["Events and membership"]
  node_event_routes["Event routes<br/>[eventRoute.js]"]
  node_event_controller["Event controller<br/>[eventController.js]"]
  node_event_service["Event service<br/>[eventService.js]"]
  node_membership_service["Membership service"]
  node_payment_controller["Payment controller"]
  node_stripe_service["Stripe service<br/>[stripeService.js]"]
end

subgraph group_media["Media and interaction"]
  node_media_controller["Media controller<br/>[mediaController.js]"]
  node_media_service["Media service<br/>[mediaService.js]"]
  node_interaction_service["Interaction service"]
  node_chat_service["Chat service<br/>[chatService.js]"]
end

subgraph group_operations["Moderation and operations"]
  node_admin_appeals["Appeal review UI"]
  node_report_ui["Report review UI"]
  node_report_service["Report service<br/>[reportService.js]"]
  node_appeal_service["Appeal service<br/>[appealService.js]"]
end

subgraph group_platform["Persistence and integrations"]
  node_server["Server and sockets<br/>[server.js]"]
  node_sync_manager["Startup sync<br/>[syncManager.js]"]
  node_event_store[("Event and membership data<br/>[eventModel.js]")]
  node_media_store[("Media and interaction data<br/>[mediaModel.js]")]
  node_video_queue["Video queue<br/>[videoQueue.js]"]
end

node_host(("Host or participant"))
node_mongo[("MongoDB")]
node_cloudinary["Cloudinary"]
node_stripe["Stripe"]

node_host -->|"creates events"| node_event_ui
node_event_ui -->|"submits event"| node_event_api_client
node_event_api_client -->|"HTTP requests"| node_event_routes
node_event_routes -->|"dispatches"| node_event_controller
node_event_controller -->|"creates and reads"| node_event_service
node_event_service -->|"persists events"| node_event_store
node_event_store -->|"stores records"| node_mongo
node_event_controller -.->|"starts paid checkout"| node_payment_controller
node_payment_controller -->|"creates sessions"| node_stripe_service
node_stripe_service -->|"checkout and webhooks"| node_stripe
node_payment_controller -->|"finalizes paid event"| node_event_service
node_host -->|"uploads and reviews"| node_gallery_ui
node_gallery_ui -->|"media requests"| node_media_controller
node_media_controller -->|"manages media"| node_media_service
node_media_controller -->|"emits gallery updates"| node_server
node_media_service -->|"reads and writes"| node_media_store
node_media_store -->|"stores media data"| node_mongo
node_media_service -->|"stores assets"| node_cloudinary
node_media_controller -->|"queues video work"| node_video_queue
node_media_detail -->|"likes and comments"| node_interaction_service
node_interaction_service -->|"records interactions"| node_media_store
node_chat_hook -->|"connects by socket"| node_server
node_server -->|"saves and reads chat"| node_chat_service
node_server -->|"marks chat read"| node_membership_service
node_server -->|"connects on startup"| node_mongo
node_server -->|"runs startup sync"| node_sync_manager
node_sync_manager -->|"updates event state"| node_event_store
node_report_ui -->|"reviews reports"| node_report_service
node_admin_appeals -->|"reviews appeals"| node_appeal_service

click node_event_ui "https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/frontend/src/app/home/events/create/CreateEventClient.tsx"
click node_event_api_client "https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/frontend/src/lib/eventApi.ts"
click node_gallery_ui "https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/frontend/src/app/home/events/%5Bid%5D/gallery/HostGalleryClient.tsx"
click node_media_detail "https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/frontend/src/app/media/%5Bid%5D/MediaDetailClient.tsx"
click node_chat_hook "https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/frontend/src/hooks/useChatSocket.ts"
click node_event_routes "https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/backend/routes/eventRoute.js"
click node_event_controller "https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/backend/controllers/eventController.js"
click node_event_service "https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/backend/services/eventService.js"
click node_membership_service "https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/backend/services/eventMembershipService.js"
click node_payment_controller "https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/backend/controllers/paymentController.js"
click node_stripe_service "https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/backend/services/stripeService.js"
click node_media_controller "https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/backend/controllers/mediaController.js"
click node_media_service "https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/backend/services/mediaService.js"
click node_interaction_service "https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/backend/services/interactionService.js"
click node_chat_service "https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/backend/services/chatService.js"
click node_server "https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/backend/server.js"
click node_sync_manager "https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/backend/services/syncManager.js"
click node_event_store "https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/backend/models/eventModel.js"
click node_media_store "https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/backend/models/mediaModel.js"
click node_video_queue "https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/backend/queues/videoQueue.js"
click node_admin_appeals "https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/frontend/src/app/admin/appeals/AdminAppealsClient.tsx"
click node_report_ui "https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/frontend/src/app/admin/reports/AdminReportsClient.tsx"
click node_report_service "https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/backend/services/reportService.js"
click node_appeal_service "https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/backend/services/appealService.js"

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_event_ui,node_event_api_client,node_gallery_ui,node_media_detail,node_chat_hook toneBlue
class node_event_routes,node_event_controller,node_event_service,node_membership_service,node_payment_controller,node_stripe_service,node_mongo toneAmber
class node_media_controller,node_media_service,node_interaction_service,node_chat_service toneMint
class node_admin_appeals,node_report_ui,node_report_service,node_appeal_service toneRose
class node_server,node_sync_manager,node_event_store,node_media_store,node_video_queue,node_host,node_cloudinary,node_stripe toneIndigo
```

## Components

### Web application

- [Event creation](https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/frontend/src/app/home/events/create/CreateEventClient.tsx): `frontend/src/app/home/events/create/CreateEventClient.tsx`
- [Event API client](https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/frontend/src/lib/eventApi.ts): `frontend/src/lib/eventApi.ts`
- [Gallery and media UI](https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/frontend/src/app/home/events/%5Bid%5D/gallery/HostGalleryClient.tsx): `frontend/src/app/home/events/[id]/gallery/HostGalleryClient.tsx`
- [Media detail UI](https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/frontend/src/app/media/%5Bid%5D/MediaDetailClient.tsx): `frontend/src/app/media/[id]/MediaDetailClient.tsx`
- [Chat socket hook](https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/frontend/src/hooks/useChatSocket.ts): `frontend/src/hooks/useChatSocket.ts`

### Events and membership

- [Event routes](https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/backend/routes/eventRoute.js): `backend/routes/eventRoute.js`
- [Event controller](https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/backend/controllers/eventController.js): `backend/controllers/eventController.js`
- [Event service](https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/backend/services/eventService.js): `backend/services/eventService.js`
- [Membership service](https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/backend/services/eventMembershipService.js): `backend/services/eventMembershipService.js`
- [Payment controller](https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/backend/controllers/paymentController.js): `backend/controllers/paymentController.js`
- [Stripe service](https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/backend/services/stripeService.js): `backend/services/stripeService.js`

### Media and interaction

- [Media controller](https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/backend/controllers/mediaController.js): `backend/controllers/mediaController.js`
- [Media service](https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/backend/services/mediaService.js): `backend/services/mediaService.js`
- [Interaction service](https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/backend/services/interactionService.js): `backend/services/interactionService.js`
- [Chat service](https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/backend/services/chatService.js): `backend/services/chatService.js`

### Moderation and operations

- [Appeal review UI](https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/frontend/src/app/admin/appeals/AdminAppealsClient.tsx): `frontend/src/app/admin/appeals/AdminAppealsClient.tsx`
- [Report review UI](https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/frontend/src/app/admin/reports/AdminReportsClient.tsx): `frontend/src/app/admin/reports/AdminReportsClient.tsx`
- [Report service](https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/backend/services/reportService.js): `backend/services/reportService.js`
- [Appeal service](https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/backend/services/appealService.js): `backend/services/appealService.js`

### Persistence and integrations

- [Server and sockets](https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/backend/server.js): `backend/server.js`
- [Startup sync](https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/backend/services/syncManager.js): `backend/services/syncManager.js`
- [Event and membership data](https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/backend/models/eventModel.js): `backend/models/eventModel.js`
- [Media and interaction data](https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/backend/models/mediaModel.js): `backend/models/mediaModel.js`
- [Video queue](https://github.com/nl-codes/lms---event-media-sharing-website/blob/master/backend/queues/videoQueue.js): `backend/queues/videoQueue.js`

### Other components

- **Host or participant**
- **MongoDB**
- **Cloudinary**
- **Stripe**

## Connections

- Host or participant → Event creation: creates events
- Event creation → Event API client: submits event
- Event API client → Event routes: HTTP requests
- Event routes → Event controller: dispatches
- Event controller → Event service: creates and reads
- Event service → Event and membership data: persists events
- Event and membership data → MongoDB: stores records
- Event controller → Payment controller: starts paid checkout
- Payment controller → Stripe service: creates sessions
- Stripe service → Stripe: checkout and webhooks
- Payment controller → Event service: finalizes paid event
- Host or participant → Gallery and media UI: uploads and reviews
- Gallery and media UI → Media controller: media requests
- Media controller → Media service: manages media
- Media controller → Server and sockets: emits gallery updates
- Media service → Media and interaction data: reads and writes
- Media and interaction data → MongoDB: stores media data
- Media service → Cloudinary: stores assets
- Media controller → Video queue: queues video work
- Media detail UI → Interaction service: likes and comments
- Interaction service → Media and interaction data: records interactions
- Chat socket hook → Server and sockets: connects by socket
- Server and sockets → Chat service: saves and reads chat
- Server and sockets → Membership service: marks chat read
- Server and sockets → MongoDB: connects on startup
- Server and sockets → Startup sync: runs startup sync
- Startup sync → Event and membership data: updates event state
- Report review UI → Report service: reviews reports
- Appeal review UI → Appeal service: reviews appeals
