Une application web full stack moderne pour la gestion des étiquettes d'expédition, développée avec Next.js 15, TypeScript, Tailwind CSS, Prisma et PostgreSQL.
- Authentification sécurisée avec NextAuth.js
- Gestion complète des clients (CRUD)
- Génération d'étiquettes PDF imprimables
- Historique des étiquettes générées
- Interface moderne avec shadcn/ui
- Base de données PostgreSQL avec Prisma ORM
- Frontend: Next.js 15 (App Router), React Server Components, TypeScript, TailwindCSS
- Backend: API Routes + Server Actions (Next.js)
- Base de données: PostgreSQL avec Prisma ORM
- Authentification: NextAuth.js avec Credentials Provider
- UI: shadcn/ui (composants accessibles et modernes)
- PDF: pdf-lib pour la génération d'étiquettes
- Déploiement: Vercel + Neon PostgreSQL
- Node.js 18+
- PostgreSQL (local ou Neon)
- npm ou yarn
-
Cloner le projet
git clone <repository-url> cd import-export-app
-
Installer les dépendances
npm install
-
Configurer les variables d'environnement Créez un fichier
.env.localà la racine du projet :# Database DATABASE_URL="postgresql://username:password@localhost:5432/import_export_db?schema=public" # NextAuth NEXTAUTH_URL="http://localhost:3000" NEXTAUTH_SECRET="your-secret-key-here" # App NEXT_PUBLIC_APP_URL="http://localhost:3000"
-
Configurer la base de données
# Générer le client Prisma npx prisma generate # Appliquer les migrations npx prisma migrate dev # (Optionnel) Seeder la base de données npx prisma db seed
-
Lancer l'application
npm run dev
L'application sera accessible sur http://localhost:3000
- Accédez à
/auth/signup - Remplissez le formulaire d'inscription
- Connectez-vous avec vos identifiants
- Accédez à
/dashboard/clients - Cliquez sur "Nouveau client" pour ajouter un client
- Remplissez les informations requises (nom, adresse, pays)
- Sauvegardez le client
- Ouvrez la fiche d'un client
- Cliquez sur "Générer une étiquette"
- Le PDF sera automatiquement téléchargé
- L'étiquette contient :
- Logo de l'entreprise
- Informations du client
- Numéro de suivi unique
- Code-barres simulé
- Date de génération
- Accédez à
/dashboard/history - Consultez toutes les étiquettes générées
- Recherchez par numéro de suivi ou client
- Téléchargez ou réimprimez les étiquettes
src/
├── app/ # App Router (Next.js 15)
│ ├── api/ # API Routes
│ │ ├── auth/ # Authentification
│ │ ├── clients/ # Gestion des clients
│ │ └── labels/ # Génération d'étiquettes
│ ├── auth/ # Pages d'authentification
│ ├── dashboard/ # Interface principale
│ └── globals.css # Styles globaux
├── components/ # Composants React
│ └── ui/ # Composants shadcn/ui
├── lib/ # Utilitaires
│ ├── auth.ts # Configuration NextAuth
│ ├── prisma.ts # Client Prisma
│ ├── pdf.ts # Génération PDF
│ └── password.ts # Hachage des mots de passe
└── types/ # Types TypeScript
id: Identifiant uniquename: Nom completemail: Adresse email (unique)password: Mot de passe hachérole: Rôle utilisateur (USER/ADMIN)
id: Identifiant uniquename: Nom du clientcompany: Société (optionnel)address: Adresse complètecountry: Paysphone: Téléphone (optionnel)email: Email (optionnel)notes: Notes (optionnel)
id: Identifiant uniquetrackingId: Numéro de suivi uniqueclientId: Référence vers le clientuserId: Référence vers l'utilisateurpdfUrl: URL du PDF (optionnel)
npm run dev # Lancer en développement
npm run build # Build de production
npm run start # Lancer en production
npm run lint # Linter ESLint
npm run type-check # Vérification TypeScript- Connecter le repository à Vercel
- Configurer les variables d'environnement
- Déployer automatiquement
DATABASE_URL="postgresql://user:password@host:port/database"
NEXTAUTH_URL="https://your-domain.vercel.app"
NEXTAUTH_SECRET="your-production-secret"
NEXT_PUBLIC_APP_URL="https://your-domain.vercel.app"- Fork le projet
- Créer une branche feature (
git checkout -b feature/AmazingFeature) - Commit les changements (
git commit -m 'Add some AmazingFeature') - Push vers la branche (
git push origin feature/AmazingFeature) - Ouvrir une Pull Request
Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.
Pour toute question ou problème :
- Ouvrir une issue sur GitHub
- Contacter l'équipe de développement
Développé avec ❤️ pour simplifier la gestion des étiquettes d'expédition