Navigation
Documentation
Portfolio Iheb Ben Ismail
Une documentation rapide pour comprendre le site, le Studio CMS, les API, les analytics et le déploiement.
Démarrage
Commandes de base pour lancer ou vérifier le projet.
pnpm installpnpm build{
"build": "ok",
"routes": ["/", "/projets", "/docs", "/admin"]
}Stack
Le site utilise une stack simple : Next.js pour l’application, PostgreSQL pour les données.
Frontend
Backend
Architecture
Les dossiers sont séparés par responsabilité.
site-portfolio/
├─ app/ pages + routes API
├─ components/ interface réutilisable
├─ lib/ logique serveur
├─ scripts/ migrations SQL
├─ public/ images + fichiers
└─ app/docs/ documentation| app/ | pages publiques, admin et API |
| components/ | blocs d'interface |
| lib/ | base de données, validations, helpers |
| scripts/ | migrations SQL |
Studio CMS
Le Studio CMS permet de gérer les projets sans modifier le code.
Actions
- Créer un projet
- Modifier une étude de cas
- Ajouter des images
- Publier ou archiver
https://benismai.malvu.fr/adminNote
Projets
Les projets sont triés par date, du plus récent au plus ancien.
Types
Champs
{
"title": "SAE101",
"category": "BUT",
"semester": "Semestre 1",
"project_date": "2024-09-01"
}Images
Les images peuvent être affichées en cover, contain ou auto.
Modes
- Cover : remplit le cadre.
- Contain : montre toute l’image.
- Auto : mode propre par défaut.
Astuce
API projets
Récupère les projets publics publiés.
/api/projectsListe des projets visibles sur le portfolio.
{
"ok": true,
"projects": [...]
}curl https://benismai.malvu.fr/api/projects/api/projects/[slug]Détail d'un projet.
{
"title": "SAE101",
"category": "BUT"
}API admin
Les routes admin servent au Studio CMS. Elles sont protégées.
/api/admin/projectsListe admin.
/api/admin/projectsCréation projet.
/api/admin/projectsArchivage ou suppression.
/api/admin/analytics/summaryRésumé analytics.
Attention
<TOKEN_ADMIN>, <DATABASE_URL> ou un mot de passe.Analytics
Statistiques anonymisées pour comprendre les visites et améliorer l’expérience.
Suivi
- pages visitées
- clics principaux
- scroll moyen
- appareil / navigateur
Confidentialité
- IP hashée
- pas de champ formulaire
- pas de Google Analytics
./scripts/apply-migration.sh scripts/018-analytics-visits.sql./scripts/apply-migration.sh scripts/019-analytics-behavior-events.sqlBase de données
Les migrations SQL ajoutent ou mettent à jour les tables.
./scripts/apply-migration.sh scripts/014-iheb-but-alternance-projects.sql./scripts/apply-migration.sh scripts/017-project-preview-image-fit.sqlpsql "$DATABASE_URL" -c "SELECT COUNT(*) FROM projects;"Déploiement
Commandes utiles pour mettre à jour le site en production.
pnpm buildsystemctl restart site-portfoliosystemctl status site-portfolio --no-pagerjournalctl -u site-portfolio -fSécurité
Les secrets restent côté serveur.
À faire
- session admin
- routes protégées
- logs d’échec
- tokens hors frontend
À éviter
- DATABASE_URL dans le client
- token en NEXT_PUBLIC
- IP brute en analytics
Dépannage
Les erreurs fréquentes se vérifient avec les logs et l’environnement.
Projets non chargés
journalctl -u site-portfolio -n 80 --no-pagerrole root does not exist
set -a
source /etc/site-portfolio.env
set +a
psql "$DATABASE_URL"{
"database": "reachable",
"service": "site-portfolio"
}Suite
Voir les projets publics du portfolio.