Skip to content

huseyn0w/Fast-Connect

Repository files navigation

Fast Connect

Instant, registration-free group video conferencing. Create a room, share the link, and talk face to face in seconds - with screen sharing and chat built in.

Features

  • No registration, no accounts, no downloads
  • Real-time multi-party video/audio (full-mesh WebRTC)
  • Shareable room links
  • Screen sharing
  • In-room chat

Tech stack

Layer Technology
Client Vite, React 18, TypeScript, Tailwind CSS, Framer Motion, PeerJS
Server Node 22, Express 5, Socket.IO 4, self-hosted PeerJS broker
Tooling npm workspaces, Vitest, ESLint, Docker

The repo is an npm-workspaces monorepo:

  • client/ - the single-page app (UI + WebRTC logic).
  • server/ - the signaling server (room membership + chat over Socket.IO) and the PeerJS broker that carries media. A backend is required: WebRTC needs a signaling channel and a peer broker.

Getting started

Requires Node 20+.

npm install                 # installs both workspaces
cp client/.env.example client/.env
cp server/.env.example server/.env

Run the server and client in two terminals:

npm run dev:server          # signaling on http://localhost:5000
npm run dev:client          # app on http://localhost:5173

Open http://localhost:5173. To test a real call, open the room link in a second browser/tab.

Camera and microphone access requires a secure context. localhost counts as secure; any other host must be served over HTTPS.

Common scripts (run from the repo root)

Command What it does
npm run dev:client Vite dev server (HMR)
npm run dev:server Signaling server with watch reload
npm run build Builds both workspaces
npm test Runs the Vitest suites in both workspaces
npm run typecheck Type-checks both workspaces
npm run lint Lints the client

Configuration

Client (client/.env.example):

  • VITE_SERVER_URL - base URL of the signaling server (empty = same origin).
  • VITE_PEER_PATH - PeerJS broker path; must match the server.

Server (server/.env.example):

  • PORT, NODE_ENV
  • CORS_ORIGINS - comma-separated allowed browser origins (* for local dev only).
  • PEER_PATH - path the PeerJS broker is mounted under.

Docker & deployment

Containerized development (live reload):

docker compose -f docker-compose.dev.yml up --build   # http://localhost:5173

Source folders are bind-mounted, so host edits sync into the containers instantly: Vite HMR refreshes the browser and tsx restarts the server on change - no rebuild needed. File-watching uses polling so changes are detected reliably across the mount.

The signaling server is published on host port 5055 by default (macOS AirPlay Receiver holds 5000). The container still listens on 5000 internally. Override with SERVER_PORT=xxxx docker compose -f docker-compose.dev.yml up --build.

Production-style images (no reload): docker compose up --build builds the same images shipped to production (static SPA via nginx + compiled server) and serves the client on :8080. Use it to validate the build locally. See docker-compose.yml.

Production deployment to a Hostinger VPS is documented in DEPLOYMENT.md.

License

GPL-3.0