# fullfilm2021/call.tvgo.site architecture

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

- Interactive diagram: https://gitdiagram.com/fullfilm2021/call.tvgo.site
- Repository: https://github.com/fullfilm2021/call.tvgo.site

## Overview

This is a browser-based WebRTC voice and video calling app, with room membership and signaling coordinated by a Node server while media is exchanged peer-to-peer. The main workflow is choosing a room and call mode, acquiring media, joining the room, then establishing a peer connection through offer/answer signaling. The client also supports camera switching, screen sharing, and call-view controls. Evidence is limited to the README (empty) and the sampled excerpts; details of unsampled client logic are not assumed.

Main entry points: [`public/client.js`](https://github.com/fullfilm2021/call.tvgo.site/blob/main/public/client.js) (Peer connection), [`server.js`](https://github.com/fullfilm2021/call.tvgo.site/blob/main/server.js) (Signaling relay)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Browser client"]
  node_lobby["Room lobby<br/>[client.js]"]
  node_callview["Call controls<br/>[client.js]"]
end

subgraph group_rtc["Media and calling"]
  node_media["Media capture<br/>[client.js]"]
  node_screenshare["Screen sharing<br/>[client.js]"]
  node_peerconnection["Peer connection<br/>[client.js]"]
end

subgraph group_server["Call server"]
  node_webapp["HTTP app and assets<br/>[server.js]"]
  node_roomstate[("Room membership<br/>[server.js]")]
  node_signaling["Signaling relay<br/>[server.js]"]
end

node_caller(("Caller"))
node_remotepeer(("Remote peer"))
node_browsermedia["Browser media APIs"]
node_sockettransport["Socket.IO transport"]

node_caller -->|"chooses room"| node_lobby
node_lobby -->|"starts capture"| node_media
node_lobby -.->|"joins room"| node_roomstate
node_media -->|"requests devices"| node_browsermedia
node_screenshare -->|"requests display"| node_browsermedia
node_media -->|"adds tracks"| node_peerconnection
node_peerconnection -->|"exchanges media"| node_remotepeer
node_peerconnection -->|"sends offer"| node_signaling
node_peerconnection -->|"sends answer"| node_signaling
node_signaling -->|"routes events"| node_sockettransport
node_signaling -->|"tracks members"| node_roomstate
node_webapp -->|"serves call page"| node_caller
node_callview -->|"switches camera"| node_media

click node_lobby "https://github.com/fullfilm2021/call.tvgo.site/blob/main/public/client.js"
click node_callview "https://github.com/fullfilm2021/call.tvgo.site/blob/main/public/client.js"
click node_media "https://github.com/fullfilm2021/call.tvgo.site/blob/main/public/client.js"
click node_screenshare "https://github.com/fullfilm2021/call.tvgo.site/blob/main/public/client.js"
click node_peerconnection "https://github.com/fullfilm2021/call.tvgo.site/blob/main/public/client.js"
click node_webapp "https://github.com/fullfilm2021/call.tvgo.site/blob/main/server.js"
click node_roomstate "https://github.com/fullfilm2021/call.tvgo.site/blob/main/server.js"
click node_signaling "https://github.com/fullfilm2021/call.tvgo.site/blob/main/server.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_lobby,node_callview,node_browsermedia toneBlue
class node_media,node_screenshare,node_peerconnection toneAmber
class node_webapp,node_roomstate,node_signaling toneMint
class node_caller,node_remotepeer,node_sockettransport toneIndigo
```

## Components

### Browser client

- [Room lobby](https://github.com/fullfilm2021/call.tvgo.site/blob/main/public/client.js): `public/client.js`
- [Call controls](https://github.com/fullfilm2021/call.tvgo.site/blob/main/public/client.js): `public/client.js`

### Media and calling

- [Media capture](https://github.com/fullfilm2021/call.tvgo.site/blob/main/public/client.js): `public/client.js`
- [Screen sharing](https://github.com/fullfilm2021/call.tvgo.site/blob/main/public/client.js): `public/client.js`
- [Peer connection](https://github.com/fullfilm2021/call.tvgo.site/blob/main/public/client.js): `public/client.js`

### Call server

- [HTTP app and assets](https://github.com/fullfilm2021/call.tvgo.site/blob/main/server.js): `server.js`
- [Room membership](https://github.com/fullfilm2021/call.tvgo.site/blob/main/server.js): `server.js`
- [Signaling relay](https://github.com/fullfilm2021/call.tvgo.site/blob/main/server.js): `server.js`

### Other components

- **Caller**
- **Remote peer**
- **Browser media APIs**
- **Socket.IO transport**

## Connections

- Caller → Room lobby: chooses room (evidence: `public/client.js`)
- Room lobby → Media capture: starts capture (evidence: `public/client.js`)
- Room lobby → Room membership: joins room
- Media capture → Browser media APIs: requests devices (evidence: `public/client.js`)
- Screen sharing → Browser media APIs: requests display (evidence: `public/client.js`)
- Media capture → Peer connection: adds tracks (evidence: `public/client.js`)
- Peer connection → Remote peer: exchanges media (evidence: `public/client.js`)
- Peer connection → Signaling relay: sends offer (evidence: `public/client.js`)
- Peer connection → Signaling relay: sends answer (evidence: `public/client.js`)
- Signaling relay → Socket.IO transport: routes events (evidence: `server.js`)
- Signaling relay → Room membership: tracks members (evidence: `server.js`)
- HTTP app and assets → Caller: serves call page (evidence: `server.js`)
- Call controls → Media capture: switches camera (evidence: `public/client.js`)
