Skip to content

cryptomafiaPB/free2talk

Free2Talk Logo

Free2Talk

Connect, Practice, Master Languages 🌍

License: MIT Node.js TypeScript Next.js PostgreSQL PRs Welcome

Live DemoDocumentationCommunityContributing

A free, open-source platform for real-time voice conversations with language partners worldwide. Practice languages through voice rooms and random matching.


✨ What is Free2Talk?

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.

🎯 Key Highlights

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

🎯 Core Features

🎙️ Voice Communication

  • 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

🎲 Random Matching

  • One-Click Pairing - Instantly connect with language partners
  • Smart Queueing - Fair matchmaking system
  • Language Filtering - Match with speakers of your target language

👤 User Management

  • 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

🏗️ Production-Ready Architecture

  • 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


🚀 Quick Start

Prerequisites

Ensure you have the following installed:

Local Development Setup

# 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 dev

Your app is now running!

🐳 Full Docker Setup

Run the entire stack with one command:

docker-compose up

This starts PostgreSQL, Redis, API server, and web frontend together.


📁 Project Structure

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!

🛠️ Technology Stack

Frontend

Backend

DevOps & Tools

📘 Detailed architecture and system design: TECHNICAL.md


📚 Available Scripts

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

🤝 Contributing

We ❤️ contributions! Whether you're fixing bugs, adding features, improving docs, or sharing ideas - all help is appreciated.

How to Contribute

  1. 🍴 Fork the repository
  2. 🌿 Create a feature branch (git checkout -b feature/amazing-feature)
  3. 💻 Commit your changes (git commit -m 'Add amazing feature')
  4. 📤 Push to your branch (git push origin feature/amazing-feature)
  5. 🎉 Open a Pull Request

Contribution Guidelines

  • 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

Good First Issues

New to the project? Look for issues labeled good first issue to get started!


📖 Documentation

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

� Community & Support

💡 Get Help

📢 Stay Updated

🐛 Report Issues


🗺️ Roadmap

  • 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

📄 License

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

🙌 Acknowledgments

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

⭐ Show Your Support

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 🎓

Releases

No releases published

Packages

 
 
 

Contributors

Languages