Une application de portfolio moderne et complète construite avec la T3 Stack (TypeScript, Next.js, tRPC, Prisma), permettant de gérer et présenter de manière professionnelle profils, expériences, formations, compétences et projets.
→ Documentation complète dans /src/app/docs/
- 📖 Guide de développement - Installation et workflow
- 🚀 Guide de déploiement - Production et hébergement
- 🏗️ Architecture - Structure et patterns
- 🗄️ Base de données - Schéma et modèles
- 🔐 Authentification - NextAuth et permissions
- 🔌 API tRPC - Routers et procédures
- 🎨 Composants UI - Interface et composants
- 📄 Gestion de CV dynamique - Création et personnalisation de CV avec différents thèmes
- 🔐 Authentification complète - NextAuth.js avec gestion des rôles et permissions
- ⚡ Administration en temps réel - Interface d'administration pour gérer tous les contenus
- 📝 Éditeur riche - Intégration de Lexical pour l'édition de contenu markdown
- 🎨 Interface moderne - Design responsive avec Tailwind CSS et shadcn/ui
- 🔍 Contrôle d'accès - Système de permissions granulaires avec AccessControl
- 📊 Gestion des données - Base de données PostgreSQL avec Prisma ORM
- 🚀 Performance optimisée - Stack Next.js 15 avec Server Components et optimisations
- Next.js 15 - Framework React avec App Router
- TypeScript - Typage statique pour JavaScript
- tRPC - API type-safe end-to-end
- Prisma - ORM moderne pour TypeScript
- PostgreSQL - Base de données relationnelle
- Prisma Client - Client de base de données type-safe
- NextAuth.js - Authentification pour Next.js
- AccessControl - Contrôle d'accès basé sur les rôles
- Argon2 - Hachage sécurisé des mots de passe
- Tailwind CSS 4 - Framework CSS utility-first
- Radix UI - Composants primitifs accessibles
- shadcn/ui - Composants UI stylisés
- Lexical - Éditeur de texte riche extensible
- Lucide React - Icônes modernes
- Sonner - Notifications toast
- ESLint - Linter JavaScript/TypeScript
- Prettier - Formatteur de code
- pnpm - Gestionnaire de paquets performant
Assurez-vous d'avoir installé :
- Node.js 18+ (télécharger)
- pnpm 10+ (installer)
- PostgreSQL 14+ (télécharger)
- Git (télécharger)
git clone https://github.com/milocartal/portfolio.git
cd portfoliopnpm installCréez un fichier .env à la racine du projet :
# Base de données
DATABASE_URL="postgresql://username:password@localhost:5432/portfolio"
# NextAuth.js
AUTH_SECRET="your-secret-key"
NEXTAUTH_URL="http://localhost:3000"
# Environnement
NODE_ENV="development"
# Générer AUTH_SECRET
# openssl rand -base64 32Option A : Base de données locale avec Docker
./start-database.sh
**Option B : Base de données existante**
Assurez-vous que PostgreSQL est installé et configuré, puis mettez à jour `DATABASE_URL` dans `.env`.
#### 5. Initialiser la base de données
Assurez-vous que PostgreSQL est installé et configuré, puis mettez à jour l'URL de connexion.
### 5. Initialiser la base de données
```bash
# Générer le client Prisma
pnpm db:generate
# (Optionnel) Peupler avec des données de test
pnpm seed
### 6. Lancer l'application
```bash
# Démarrer le serveur de développement
pnpm dev
🎉 L'application est maintenant accessible sur http://localhost:3000
Compte de test :
admin@example.com/admin123(aprèspnpm seed)
📖 Pour plus de détails : Consultez le Guide de développement complet
portfolio/
├── src/
│ ├── app/ # Next.js App Router
│ │ ├── page.tsx # Page d'accueil
│ │ ├── layout.tsx # Layout racine
│ │ ├── admin/ # Interface d'administration
│ │ ├── api/ # Routes API (NextAuth, tRPC)
│ │ ├── docs/ # 📚 Documentation complète
│ │ └── _components/ # Composants réutilisables
│ │ ├── ui/ # Composants UI (shadcn/ui)
│ │ ├── education/ # Gestion des formations
│ │ ├── experience/ # Gestion des expériences
│ │ ├── skill/ # Gestion des compétences
│ │ ├── lexical/ # Éditeur de texte riche
│ │ └── ...
│ ├── server/ # Code serveur
│ │ ├── api/ # Routers tRPC
│ │ ├── auth/ # Configuration NextAuth
│ │ └── db.ts # Client Prisma
│ ├── lib/ # Modèles et utilitaires
│ ├── utils/ # Helpers métier
│ └── trpc/ # Configuration client tRPC
- Consultation des CV publics
- Visualisation des profils, expériences et projets
Accessible via /admin (authentification requise avec rôle admin) :
| Module | Description |
|---|---|
| 👤 Profil | Informations personnelles, coordonnées |
| 💼 Expériences | Postes, entreprises, périodes |
| 🎓 Formations | Diplômes, écoles, certifications |
| 🛠️ Compétences | Technologies, niveaux, catégories |
| 🚀 Projets | Portfolio de réalisations |
| 👥 Utilisateurs | Gestion des accès et rôles |
- Sélection des éléments à inclure
- Personnalisation de l'ordre des sections
- Choix du thème de présentation
- Export et partage
pnpm dev # Démarrer le serveur de développement
pnpm turbo # Démarrer avec Turbo (expérimental, plus rapide)
pnpm build # Construire pour la production
pnpm start # Démarrer en mode productionpnpm db:generate # Générer le client Prisma
pnpm db:push # Appliquer le schéma à la DB (dev)
pnpm db:migrate # Créer/appliquer une migration (prod)
pnpm db:studio # Ouvrir Prisma Studio (interface graphique)
pnpm seed # Peupler avec des données de testpnpm lint # Vérifier les erreurs de lint
pnpm lint:fix # Corriger automatiquement
pnpm format:check # Vérifier le formatage
pnpm format:write # Formater le code- Forker le projet
- Créer une branche feature (
git checkout -b feature/nouvelle-fonctionnalite) - Commiter les changements (
git commit -m 'Ajout nouvelle fonctionnalité') - Pousser vers la branche (
git push origin feature/nouvelle-fonctionnalite) - Ouvrir une Pull Request
Ce dépôt est public mais n’est pas open source.
Sauf accord écrit, tous droits sont réservés. Aucune réutilisation,
modification, redistribution ou exploitation commerciale n’est autorisée.
- But du dépôt : transparence et démonstration du projet
Portfolio. - Contributions : ouvrez une issue pour les bugs/retours. Les pull requests externes peuvent être fermées sans examen.
- Composants tiers : les dépendances sont couvertes par leurs propres licences (voir chaque paquet).
- Lire le code et consulter l’historique des commits.
- Ouvrir des issues pour signaler un problème ou proposer une idée.
- Réutiliser le code dans un autre projet, public ou privé.
- Redistribuer, publier des copies ou proposer des builds.
- Déployer ce code en production ou vendre un service basé dessus.
Pour toute demande de licence ou d’exception : milo.cartal.pro@gmail.com.
Référence : voir le fichier LICENSE.
Pour toute question ou problème :
- Ouvrir une issue
- Consulter la documentation T3 Stack
Développé avec ❤️ en utilisant la T3 Stack