Petite app perso pour centraliser toute ma collection de livres / BD avec une interface moderne, des listes de lecture et une wishlist pratique.
-
Authentification
- Connexion via un mot de passe administrateur (
admin123au premier lancement, modifiable ensuite). - Protection contre les tentatives de connexion abusives (verrouillage temporaire, délais progressifs entre essais).
- Connexion via un mot de passe administrateur (
-
Gestion de collection de livres
- Ajout, édition, suppression de livres (
titre,auteur,série,état,note,notes, etc.). - Téléchargement automatique des couvertures distantes vers
public/book-covers. - VĂ©rifications et messages dâerreur cĂŽtĂ© serveur (titre/auteur obligatoires, note 1â5, etc.).
- Ajout, édition, suppression de livres (
-
Liste de souhaits (wishlist)
- Ajout de livres que vous ne possédez pas encore.
- DĂ©placement dâun livre de la wishlist vers la collection.
-
Dossiers de lecture / ordres de lecture
- CrĂ©ation de dossiers de lecture (par sĂ©rie, auteur, thĂ©matiqueâŠ).
- Ajout de livres dans un dossier avec un ordre de lecture et des notes.
- RĂ©organisation de lâordre des livres (drag & drop cĂŽtĂ© UI).
-
Recherche & intégrations externes
- APIRoutes pour interroger ComicVine, MangaDex, Bedetheque, etc. (voir
app/api/*). - PossibilitĂ© dâenregistrer des clĂ©s API (par ex.
ComicVine) via le menu ParamĂštres.
- APIRoutes pour interroger ComicVine, MangaDex, Bedetheque, etc. (voir
-
Interface moderne
- Composants UI basés sur Radix UI + Tailwind (voir
components/ui/*). - ThÚme sombre par défaut, design responsive.
- Toasters, dialogues, formulaires ergonomiques.
- Composants UI basés sur Radix UI + Tailwind (voir
- Framework : Next.js 15 (
approuter, composants serveur & client). - Langage : TypeScript.
- UI : React 18, Radix UI, Tailwind CSS.
- Stockage : fichier JSON local
data/library.json(géré parlib/db.ts). - Autres librairies :
react-hook-form,zod,date-fns,embla-carousel-react,recharts,lucide-react, etc.
- Node.js 18+ recommandé.
- pnpm (conseillé) ou npm/yarn pour gérer les dépendances.
- Cloner le dépÎt :
git clone https://github.com/Aprilox/book-collection.git
cd book-collection- Installer les dépendances (avec pnpm) :
pnpm installVous pouvez aussi utiliser
npm installouyarn, selon vos habitudes.
pnpm devLâapplication sera disponible sur http://localhost:7003.
- Construire le projet :
pnpm build- Lancer le serveur de production :
pnpm startPar défaut : http://127.0.0.1:8003.
â ïž Ce projet est une dĂ©mo pensĂ©e pour un usage local / perso, pas pour un dĂ©ploiement en production tel quel.
- Les données utilisateur sont actuellement stockées en local dans le fichier
data/library.json. - Au premier lancement, un utilisateur
adminest créé avec :- Mot de passe :
admin123 - Collections vides (livres, wishlist, dossiers de lecture).
- Mot de passe :
- Les images de couvertures téléchargées sont enregistrées dans
public/book-covers. - Pour un usage plus propre et robuste (prod, multiâinstances, sauvegardesâŠ), il est recommandĂ© de remplacer ce stockage fichier par une base de donnĂ©es externe (PostgreSQL, MySQL, MongoDB, etc.) et dâadapter
lib/db.tsen conséquence.
- Authentification gérée cÎté serveur via
lib/auth.tsetlib/db.ts. - Mécanismes inclus :
- Suivi des tentatives de connexion.
- Verrouillage temporaire du compte aprÚs plusieurs échecs (
MAX_ATTEMPTS, durée de verrouillage, etc.). - Délais progressifs entre les tentatives pour limiter le brute force.
- Le mot de passe peut ĂȘtre modifiĂ© via le menu ParamĂštres (voir bouton en haut Ă droite de la page dâaccueil une fois connectĂ©).
- Les clés API (par ex.
ComicVine) sont stockĂ©es dansdata/library.jsondans la sectionapiKeysde lâutilisateur admin. - Une valeur par dĂ©faut peut ĂȘtre fournie via la variable dâenvironnement
COMIC_VINE_API_KEY. - Vous pouvez les modifier via le SettingsMenu dans lâinterface.
app/: pages Next.js (login, page dâaccueil, API routes).components/: composants UI mĂ©tiers (cartes de livres, dialogues, panels, etc.).components/ui/: bibliothĂšque de composants gĂ©nĂ©riques (boutons, inputs, modalesâŠ).lib/: logique cĂŽtĂ© serveur et utilitaires (db.ts,auth.ts,image-utils.ts, etc.).data/: fichierlibrary.jsoncontenant les donnĂ©es utilisateur.types/: types TypeScript pour les livres et les dossiers de lecture.
pnpm dev: lance le serveur de développement sur le port 7003.pnpm build: build de production.pnpm start: lance le serveur de production (port 8003).pnpm lint: exécutenext lint.
- Projet conçu comme programme démo / sandbox perso.
- Le systĂšme est pensĂ© pour un seul utilisateur admin (pas de gestion multiâcomptes).
- Les donnĂ©es sont stockĂ©es en clair dans un simple fichier JSON local, ce qui nâest pas adaptĂ© pour un dĂ©ploiement pro (sĂ©curitĂ©, scalabilitĂ©, backups, concurrence dâaccĂšsâŠ).
- Pour un vrai usage production, il faut :
- brancher la persistance sur une DB externe (et éventuellement un ORM),
- ajouter une vraie gestion des utilisateurs / droits,
- renforcer la sécurité (hash des mots de passe, secrets, HTTPS, etc.),
- prĂ©voir un environnement dâhĂ©bergement (VPS, PaaS, Docker, etc.).
- Si vous supprimez
data/library.json, il sera recréé à partir des valeurs par défaut au prochain lancement (reset complet des données).
Ce projet est fourni pour un usage privé et personnel uniquement.
Vous ĂȘtes libre de lâutiliser, le cloner et le modifier pour vos besoins personnels, mais :
- Toute utilisation commerciale / revente / hĂ©bergement public de type âserviceâ est interdite sans accord explicite prĂ©alable.
- Merci de ne pas republier le projet tel quel sous un autre nom ou compte dans un but de diffusion publique ou commerciale.
Les issues et suggestions dâamĂ©lioration sont les bienvenues sur le dĂ©pĂŽt GitHub.
Forks et modifications à but strictement personnel sont autorisés.
