Renamed from CLAUDE_PROJECT_OVERVIEW.md to follow standard naming convention for automatic recognition. Added section documenting code standards and work preferences. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
12 KiB
Design to Pack - Vue d'ensemble du projet
Plateforme de gestion de projets de création de flacons de parfum pour Pochet du Courval.
Stack technique
| Couche | Technologies |
|---|---|
| Backend | Kirby CMS 4 (PHP), flat-file database |
| Frontend | Vue 3 + Vite 7, Pinia, Vue Router 4, PrimeVue 4.0 |
| @vue-pdf-viewer 2.5 | |
| 3D | Three.js (vue interactive 360) |
| Déploiement | GitLab CI/CD, rsync vers serveur |
Structure du projet
design-to-pack/
├── src/ # App Vue.js
│ ├── assets/css/ # Styles globaux
│ ├── components/ # Composants réutilisables
│ │ ├── comments/ # Système de commentaires
│ │ ├── design-to-light/ # Feature DTL
│ │ ├── inspirations/ # Galerie inspirations
│ │ ├── notifications/ # Notifications
│ │ └── project/ # Composants projet
│ │ ├── cards/ # Cartes par type d'étape
│ │ ├── brief/ # Brief client (moodboard)
│ │ └── virtual-sample/ # Échantillon virtuel 3D
│ ├── router/ # Vue Router
│ ├── stores/ # Pinia stores
│ ├── utils/ # Utilitaires
│ ├── views/ # Pages principales
│ ├── main.js # Point d'entrée
│ └── App.vue # Composant racine
│
├── public/ # Kirby CMS
│ ├── content/ # Données (flat-file)
│ │ ├── projects/ # Pages projets
│ │ ├── clients/ # Pages clients
│ │ ├── design-to-light/ # Page DTL
│ │ └── inspirations/ # Galerie inspirations
│ ├── site/
│ │ ├── blueprints/ # Schémas de données
│ │ │ ├── pages/ # Blueprints des pages
│ │ │ ├── users/ # Blueprints utilisateurs
│ │ │ └── files/ # Blueprints fichiers
│ │ ├── templates/ # Templates PHP + JSON
│ │ ├── controllers/ # Contrôleurs
│ │ ├── models/ # Modèles PHP (Project, Client)
│ │ ├── plugins/ # Plugins custom
│ │ ├── snippets/ # Fragments réutilisables
│ │ └── config/ # Configuration + routes
│ └── media/ # Fichiers uploadés
│
├── package.json
├── vite.config.js
└── .gitlab-ci.yml
Plugins Kirby custom
1. classes/ - Classes partagées
Classes de données utilisées par comments et notifications.
| Classe | Rôle |
|---|---|
Author |
Auteur (name, email, uuid, role) |
Position |
Position x/y + pageIndex (marqueurs sur PDF) |
Location |
Localisation (page, file, parent) |
PageDetails |
Détails de page |
FileDetails |
Détails de fichier |
ProjectDetails |
Détails de projet |
2. comments/ - Système de commentaires
Plugin adrienpayet/kirby4-comments
Classes:
BaseComment- Classe de baseComment- Commentaire avec repliesReply- Réponse à un commentaire
Routes:
| Route | Fichier | Description |
|---|---|---|
POST /create-comment.json |
routes/create.php |
Créer un commentaire |
POST /update-comment.json |
routes/update.php |
Modifier un commentaire |
POST /delete-comment.json |
routes/delete.php |
Supprimer un commentaire |
POST /reply-comment.json |
routes/reply.php |
Répondre à un commentaire |
Stockage: Les commentaires sont stockés en YAML dans les métadonnées des fichiers.
3. notifications/ - Système de notifications
Plugin adrienpayet/pdc-notifications
Classes:
Notification- Notification (type, location, text, author, date, readby[])NotificationsPage- Base pour pages avec notifications (extends Page)
Méthodes NotificationsPage:
createNotification($data)- Créer une notificationdeleteNotification($id)- Supprimer une notificationreadNotification($id)- Marquer comme lue (ajoute userUuid à readby)readAllNotifications()- Tout marquer comme lu
Routes:
| Route | Description |
|---|---|
POST /read-notification.json |
Marquer une notification comme lue |
POST /read-all-notifications.json |
Tout marquer comme lu |
4. user-projects/ - Projets autorisés par utilisateur
Plugin adrienpayet/pdc-authorized-projects
User methods:
currentProjects()- Projets actifs (listed) accessibles à l'utilisateurarchivedProjects()- Projets archivés (unlisted) accessibles
Logique: Admin = tous les projets, autres = seulement projets assignés.
5. helpers/ - Fonctions utilitaires
| Fonction | Description |
|---|---|
getFileData($file, $preserveQuality) |
Normalise les données fichier (thumb webp, cover, comments) |
getGlobalEvaluation($numberedGrade) |
Convertit note numérique en lettre A-E avec mention |
processDTLProposals($page) |
Traite les propositions Design to Light |
refreshProjectStepsCache($project, $steps) |
Rafraîchit le cache des étapes |
6. icons/ - Icônes custom panel
Plugin adrienpayet/pochet-icons - Icônes personnalisées pour le panel Kirby.
7. kql/ - Kirby Query Language
Plugin externe pour requêtes type GraphQL.
8. refresh-cache-button/ - Bouton refresh cache
Plugin externe ajoutant un bouton de rafraîchissement du cache dans le panel.
Modèles de données
Utilisateurs (3 rôles)
| Rôle | Accès |
|---|---|
admin |
Tous les projets, panel complet |
pochet |
Projets assignés uniquement, panel limité |
client |
Ses projets uniquement, pas de panel |
Projet (ProjectPage)
Hérite de NotificationsPage.
Champs principaux:
title,status(draft/listed/unlisted)client- Lien vers ClientPagecurrentStep- Étape couranteisDTLEnabled- Design to Light activé
Étapes (children):
client-brief- Brief client (PDF + moodboard)proposal- Proposition commerciale (PDFs)extended-brief- Brief étenduindustrial-ideation- Idéation industrielle (optionnel)virtual-sample- Échantillon virtuel (pistes dynamiques + statiques)physical-sample- Échantillon physique (médias)
Client (ClientPage)
logo,titleprojects()- Tous les projetsprojectsListed()/projectsUnlisted()- Filtres par statut
Stores Pinia
| Store | Fichier | Rôle |
|---|---|---|
api |
stores/api.js |
Communication API (fetch, post, comments, notifications) |
user |
stores/user.js |
Utilisateur courant, permissions |
page |
stores/page.js |
Données de la page courante |
projects |
stores/projects.js |
Liste des projets |
dialog |
stores/dialog.js |
État des modales (contenu, fichier, commentaires) |
brief |
stores/brief.js |
Gestion du brief client |
designToLight |
stores/designToLight.js |
Feature DTL |
notifications |
stores/notifications.js |
Notifications non lues |
virtualSample |
stores/virtualSample.js |
État échantillon virtuel |
addImagesModal |
stores/addImagesModal.js |
Modal ajout images |
project |
stores/project.js |
Utilitaires projet |
Routes Vue
| Path | Vue | Description |
|---|---|---|
/ |
Home.vue |
Liste des projets |
/login |
Login.vue |
Authentification |
/account |
Account.vue |
Compte utilisateur |
/notifications |
Notifications.vue |
Centre de notifications |
/inspirations |
Inspirations.vue |
Galerie d'inspirations |
/design-to-light |
DesignToLight.vue |
Feature DTL |
/projects/:id |
Kanban.vue |
Détail projet (kanban) |
/projects/:id/client-brief |
Brief.vue |
Brief client |
/projects/:id/extended-brief |
Brief.vue |
Brief étendu |
API Endpoints
Authentification
POST /login.json- Connexion (email, password)GET /logout- Déconnexion
Pages (JSON)
GET /{uri}.json- Données page + user
Commentaires
POST /create-comment.jsonPOST /update-comment.jsonPOST /delete-comment.jsonPOST /reply-comment.json
Notifications
POST /read-notification.jsonPOST /read-all-notifications.json
Fichiers
POST /upload-pdf.jsonPOST /upload-images.jsonPOST /remove-file.json
Actions
POST /save-page.jsonPOST /save-file.jsonPOST /validate-brief.jsonPOST /toggle-favorite.jsonPOST /request-project-creation.jsonPOST /request-optimization-appointment.json
Design to Light (DTL)
Système d'évaluation avancée des designs de flacons.
Notation:
- Note globale : A (8-10), B (6-8), C (4-6), D (2-4), E (0-2)
- Indicateurs : Design global, Bague, Épaule, Colonnes & Arêtes, Pied, Fond de Verre
- Position : Complexité, Poids
Propositions DTL liées à:
- Proposition commerciale (PDF)
- Idéation industrielle (PDF)
- Échantillon virtuel - piste dynamique
- Échantillon virtuel - piste statique
Fichiers clés à connaître
Frontend
src/main.js- Init appsrc/router/router.js- Guard + setupsrc/router/routes.js- Définition routessrc/stores/api.js- Toute la comm APIsrc/components/Menu.vue- Navigation latéralesrc/components/project/DialogWrapper.vue- Wrapper modales
Backend
public/site/config/config.php- Routes, hooks, configpublic/site/controllers/site.php- Contrôleur principalpublic/site/models/project.php- Logique projetpublic/site/plugins/helpers/index.php- Fonctions utilitairespublic/site/blueprints/pages/project.yml- Structure projet
Développement local
# Backend
cd public
composer install
php -S localhost:8888 kirby/router.php
# Frontend
npm install
npm run dev
Build
npm run build # Production
npm run build:preprod # Staging (avec sourcemaps)
Notes importantes
- Cache: Les étapes projet sont cachées. Invalidation automatique via hooks Kirby.
- Permissions: Filtrées côté serveur selon le rôle utilisateur.
- Commentaires: Positionnés en % (x, y) + pageIndex pour les PDFs multi-pages.
- Notifications: Stockées par projet, trackées par user UUID dans
readby[]. - Virtual Sample: Pistes dynamiques = pages enfants, pistes statiques = fichiers.
Préférences de code et standards
Principes généraux
Clarté avant tout
- Privilégier des noms de variables et fonctions explicites
- Éviter les commentaires sauf en cas de nécessité absolue
- Le code doit être auto-documenté par des noms clairs
Organisation du code
- Factoriser le code en petites fonctions bien nommées
- Éviter les blocs de code longs et complexes dans les hooks de lifecycle
- Une fonction = une responsabilité claire
Ce qui est considéré comme "bricolage" (à éviter)
- Paramètres d'URL pour gérer des états applicatifs
- Commentaires qui expliquent ce que fait le code au lieu de nommer correctement
- Abstractions prématurées ou sur-ingénierie
Style de communication
Feedback direct
- Pas de politesses inutiles
- Dire immédiatement si quelque chose ne va pas
- Tester tout de suite et signaler les problèmes
Qualité attendue
- Standards élevés sur la qualité du code
- Pas de code médiocre accepté
- Exigence de clarté et d'explicité constante