RetourSecrets masques

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.

Installation
pnpm install
Build
pnpm build
Résultat attendu
{
  "build": "ok",
  "routes": ["/", "/projets", "/docs", "/admin"]
}

Stack

Le site utilise une stack simple : Next.js pour l’application, PostgreSQL pour les données.

Frontend

Next.js
React
TypeScript
Tailwind CSS

Backend

API routes
PostgreSQL
SQL migrations
systemd

Architecture

Les dossiers sont séparés par responsabilité.

Arborescence
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
Accès
https://benismai.malvu.fr/admin

Note

Le CMS est protégé par une session admin. Les routes sensibles ne sont pas publiques.

Projets

Les projets sont triés par date, du plus récent au plus ancien.

Types

BUT
Alternance
Perso

Champs

title
slug
category
semester
project_date
tags
stack
Projet exemple
{
  "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

Pour une affiche ou un schéma avec du texte, utiliser Contain.

API projets

Récupère les projets publics publiés.

GET/api/projects

Liste des projets visibles sur le portfolio.

Réponse exemple
{
  "ok": true,
  "projects": [...]
}
Commande
curl https://benismai.malvu.fr/api/projects
GET/api/projects/[slug]

Détail d'un projet.

Réponse exemple
{
  "title": "SAE101",
  "category": "BUT"
}

API admin

Les routes admin servent au Studio CMS. Elles sont protégées.

GET/api/admin/projects

Liste admin.

POST/api/admin/projects

Création projet.

DELETE/api/admin/projects

Archivage ou suppression.

GET/api/admin/analytics/summary

Résumé analytics.

Attention

Ne jamais exposer <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
Table visites
./scripts/apply-migration.sh scripts/018-analytics-visits.sql
Table événements
./scripts/apply-migration.sh scripts/019-analytics-behavior-events.sql

Base de données

Les migrations SQL ajoutent ou mettent à jour les tables.

Ajouter des projets
./scripts/apply-migration.sh scripts/014-iheb-but-alternance-projects.sql
Mode image
./scripts/apply-migration.sh scripts/017-project-preview-image-fit.sql
Vérifier
psql "$DATABASE_URL" -c "SELECT COUNT(*) FROM projects;"

Déploiement

Commandes utiles pour mettre à jour le site en production.

Build
pnpm build
Restart
systemctl restart site-portfolio
Status
systemctl status site-portfolio --no-pager
Logs
journalctl -u site-portfolio -f

Sé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

Logs
journalctl -u site-portfolio -n 80 --no-pager

role root does not exist

Charger DATABASE_URL
set -a
source /etc/site-portfolio.env
set +a
psql "$DATABASE_URL"
Réponse health
{
  "database": "reachable",
  "service": "site-portfolio"
}

Suite

Voir les projets publics du portfolio.

Projets
Documentation | Portfolio Iheb Ben Ismail