Une plateforme sociale full-stack de dictionnaire multilingue qui révolutionne l'apprentissage des langues en combinant la richesse d'un dictionnaire collaboratif avec les fonctionnalités d'un réseau social moderne.
- ✨ Aperçu du Projet
- 🚀 Fonctionnalités Principales
- 🏗️ Architecture Technique
- 🛠️ Technologies Utilisées
- 📦 Installation
- 💻 Développement
- 📁 Structure du Projet
- 🔗 API Documentation
- 🔒 Sécurité
- 🤝 Contribution
- 🚀 Déploiement
- 📄 Licence
O'Ypunu est une application web moderne full-stack qui transforme l'expérience d'apprentissage linguistique en combinant :
- 📚 Dictionnaire collaboratif avec définitions riches et exemples
- 🌐 Communautés linguistiques pour échanger et apprendre ensemble
- 💬 Messagerie temps réel pour partager des mots et discuter
- 👥 Réseau social pour connecter les passionnés de langues
- 🎯 Système de favoris pour organiser son apprentissage
- 🔊 Prononciations audio pour perfectionner l'accent
Démocratiser l'apprentissage linguistique en créant une communauté mondiale où chaque utilisateur contribue à enrichir la connaissance collective des langues.
- Recherche avancée avec filtres par langue, catégorie, partie du discours
- Contributions communautaires avec système de modération
- Étymologies et prononciations détaillées
- Historique des révisions pour la traçabilité
- Upload audio pour les prononciations natives
- Création de communautés par langue ou thématique
- Discussions thématiques autour des mots et expressions
- Système de modération communautaire
- Communautés privées/publiques selon les besoins
- Chat instantané avec Socket.io
- Partage de mots intégré dans les conversations
- Indicateurs de frappe et statuts de présence
- Historique des conversations persistant
- Profils personnalisables avec langues natives/apprises
- Système de favoris pour organiser les mots
- Statistiques d'apprentissage personnalisées
- Réseau d'amis pour l'apprentissage collaboratif
- Dashboard administrateur avec métriques détaillées
- Modération des contributions (approbation/rejet)
- Gestion des utilisateurs et permissions
- Système de rôles granulaire
┌───────────────────────────────────────────────────┐
│ FRONTEND (Angular 19) │
├───────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Auth │ │ Dictionary │ │ Communities │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Messaging │ │ Profile │ │ Admin │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└───────────────────────────────────────────────────┘
│
API REST & WebSocket
│
┌───────────────────────────────────────────────────┐
│ BACKEND (NestJS 11) │
├───────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Auth Module │ │ Users Module│ │ Dictionary │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Communities │ │ Messaging │ │ Admin │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└───────────────────────────────────────────────────┘
│
┌─────────────┐
│ MongoDB │
└─────────────┘
src/
├── app/
│ ├── core/ # Services centraux, guards, intercepteurs
│ ├── shared/ # Composants réutilisables
│ ├── features/ # Modules métier (lazy loading)
│ │ ├── auth/ # Authentification
│ │ ├── dictionary/ # Fonctionnalités dictionnaire
│ │ ├── communities/ # Gestion des communautés
│ │ ├── messaging/ # Chat temps réel
│ │ ├── admin/ # Administration
│ │ └── profile/ # Gestion des profils
│ └── pipes/ # Pipes personnalisés
src/
├── auth/ # Module d'authentification
├── users/ # Module utilisateurs
├── dictionary/ # Module dictionnaire
├── communities/ # Module communautés
├── messaging/ # Module messagerie
├── admin/ # Module administration
├── common/ # Services partagés
└── config/ # Configuration globale
Technologie | Version | Usage |
---|---|---|
Angular | 19.1.0 | Framework principal |
TypeScript | 5.7.2 | Langage de développement |
TailwindCSS | 3.4.0 | Framework CSS |
Socket.io Client | 4.8.1 | Communication temps réel |
RxJS | 7.8.0 | Programmation réactive |
Technologie | Version | Usage |
---|---|---|
NestJS | 11.0.1 | Framework Node.js |
TypeScript | 5.7.3 | Langage de développement |
MongoDB | 8.12.1 | Base de données NoSQL |
Mongoose | 8.12.1 | ODM MongoDB |
Socket.io | 4.8.1 | Communication temps réel |
JWT | 11.0.0 | Authentification |
Passport | 0.7.0 | Stratégies d'authentification |
Bcrypt | 5.1.1 | Hashage mots de passe |
Cloudinary | 2.6.1 | Stockage fichiers audio |
Nodemailer | 6.10.0 | Envoi d'emails |
Redis | 5.6.1 | Cache et sessions |
- Node.js >= 18.x
- npm >= 9.x
- MongoDB (local ou cloud Atlas)
- Redis (optionnel, pour les fonctionnalités temps réel)
# Cloner le repository
git clone <repository-url>
cd oypunu
# Installer les dépendances du projet complet
npm install
# Installer les dépendances du backend
cd backend
npm install
# Installer les dépendances du frontend
cd ../frontend
npm install
# Base de données
MONGODB_URI=mongodb://localhost:27017/oypunu
# JWT
JWT_SECRET=your-super-secret-jwt-key
JWT_EXPIRES_IN=1d
# Email (Nodemailer)
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USER=your-email@gmail.com
MAIL_PASSWORD=your-app-password
MAIL_FROM=noreply@oypunu.com
# Cloudinary (pour les audios)
CLOUDINARY_CLOUD_NAME=your-cloud-name
CLOUDINARY_API_KEY=your-api-key
CLOUDINARY_API_SECRET=your-api-secret
# OAuth (optionnel)
GOOGLE_CLIENT_ID=your-google-client-id
GOOGLE_CLIENT_SECRET=your-google-client-secret
FACEBOOK_APP_ID=your-facebook-app-id
FACEBOOK_APP_SECRET=your-facebook-app-secret
# URLs
FRONTEND_URL=http://localhost:4200
APP_URL=http://localhost:3000
PORT=3000
export const environment = {
production: false,
apiUrl: "http://localhost:3000/api",
};
# Terminal 1 - Backend
cd backend
npm run start:dev
# Terminal 2 - Frontend
cd frontend
npm start
L'application sera accessible sur :
- Frontend : http://localhost:4200
- Backend API : http://localhost:3000
- API Documentation : http://localhost:3000/api-docs
npm run start:dev # Développement avec hot reload
npm run build # Build de production
npm run start:prod # Lancer en production
npm test # Tests unitaires
npm run test:cov # Tests avec couverture
npm run lint # Linting et formatage
npm start # Développement avec hot reload
npm run build # Build de production
npm test # Tests unitaires
npm run lint # Linting et formatage
oypunu/
├── backend/ # API NestJS
│ ├── src/
│ │ ├── auth/ # Authentification
│ │ ├── users/ # Gestion utilisateurs
│ │ ├── dictionary/ # API dictionnaire
│ │ ├── communities/ # Communautés
│ │ ├── messaging/ # Chat temps réel
│ │ ├── admin/ # Administration
│ │ └── common/ # Services partagés
│ ├── package.json
│ └── .env
├── frontend/ # Application Angular
│ ├── src/
│ │ ├── app/
│ │ │ ├── core/ # Services centraux
│ │ │ ├── shared/ # Composants partagés
│ │ │ └── features/ # Modules métier
│ │ └── environments/
│ └── package.json
├── docs/ # Documentation
├── package.json # Dependencies racine
└── README.md # Ce fichier
POST /api/auth/register # Inscription
POST /api/auth/login # Connexion
GET /api/auth/verify-email/:token # Vérification email
POST /api/auth/forgot-password # Mot de passe oublié
GET /api/auth/profile # Profil utilisateur
GET /api/words/search # Recherche de mots
POST /api/words # Créer un mot
GET /api/words/:id # Détails d'un mot
PUT /api/words/:id # Modifier un mot
POST /api/words/:id/audio # Upload audio
GET /api/words/pending # Mots en attente (admin)
GET /api/communities # Lister les communautés
POST /api/communities # Créer une communauté
GET /api/communities/:id # Détails communauté
POST /api/communities/:id/join # Rejoindre
GET /api/communities/:id/members # Membres
GET /api/messaging/conversations # Conversations
GET /api/messaging/messages # Messages
POST /api/messaging/send # Envoyer message
GET /api/messaging/unread-count # Messages non lus
// Événements temps réel
"send_message"; // Envoyer un message
"join_conversation"; // Rejoindre une conversation
"typing_start"; // Commencer à taper
"typing_stop"; // Arrêter de taper
// Événements reçus
"new_message"; // Nouveau message
"user_online"; // Utilisateur en ligne
"user_offline"; // Utilisateur hors ligne
"word_approved"; // Mot approuvé par un modérateur
- JWT Tokens avec expiration configurable
- Refresh Tokens pour la sécurité
- Hashage bcrypt pour les mots de passe
- OAuth Social : Google, Facebook, Twitter
- Validation stricte des entrées utilisateur
// Exemple de protection par rôle
@UseGuards(JwtAuthGuard, RolesGuard)
@Roles(UserRole.ADMIN)
@Get('admin/users')
async getUsers() {
// Seuls les admins peuvent accéder
}
- DTOs avec class-validator pour toutes les entrées
- Sanitisation des données utilisateur
- Validation des fichiers audio uploadés
- Rate limiting pour éviter les abus
- Guards Angular pour la protection des routes frontend
- Fork le projet
- Créer une branche :
git checkout -b feature/nouvelle-fonctionnalite
- Commit les changements :
git commit -m 'Ajout nouvelle fonctionnalité'
- Push la branche :
git push origin feature/nouvelle-fonctionnalite
- Ouvrir une Pull Request
- TypeScript strict activé
- ESLint + Prettier pour la qualité du code
- Tests unitaires obligatoires pour les nouveaux services
- Documentation pour tous les endpoints API
- Commits conventionnels recommandés
# Backend
cd backend
npm test # Tests unitaires
npm run test:cov # Tests avec couverture
npm run test:e2e # Tests de bout en bout
# Frontend
cd frontend
npm test # Tests unitaires
npm run test:watch # Tests en mode watch
# Backend
cd backend
npm run build
npm run start:prod
# Frontend
cd frontend
npm run build
# Les fichiers sont générés dans dist/
# Backend
NODE_ENV=production
MONGODB_URI=mongodb+srv://user:pass@cluster.mongodb.net/oypunu
JWT_SECRET=super-secure-production-secret
FRONTEND_URL=https://oypunu.com
APP_URL=https://api.oypunu.com
# Frontend
# src/environments/environment.prod.ts
export const environment = {
production: true,
apiUrl: 'https://api.oypunu.com/api',
};
# Backend Dockerfile
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY dist ./dist
EXPOSE 3000
CMD ["node", "dist/main"]
- Utilisateurs actifs et statistiques d'inscription
- Mots créés/approuvés par période
- Messages envoyés et activité temps réel
- Performance API et temps de réponse
- Indexation MongoDB pour les requêtes fréquentes
- Cache Redis pour les données souvent consultées
- Lazy Loading des modules Angular
- Pagination pour toutes les listes
- OnPush Change Detection où approprié
Ce projet est sous licence MIT - voir le fichier LICENSE pour plus de détails.
Chermann KING - Développeur Principal
Si ce projet vous plaît, n'hésitez pas à lui donner une étoile ! ⭐
Fait avec ❤️ pour la communauté des passionnés de langues
Plateforme full-stack moderne pour révolutionner l'apprentissage linguistique