Application web de gestion de demandes de livres numériques. Les utilisateurs soumettent des demandes, suivent leur statut et téléchargent leurs livres. Les administrateurs gèrent les demandes, les utilisateurs et les notifications.
- Frontend — React, React Router, Chart.js, Axios
- Backend — Node.js, Express, MongoDB (Mongoose), JWT
- Notifications — Email (SMTP), Push (VAPID), Apprise
- IA — OpenAI / Ollama (recommandations, descriptions)
- Déploiement — Docker, GitHub Actions, Docker Hub
- Soumission et suivi de demandes de livres
- Recherche via Google Books API
- Bibliothèque personnelle avec statut de lecture et notation
- Page Découverte (tendances, bestsellers, recommandations IA)
- Notifications email et push par événement
- Diffusion admin (email HTML + push vers tous les utilisateurs)
- Réinitialisation de mot de passe par email
- Gestion des utilisateurs (rôles, quotas, activation/désactivation)
- Panel admin avec statistiques et logs
- Docker et Docker Compose
- Un compte MongoDB Atlas
- Un token Docker Hub (pour le build via GitHub Actions)
Copie .env.example en .env et remplis les valeurs :
cp .env.example .env| Variable | Description |
|---|---|
MONGODB_URI |
URI de connexion MongoDB Atlas |
JWT_SECRET |
Clé secrète pour les tokens JWT |
FRONTEND_URL |
URL publique de l'application |
GOOGLE_BOOKS_API_KEY |
Clé API Google Books |
EMAIL_PROVIDER |
Fournisseur email : smtp (défaut) ou resend |
SMTP_* |
Configuration serveur email (si EMAIL_PROVIDER=smtp) |
RESEND_API_KEY |
Clé API Resend (si EMAIL_PROVIDER=resend) |
RESEND_WEBHOOK_SECRET |
Secret de signature webhook Resend (optionnel, recommandé) |
VAPID_PUBLIC_KEY |
Clé publique pour les push notifications |
VAPID_PRIVATE_KEY |
Clé privée pour les push notifications |
OPENAI_API_KEY |
Clé API OpenAI (si AI_PROVIDER=openai) |
APPRISE_URL |
URL du service Apprise |
UPLOADS_PATH |
Chemin local pour les fichiers uploadés |
Générer les clés VAPID :
npx web-push generate-vapid-keysdocker-compose up -dL'application est accessible sur le port défini dans PORT (défaut : 5001).
docker exec -it ebookrequest node src/scripts/initAdmin.jsebookrequest/
├── src/ # Backend Express
│ ├── controllers/
│ ├── middleware/
│ ├── models/
│ ├── routes/
│ ├── scripts/ # initAdmin, migrations
│ ├── services/ # email, push, IA, trending...
│ └── index.js
├── frontend/ # React app
│ ├── public/
│ └── src/
│ ├── components/
│ ├── context/
│ ├── hooks/
│ ├── pages/
│ ├── services/
│ └── styles/
├── .github/workflows/ # GitHub Actions
├── .env.example
├── docker-compose.yml
└── Dockerfile
