Node.js TypeScript PostgreSQL/Prisma Redis Express WebSockets LiveKit Docker React TailwindCSS ShadcnUI Zod

A Real-time chat application with features like DMs, Server/Channel-based messaging, voice and video chats, screen-sharing etc.
Node.js TypeScript PostgreSQL/Prisma Redis Express WebSockets LiveKit Docker React TailwindCSS ShadcnUI Zod

Nestly is a real-time community and messaging platform inspired by modern collaboration tools such as Discord. It allows users to create servers, organize conversations into channels, send direct messages, and communicate through voice and video calls.
The project initially started as a training project during my internship at TechySquad using MySQL and Sequelize. After the internship, I rebuilt the system as a personal project using PostgreSQL and modern backend tooling to improve scalability, maintainability, and overall architecture.
Nestly focuses on delivering a responsive real-time communication experience while maintaining a modular backend architecture capable of supporting messaging, presence tracking, and media interactions.
Real-time communication platforms combine multiple complex systems including messaging infrastructure, presence tracking, channel-based communities, and media communication.
While building real-time applications during my internship, I wanted to explore how systems like Discord manage:
Nestly was built as a learning project to understand how a full real-time communication platform can be designed and implemented from the backend up.
The initial version used MySQL and Sequelize during internship training. As the project evolved, maintaining schema consistency and type safety became difficult.
The system was later rebuilt using PostgreSQL and a modern TypeScript-based backend architecture.
Reason:
Improved schema design, stronger type safety, and easier maintainability.
Tradeoff:
Required rebuilding the database models, queries, and migration workflows.
Persistent WebSocket connections power the real-time layer for messaging, typing indicators, and presence updates.
Reason:
WebSockets provide low-latency bidirectional communication required for real-time collaboration systems.
Tradeoff:
Persistent connections require careful connection lifecycle management and resource handling.
Communities are organized into servers that contain multiple channels.
Reason:
This model allows conversations to be grouped by context while supporting large communities with structured discussions.
Tradeoff:
Requires additional logic for permissions, membership management, and message routing.
Voice calls, video calls, and screen sharing are implemented using LiveKit, a WebRTC-based media infrastructure.
Reason:
Building a reliable WebRTC media server from scratch is extremely complex. LiveKit allows focus on application logic while handling media routing and scaling.
Tradeoff:
Adds external infrastructure dependency.
The backend is structured into domain modules such as:
Reason:
A modular architecture improves maintainability and makes it easier to extend the platform with new features.
Tradeoff:
Requires additional upfront architectural design compared to a simple monolithic structure.
Building Nestly helped me understand the complexity behind real-time communication systems.
Key lessons: