Application full-stack de gestion et consultation de citations inspirantes avec panel d'administration, API REST et application mobile.
- Vue d'Ensemble
- Architecture
- Technologies
- Installation
- Démarrage Rapide
- Applications
- Documentation
- Scripts Disponibles
Focus est une plateforme complète de citations inspirantes comprenant :
- 🖥️ Panel Admin - Interface web pour gérer les citations, topics et utilisateurs
- 🔌 API REST - Backend NestJS avec authentification JWT et base de données PostgreSQL (Supabase)
- 📱 App Mobile - Application React Native/Expo avec infinite scroll et i18n (10 langues)
- ✅ CRUD complet pour citations et topics
- ✅ Authentification JWT avec rôles (admin/user)
- ✅ Internationalisation (FR, EN, ES, AR, DE, IT, ZH, NL, RU, TR avec support RTL)
- ✅ Traduction automatique des citations et topics (DeepL / MyMemory)
- ✅ Système d'icônes cross-platform (Lucide + Ionicons)
- ✅ Gestion d'état avec Redux Toolkit + React Query
- ✅ Architecture modulaire avec BaseEntity (UUIDs)
- ✅ Infinite scroll et pagination
- ✅ Thème clair/sombre/système
- ✅ Thèmes visuels personnalisés avec polices
- ✅ Like/Unlike de citations
- ✅ Filtrage par topics
- ✅ Système d'abonnement (RevenueCat + Stripe)
- ✅ Attribution manuelle de souscription (Admin)
- ✅ Système de promo codes (Admin + Mobile)
- ✅ Notifications push personnalisées
- ✅ Widgets iOS/Android
- ✅ Partage de citations en image
Focus_project/
├── apps/
│ ├── admin/ # Panel d'administration (Next.js 15)
│ ├── api/ # API REST (NestJS)
│ └── mobile/ # Application mobile (React Native + Expo)
├── packages/
│ ├── eslint-config/ # Configuration ESLint partagée
│ ├── typescript-config/ # Configuration TypeScript partagée
│ └── ui/ # Composants UI partagés
└── docs/ # Documentation
Toutes les entités héritent de BaseEntity :
abstract class BaseEntity {
id: string; // UUID
createdAt: Date; // Auto-généré
updatedAt: Date; // Auto-mis à jour
deletedAt: Date; // Soft delete
}Entités principales : Topic, Quote, User, Subscription, SubscriptionPlan, PromoCode
- Redux Toolkit : State global (auth, theme)
- React Query : Server state avec cache automatique
- i18next : Internationalisation (FR, EN, ES, AR)
- Next.js 15 (App Router)
- React 19
- TypeScript
- Tailwind CSS v4
- Radix UI (composants accessibles)
- Lucide Icons
- i18n (FR/EN)
- NestJS 10
- TypeORM
- PostgreSQL (Supabase)
- Passport JWT
- bcrypt
- class-validator
- Stripe (paiements web)
- RevenueCat (paiements mobile)
- DeepL / MyMemory (traduction)
- Cloudinary (images)
- React Native
- Expo SDK 54
- TypeScript
- Redux Toolkit
- React Query (TanStack)
- React Navigation
- i18next (10 langues)
- Ionicons
- Expo Notifications
- RevenueCat SDK (abonnements)
- react-native-android-widget / @bacons/apple-targets (widgets)
- Turborepo (monorepo)
- ESLint
- Prettier
- Vercel (déploiement admin)
- EAS Build (builds mobile)
- Node.js >= 18.x
- npm >= 9.x
- Git
# Cloner le repository
git clone <repository-url>
cd Focus_project
# Installer toutes les dépendances
npm install# Depuis la racine
npm run dev:api
# Ou depuis apps/api
cd apps/api
npm run start:devL'API sera disponible sur http://localhost:3001
cd apps/api
# Réinitialiser la DB (optionnel)
./reset-database.sh
# Seed les topics
node seed-topics.js# Depuis la racine
npm run dev:admin
# Ou depuis apps/admin
cd apps/admin
npm run devLe panel sera disponible sur http://localhost:3000
Compte admin par défaut :
- Email:
admin@focus.com - Password:
admin123
# Depuis la racine
npm run dev:mobile
# Ou depuis apps/mobile
cd apps/mobile
npm startScannez le QR code avec Expo Go ou appuyez sur :
ipour iOS Simulatorapour Android Emulatorwpour Web
Interface web pour gérer le contenu.
Fonctionnalités :
- Dashboard avec statistiques (utilisateurs, revenus, abonnements)
- CRUD Topics (nom, titre, description, icône, couleur, premium)
- CRUD Quotes (texte, auteur, topic)
- Gestion utilisateurs et abonnements
- Attribution manuelle de souscription (avec vérification mot de passe)
- Gestion des promo codes (création, liste, détails, utilisateurs)
- Gestion des thèmes visuels et polices
- Gestion des plans d'abonnement
- Historique des paiements (Stripe + RevenueCat)
- Upload d'images (Cloudinary)
- Authentification JWT
- i18n (FR/EN)
URL : http://localhost:3000
Backend NestJS avec architecture modulaire.
Endpoints principaux :
POST /auth/login- AuthentificationPOST /auth/register- InscriptionGET /quotes- Liste des citations (pagination)GET /quotes/:id- Citation par IDPOST /quotes/:id/like- Liker une citationGET /topics- Liste des topicsGET /topics/:id- Topic par IDPOST /subscriptions/checkout- Créer une session StripePOST /subscriptions/webhook/revenuecat- Webhook RevenueCatPOST /subscriptions/sync-revenuecat- Synchroniser entitlementsPOST /subscriptions/apply-promo-code- Appliquer un promo codePOST /subscriptions/users/:userId/assign-subscription- Attribution manuelle (admin)GET /subscriptions/plans- Liste des plansPOST /subscriptions/promo-codes- Créer un promo code (admin)GET /subscriptions/promo-codes- Liste des promo codes (admin)POST /translations/translate- Traduire du texte
URL : http://localhost:3001
Documentation : Voir apps/api/README.md
Application React Native avec Expo.
Fonctionnalités :
- Infinite scroll de citations
- Pull-to-refresh
- Like/Unlike et favoris
- Filtrage par topics
- Authentification
- Profil utilisateur avec statistiques
- Settings (langue, thème, mode)
- Traduction automatique des citations et topics
- Thèmes visuels personnalisés avec polices
- Notifications push configurables (heures, jours)
- Widgets iOS et Android
- Partage de citations en image
- Abonnement premium via RevenueCat (iOS/Android)
- Promo codes pour accès premium gratuit
- Synchronisation automatique des abonnements
- i18n (FR, EN, ES, AR, DE, IT, ZH, NL, RU, TR)
Technologies :
- Redux Toolkit (state management)
- React Query (server state)
- RevenueCat SDK (abonnements)
- React Navigation (navigation)
- i18next (internationalisation)
- Expo Notifications (push)
- Expo Sharing (partage)
- ARCHITECTURE_IMPROVEMENTS.md - Améliorations architecturales (BaseEntity, Redux, React Query)
- ICONS_SYSTEM.md - Système d'icônes cross-platform
- TESTING_GUIDE.md - Guide de tests
- apps/mobile/MIGRATION_GUIDE.md - Migration Context → Redux + React Query
- apps/mobile/I18N_IMPLEMENTATION.md - Implémentation i18n
- apps/api/MIGRATION_UUID.md - Migration vers UUIDs
# Développement
npm run dev # Démarrer toutes les apps
npm run dev:admin # Démarrer uniquement l'admin
npm run dev:api # Démarrer uniquement l'API
npm run dev:mobile # Démarrer uniquement le mobile
# Build
npm run build # Build toutes les apps
npm run build:admin # Build l'admin
npm run build:api # Build l'API
# Linting
npm run lint # Lint toutes les appsnpm run start:dev # Mode développement (watch)
npm run start:prod # Mode production
npm run build # Compiler TypeScript
npm test # Tests unitaires
npm run test:e2e # Tests e2enpm run dev # Mode développement
npm run build # Build production
npm run start # Démarrer en production
npm run lint # Linter le codenpm start # Démarrer Expo
npm run android # Ouvrir sur Android
npm run ios # Ouvrir sur iOS
npm run web # Ouvrir sur Web- 🇫🇷 Français (fr) - Langue source
- 🇬🇧 English (en)
- 🇪🇸 Español (es)
- 🇸🇦 العربية (ar) - avec support RTL
- 🇩🇪 Deutsch (de)
- 🇮🇹 Italiano (it)
- 🇨🇳 中文 (zh)
- 🇳🇱 Nederlands (nl)
- 🇷🇺 Русский (ru)
- 🇹🇷 Türkçe (tr)
L'application dispose d'une fonctionnalité de traduction automatique des citations et topics :
- Activable dans Settings → Traduction automatique
- Utilise DeepL API (principal) et MyMemory (fallback)
- Cache local pour éviter les appels API répétés
- Traduit automatiquement depuis le français vers la langue sélectionnée
Mobile : Settings → Language → Sélectionner la langue Admin : Sélecteur de langue dans le header
L'application mobile supporte 3 modes :
- ☀️ Light - Thème clair
- 🌙 Dark - Thème sombre
- 🔄 System - Suit le thème du système
L'application propose des thèmes visuels personnalisés :
- Fonds d'écran avec images
- Polices personnalisées par thème
- Gérables depuis le panel admin
Admin :
- Email:
admin@focus.com - Password:
admin123
User :
- Email:
user@focus.com - Password:
user123
Les tokens JWT sont stockés dans :
- Admin :
localStorage - Mobile :
AsyncStorage
Durée de validité : 7 jours
L'application intègre un système d'abonnement premium via RevenueCat (mobile) et Stripe (web) :
- Plans mensuels et annuels configurables depuis l'admin
- Période d'essai gratuite (freemium)
- Promo codes pour accès premium temporaire
- Accès aux topics premium
- Notifications push personnalisées
- Thèmes visuels exclusifs
- Traduction automatique illimitée
Les administrateurs peuvent :
- Attribuer manuellement une souscription à un utilisateur
- Nécessite confirmation par mot de passe admin
- Visible dans l'interface admin sous chaque profil utilisateur
Admin :
- Créer des promo codes avec durée personnalisée (ex: 7, 30, 90 jours)
- Voir la liste des utilisateurs ayant utilisé chaque code
- Suivre le nombre d'utilisations
Utilisateur Mobile :
- Entrer un promo code lors de l'inscription
- Application automatique du premium pour la durée définie
- Un seul promo code par compte
Variables d'environnement requises :
# Stripe (paiements web)
STRIPE_SECRET_KEY=sk_...
STRIPE_WEBHOOK_SECRET=whsec_...
# RevenueCat (paiements mobile)
REVENUECAT_API_KEY=...
REVENUECAT_WEBHOOK_SECRET=...Voir docs/SUBSCRIPTIONS_SETUP.md pour plus de détails.
- Fork le projet
- Créer une branche (
git checkout -b feature/AmazingFeature) - Commit les changements (
git commit -m 'Add AmazingFeature') - Push vers la branche (
git push origin feature/AmazingFeature) - Ouvrir une Pull Request
Ce projet est sous licence MIT.
- Cédric Karungu - Développeur Principal
- NestJS - Framework backend
- Next.js - Framework React
- Expo - Plateforme React Native
- Radix UI - Composants accessibles
- Turborepo - Monorepo tool
- Stripe - Paiements web
- RevenueCat - Paiements mobile
- DeepL - Traduction automatique
- Supabase - Base de données PostgreSQL
- Cloudinary - Gestion d'images