Connect, Practice, Master Languages 🌍
Live Demo • Documentation • Community • Contributing
A free, open-source platform for real-time voice conversations with language partners worldwide. Practice languages through voice rooms and random matching.
Free2Talk is a scalable language learning platform that connects learners with native speakers and language partners for real-time voice practice. Whether you're improving your accent, building conversational fluency, or learning from native speakers, Free2Talk provides the tools you need.
| Feature | Description |
|---|---|
| 🎙️ Voice Rooms | Create or join multi-user voice rooms for group conversations |
| 🎲 Random Matching | One-click matching with compatible language partners |
| 🔒 Privacy-First | Your conversations and data remain private and secure |
| 🚀 Enterprise-Grade | Built with mediasoup for production-ready WebRTC communication |
| 📱 Fully Responsive | Seamless experience across desktop, tablet, and mobile |
| 🌐 100% Free | Open-source, community-driven, free forever |
- High-Quality Audio powered by mediasoup WebRTC SFU
- Voice Rooms - Create/join multi-user voice chat rooms (2-12 participants)
- Room Controls - Mute/unmute, kick users, transfer ownership
- Real-time Audio - Low-latency voice streaming
- One-Click Pairing - Instantly connect with language partners
- Smart Queueing - Fair matchmaking system
- Language Filtering - Match with speakers of your target language
- Secure Authentication - JWT-based auth with HTTP-only cookies
- Google OAuth - Quick sign-in with Google
- Profile System - Customize profile, set language preferences
- Cloudinary Integration - Profile picture uploads
- Scalable Backend - Express.js with Redis caching
- Type-Safe - Full TypeScript coverage
- Monorepo Structure - Turborepo for optimized builds
- Docker Support - Development and production containers
📖 For detailed technical documentation, see TECHNICAL.md
Ensure you have the following installed:
- Node.js
>=20.0.0- Download - pnpm
>=9.0.0- Install Guide - Docker & Docker Compose - Get Docker
- Git - Install Git
# 1. Clone the repository
git clone https://github.com/cryptomafiaPB/free2talk.git
cd free2talk
# 2. Install dependencies (uses pnpm workspaces)
pnpm install
# 3. Start PostgreSQL and Redis via Docker
docker-compose up -d
# 4. Configure environment variables
cp apps/api/.env.example apps/api/.env
cp apps/web/.env.local.example apps/web/.env.local
# Edit .env files with your configurations:
# - Database connection strings
# - JWT secrets
# - Google OAuth credentials (optional)
# - Cloudinary keys (for image uploads)
# 5. Initialize the database
pnpm db:push
# 6. Start development servers
pnpm devYour app is now running!
- 🌐 Frontend: http://localhost:3000
- 🔧 API: http://localhost:3001
Run the entire stack with one command:
docker-compose upThis starts PostgreSQL, Redis, API server, and web frontend together.
free2talk/
├── apps/
│ ├── api/ # Express.js Backend API
│ │ ├── src/
│ │ │ ├── controllers/ # HTTP route handlers
│ │ │ ├── services/ # Business logic layer
│ │ │ ├── socket/ # Socket.io event handlers
│ │ │ │ ├── mediasoup/ # WebRTC SFU implementation
│ │ │ │ └── random-handlers.ts
│ │ │ ├── middleware/ # Auth, rate limiting, errors
│ │ │ ├── routes/ # API route definitions
│ │ │ ├── db/ # Database config & schema
│ │ │ │ ├── schema.ts # Drizzle schema
│ │ │ │ ├── redis.ts # Redis client
│ │ │ │ └── migrations/ # SQL migrations
│ │ │ ├── config/ # Environment configuration
│ │ │ └── utils/ # Utility functions
│ │ └── Dockerfile
│ │
│ └── web/ # Next.js Frontend App
│ ├── app/ # App Router pages
│ │ ├── rooms/ # Voice rooms UI
│ │ ├── random/ # Random matching UI
│ │ ├── profile/ # User profile
│ │ └── login/ # Authentication
│ ├── components/ # React components
│ │ ├── room/ # Room components
│ │ ├── random/ # Random call components
│ │ ├── auth/ # Auth components
│ │ └── ui/ # shadcn/ui components
│ ├── lib/
│ │ ├── stores/ # Zustand state
│ │ ├── hooks/ # Custom React hooks
│ │ ├── services/ # API service layer
│ │ ├── api.ts # Axios instance
│ │ └── socket.ts # Socket.io client
│ └── Dockerfile
│
├── packages/
│ └── shared/ # Shared Code (Monorepo)
│ └── src/
│ ├── types/ # TypeScript interfaces
│ ├── constants/ # Shared constants
│ └── validation/ # Zod schemas
│
├── docker-compose.yml # Development compose
├── docker-compose.prod.yml # Production compose
├── turbo.json # Turborepo config
├── pnpm-workspace.yaml # pnpm workspaces
└── README.md # You are here!
|
|
📘 Detailed architecture and system design: TECHNICAL.md
| Command | Description |
|---|---|
| Development | |
pnpm dev |
Start all apps in dev mode with hot reload |
pnpm dev --filter=web |
Start only the Next.js frontend |
pnpm dev --filter=api |
Start only the Express API |
| Building | |
pnpm build |
Build all apps for production |
pnpm build:web |
Build frontend only |
pnpm build:api |
Build backend only |
| Production | |
pnpm start |
Start all production servers |
pnpm start:web |
Start Next.js production server |
pnpm start:api |
Start Express API server |
| Database | |
pnpm db:generate |
Generate Drizzle migrations |
pnpm db:migrate |
Run pending migrations |
pnpm db:push |
Push schema changes to DB |
pnpm db:studio |
Open Drizzle Studio (DB GUI) |
| Code Quality | |
pnpm lint |
Run ESLint on all apps |
pnpm clean |
Remove all build artifacts |
We ❤️ contributions! Whether you're fixing bugs, adding features, improving docs, or sharing ideas - all help is appreciated.
- 🍴 Fork the repository
- 🌿 Create a feature branch (
git checkout -b feature/amazing-feature) - 💻 Commit your changes (
git commit -m 'Add amazing feature') - 📤 Push to your branch (
git push origin feature/amazing-feature) - 🎉 Open a Pull Request
- Read CONTRIBUTING.md for detailed guidelines
- Follow CODE_OF_CONDUCT.md
- Check existing issues before creating new ones
- Write clear commit messages
- Add tests for new features
- Update documentation as needed
New to the project? Look for issues labeled good first issue to get started!
| Document | Description |
|---|---|
| TECHNICAL.md | Detailed technical architecture and system design |
| CONTRIBUTING.md | Contribution guidelines and development workflow |
| CODE_OF_CONDUCT.md | Community standards and values |
| DEPLOYMENT_CHECKLIST.md | Production deployment guide |
|
|
- Phase 1: Voice rooms with mediasoup WebRTC
- Phase 2: Random matching feature
- Phase 3: Google OAuth integration
- Phase 4: Text messaging in rooms
- Phase 5: User profiles & social features
- Phase 6: Mobile apps (React Native)
- Phase 7: Video chat support
- Phase 8: AI-powered conversation suggestions
This project is licensed under the MIT License - see LICENSE for details.
What this means:
- ✅ Free to use for personal and commercial projects
- ✅ Modify and distribute freely
- ✅ Private use allowed
⚠️ Must include the license notice- ❌ No warranty provided
Built with incredible open-source tools:
- mediasoup - Production-grade WebRTC SFU
- Next.js - The React Framework for the Web
- Drizzle ORM - TypeScript ORM that doesn't get in your way
- shadcn/ui - Beautifully designed components
- All the amazing open-source libraries that made this possible
If Free2Talk helps you or your community:
- ⭐ Star this repository
- 🐦 Share on social media
- 🤝 Contribute to the project
- 💬 Spread the word in language learning communities
- ☕ Sponsor the project (coming soon)
Built with ❤️ by the Free2Talk Community
Empowering language learners worldwide through open-source technology
🌐 Website • 📱 Telegram • 🐙 GitHub
Made possible by the GitHub Student Developer Pack 🎓