A community-driven, secure, real-time video chat app built with web technologies.
- Project Overview
- Vision and Design Principles
- Goals & Non-Goals
- Key Features
- Tech Stack
- Architecture Overview
- Folder Structure
- Getting Started
- Testing & Quality Gates
- Contributing
- Issue & Release Process
- Branching & Git Workflow
- PR Template & Review Checklist
- Code Style Guide
- Security & Licensing
- Roadmap
- Project Governance
- Maintainers & Contact
- Acknowledgements
PeerCall delivers secure, privacy-respecting, real-time video communication combining peer-to-peer WebRTC with solid authentication and session management.
A smooth real-time WebRTC video call experience.
Seamless screen sharing capability.
- π Easy onboarding: Clone, run, and start developing quickly.
- π€ Community-first: Open governance and transparent development.
- π Security: Token rotation, secure sessions, HTTP-only cookies.
- β‘ Performance: Responsive, efficient, modern browser compatibility.
| Goals | Non-Goals |
|---|---|
| Secure, user-friendly video chat platform | Enterprise-level scaling out-of-the-box |
| Clear and welcoming contribution process | Polished final UI/UX design |
| Strong CI/CD pipelines and reproducible builds | Complex SFU cluster deployments initially |
- π Secure sign-up/sign-in with refresh token rotation
- π Create/join rooms using short shareable links
- π₯ WebRTC peer-to-peer media (audio/video) with mute & toggle controls
- π¬ In-call chat overlay for messaging during video calls
- π± Device & session listing with revocation for security
- π Lightweight backend for authentication, signaling, and presence
- React + TypeScript
- Vite
- Framer Motion for animations
- CSS Modules / Tailwind CSS
- Node.js + TypeScript
- Express or NestJS
- MongoDB or PostgreSQL
- JWT + httpOnly cookie session management
- WebRTC for media streams
- socket.io or WebSocket for signaling & presence
- ESLint, Prettier for code quality
- Jest or Vitest for unit testing
- GitHub Actions for CI/CD
graph TD
Client[Client (Browser)]
Server[API \& Signaling Server]
Database[Database]
Client -->|Requests Access Token| Server
Client -->|WebRTC Signaling \& Media| Server
Server -->|Stores Sessions \& Tokens| Database
Architecture components of PeerCall showing how client, signaling server, and database interact.
/
ββ README.md
ββ LICENSE
ββ .github/
ββ frontend/
β ββ src/
β ββ public/
β ββ package.json
ββ server/
β ββ src/
β ββ package.json
ββ scripts/
ββ tests/
- Node.js >= 18
- npm >= 9 or Yarn
git clone https://github.com/OPCODE-Open-Spring-Fest/PeerCall.git
cd PeerCall
cd frontend
npm install
cd ../server
npm install
- Copy
.env.exampleto.envin bothfrontendandserverfolders and fill in the required values.
# Run backend API server
cd server \&\& npm run dev
# Run frontend dev server (open new terminal)
cd ../frontend \&\& npm run dev
Open http://localhost:5173 to view the app.
- β
Type-check:
npm run type-check - β
Linting:
npm run lint(npm run lint:fixto fix issues) - β
Unit Tests:
npm run test - β
Build verification:
npm run build - β Continuous Integration with GitHub Actions on all PRs and main branch.
Please read our Contribution Guide for detailed instructions. Quick start:
- Pick an issue labelled
good first issueorhelp wantedand add proper descritpion of your apporach and how you want to contribute. - Fork and create a feature branch:
git checkout -b feat/awesome-feature - Commit often with clear, conventional commit messages.
- Run tests and linting locally before PR.
- Open a PR referencing relevant issues and describe your changes.
- Engage in code review until PR is approved and merged.
- Use descriptive labels like
type: bug,area: frontend,help wantedetc. - File issues using templates for reproducibility.
- Releases follow semantic versioning. Changelog auto-generated.
- Feature branches use prefixes like
feat/,fix/,chore/, anddocs/. - PRs should be concise and pass all CI checks.
- Rebase to keep history clean before merging.
## Summary
## Related Issues
## How to Test
- [x] CI passes
- [x] Code style \& tests updated
- Strict TypeScript typing β use
readonlyandunknownwhen appropriate - ESLint and Prettier enforced for consistency
- Modular, testable, focused components and functions
- Clear API typings on exports and interfaces
- Responsible Disclosure guidelines in
SECURITY.md - Contributor Code of Conduct in
CODE_OF_CONDUCT.md - Licensed under MIT (see the
LICENSEfile)
- v0.1: MVP - authentication + basic peer-to-peer WebRTC calls
- v0.2: Session management, chat overlay, UI improvements, e2e tests
- v1.0: Accessibility audit, stability enhancements, optional SFU integration
Community-driven with maintainer oversight. Contributions, discussions, and feedback are welcomed to shape project direction.Please star the repo
- Project Manager: @04shubham7
Thanks to all PeerCall contributors, WebRTC community (webrtc.org), and open-source projects making this possible.

