Learn languages through real conversations.
A modern, full-featured language exchange platform enabling users to connect with native speakers globally for real-time language learning through messaging, video calls, and live interaction.
Linguae is a production-ready language exchange application that bridges learners and native speakers in a seamless, real-time environment. Built with a modern tech stack and designed for scalability, Linguae combines intuitive UI/UX with powerful real-time capabilities to create an engaging platform for language learners worldwide.
Key Value Proposition:
- Connect with real language partners matched by learning goals
- Learn naturally through authentic conversations
- Flexible communication modes (chat, voice, video)
- Curated language exchange experience with community safety
- π Live Messaging - Type indicators, read receipts, and instant message delivery
- π¬ Message Reactions - Emoji reactions for engaging conversations
- πΌοΈ Media Sharing - Upload and share images in conversations
- πΉ One-on-One Video Calls - Crystal-clear peer-to-peer communication
- π₯ Group Video Calls - Connect with multiple learners simultaneously
- π¬ Screen Sharing - Share your screen for collaborative learning
- π₯ Call Recording - Record sessions for future reference
- π€ User Profiles - Showcase native language, learning goals, and bio
- π Smart Matching - Find language partners based on language preferences
- π Online Status - See who's available in real-time
- π€ Friend Requests & Notifications - Build your learning network
- π¨ 32 Unique UI Themes - Customize your experience with diverse visual themes
- πΎ Persistent Theme Preference - Your theme choice is saved locally
- π JWT Authentication - Secure token-based authentication
- π‘οΈ Protected Routes - Role-based access control
- π¨ Comprehensive Error Handling - Graceful error recovery on both frontend and backend
- β‘ Production-Ready Architecture - Designed for scale and reliability
- React - UI framework
- Vite - Lightning-fast build tool
- Tailwind CSS - Utility-first styling
- Zustand - Lightweight global state management
- TanStack Query - Powerful data fetching and caching
- Lucide React - Icon library
- Stream Chat - Real-time messaging SDK
- Node.js - Runtime environment
- Express.js - Web framework
- MongoDB - NoSQL database
- Stream - Real-time messaging and video infrastructure
- JWT - Authentication
- Mongoose - MongoDB ODM
Ensure you have installed:
- Node.js (v16 or higher)
- npm or yarn package manager
- MongoDB (local or Atlas cloud)
- Stream account (https://stream.io)
Create a .env file in the /backend directory:
# Server
PORT=5001
NODE_ENV=development
# Database
MONGO_URI=mongodb+srv://username:password@cluster.mongodb.net/linguae
# Stream API (Real-time & Video)
STEAM_API_KEY=your_stream_api_key
STEAM_API_SECRET=your_stream_api_secret
# Authentication
JWT_SECRET_KEY=your_secure_jwt_secret_key_hereCreate a .env file in the /frontend directory:
# Stream API
VITE_STREAM_API_KEY=your_stream_api_keycd backend
npm run devThe backend server will start on http://localhost:5001
cd frontend
npm install
npm run devThe frontend will be available on http://localhost:5173 (default Vite port)
linguae/
βββ backend/
β βββ src/
β β βββ controllers/ # Business logic
β β βββ models/ # MongoDB schemas
β β βββ routes/ # API endpoints
β β βββ middleware/ # Custom middleware
β β βββ lib/ # Utilities & services
β β βββ server.js # Entry point
β βββ package.json
β βββ .env
β
βββ frontend/
β βββ src/
β β βββ components/ # Reusable UI components
β β βββ pages/ # Page components
β β βββ hooks/ # Custom React hooks
β β βββ store/ # Zustand state
β β βββ lib/ # Utilities
β β βββ constants/ # App constants
β β βββ App.jsx
β β βββ main.jsx
β β βββ index.css
β βββ public/
β βββ .env
β βββ configuration files
β
βββ package.json
βββ README.md
- User signs up with email, full name, native language, and learning language
- JWT token generated and stored securely
- Protected routes validate token on each request
- Automatic logout on token expiration
- Stream Chat Integration - Leverages Stream's infrastructure for:
- Instant message delivery with typing indicators
- Message history and persistence
- Unread message tracking
- Reaction support
- Users can browse recommended language partners
- Filter by native language
- Search by user name
- Send/accept friend requests
- View friend request notifications
- Peer-to-peer connections via Stream
- Screen sharing for collaborative sessions
- Call recording for future learning review
- Real-time communication with low latency
- Responsive Design - Optimized for mobile, tablet, and desktop
- 32 Theme Options - Complete visual customization with persistent storage
- Accessibility - Semantic HTML and ARIA labels
- Loading States β Skeleton screens and spinners for smooth UX
- Error Feedback - User-friendly error messages and alerts
- Mobile Navigation - Hamburger menu with smooth scrolling
- JWT Tokens - Secure, stateless authentication
- Password Hashing - Bcrypt for password security (backend)
- Protected Endpoints - Middleware validates authentication
- CORS Configuration - Restricts cross-origin requests
- Environment Variables - Sensitive data never hardcoded
- Stream Security - Tokens validated server-side before use
Contributions are welcome! Please follow these guidelines:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is open-source and available under the MIT License.
Linguae - Connecting language learners worldwide. πβ¨