Le backoffice n'avait qu'une carte étroite par archive : un récit détaillé se
tapait dans trois lignes, les photos ne pouvaient être ajoutées qu'après
publication, une par une, et un fichier de plus de 900 Ko était simplement
refusé — « compressez-la d'abord ».
- **Fenêtre d'édition** : titre, date, lieu, rencontre liée, récit (champ de
260 px, redimensionnable), participants et photos au même endroit, création
comprise. Glisser-déposer multiple, réordonnancement, légendes, suppression.
- **Compression dans le navigateur** : `src/lib/image-compress.ts` (pur,
testé) porte seuils et paliers, `image-compress-dom.ts` le décodage
(orientation EXIF comprise) et l'encodage. On ne descend en qualité que le
nécessaire, une image déjà dans le budget n'est pas réencodée et la
transparence n'est jamais aplatie sur du noir. `ImageField` et le dépôt de
promotion en profitent aussi : plus aucun envoi refusé pour son poids.
- **Actions** : `savePastMeeting` (création + mise à jour, refus renvoyés au
lieu d'être levés, rencontre liée vérifiée), `addPastMeetingPhotos` (envois
groupés sous la limite des server actions) et `savePastMeetingPhotos`
(ordre, légendes, suppressions, protégée par un drapeau `syncPhotos`).
- **La fenêtre attend le rafraîchissement avant de se refermer** : sans cela,
rouvrir la fiche affichait l'état d'avant, la rencontre liée revenant à
« Aucune » alors qu'elle avait bien été enregistrée.
- **Site public** : cartes de hauteur fixe quel que soit le texte ou le nombre
de photos, et fenêtre de lecture avec le récit complet (sauts de ligne
conservés) et la galerie entière — flèches, vignettes, clavier.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013GHFd8bXepDKhQ7kf3WvrL
- Avatar logo de la fiche adherent : <img> object-fit contain centre,
cadre a overflow hidden -> plus de debordement quel que soit le ratio
- ImageField : prop fit (cover|contain). Champs logo en contain (apercu
centre, non etire) dans l'edition fiche et l'espace adherent
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Champs upload image d'entete (coverUrl) et logo (logoUrl) dans le
formulaire d'edition d'un adherent (composant ImageField, fichier ->
data-URL via hidden input)
- updateMember persiste desormais coverUrl + logoUrl, et revalide la
fiche publique /adherents/[id]
- serverActions.bodySizeLimit a 4mb (les data-URL depassent la limite
par defaut de 1mb)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>