Commit Graph
448 Commits
Author SHA1 Message Date
IliesAllaliandClaude Opus 5.5 0132ecb342 Envois de la famille sans doublon : en-tête Idempotency-Key
Sur un réseau faible, une proposition, un souvenir, une photo posée sur l'arbre ou un moment pouvait être
créé deux fois : la réponse se perdait (délai dépassé), la personne renvoyait, le serveur recréait tout.

- Navigateur (api/client.js) : un envoi qui n'a pas abouti garde sa clé, et le même envoi refait (même
  adresse, même contenu) la réutilise. Une réussite libère la clé.
- Serveur (lib/idempotency.ts) : sur les quatre routes de création, une clé déjà vue par la même personne
  renvoie la réponse du premier envoi ; deux essais simultanés n'en traitent qu'un ; un échec n'est pas gardé.
  En mémoire, 24 h, 5 000 clés au plus.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 15:14:32 +01:00
IliesAllali b866b36ca9 Merge pull request #173 from IliesAllali/feat/visages-discrets
Visages sur la photo : rien par défaut, ronds fins à la demande
2026-10-27 15:05:36 +01:00
IliesAllali e1b25265dd Merge pull request #172 from IliesAllali/feat/annuler-moments-medias
Souvenirs et moments supprimés : Annuler, comme pour une personne
2026-10-27 14:56:10 +01:00
IliesAllali a0afcfeafe Merge pull request #171 from IliesAllali/feat/mouvement-souvenir
Souvenir : grandit depuis sa vignette, et la visionneuse respecte les mouvements réduits
2026-10-27 14:29:16 +01:00
IliesAllaliandClaude Opus 5.5 2aab008766 Visages sur la photo : rien par défaut, ronds fins à la demande
- Les ronds des personnes identifiées ne restent plus posés sur les visages. Ils apparaissent au survol de la photo
  (ordinateur), quand on touche la photo (téléphone, un second toucher les cache), ou pour une seule personne quand
  on survole ou focalise son prénom sous la photo. Toujours visibles pendant l'identification.
- Rond plus large (34 px) et plus fin (1,5 px) : il entoure le visage au lieu de le couvrir.
- Sur téléphone, les prénoms ne s'affichent plus en permanence par-dessus la photo.

Planche validée par Patch le 27/10 (option A) : _bmad-output/parenthese/motion/2026-10-27-visages/

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 14:26:08 +01:00
IliesAllaliandClaude Opus 5.5 dbc6338f9b Souvenirs et moments supprimés : Annuler, comme pour une personne
Un hook commun (hooks/useUndoable.js) porte les trois suppressions annulables : bandeau 6 s,
Ctrl+Z, requête envoyée à la fin du délai ou à la fermeture de la page.
- Souvenir (gestionnaire de souvenirs) : il n'y avait aucune confirmation, la suppression était immédiate.
- Moment (onglet Vie) : plus de « Supprimer / Garder ».

Corrige deux défauts de #169 :
- Les tableaux du graphe étaient mutés en place (splice, push), alors que les index par personne
  (getPersonById, getPersonMedias) ne se reconstruisent qu'au remplacement du tableau. Nouveau
  replaceGraph() dans mockData, utilisé pour la suppression et l'ajout d'une personne en démo.
- Le rechargement après l'envoi vidait la sélection : une fiche ouverte pendant le délai se fermait.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 14:16:30 +01:00
IliesAllaliandClaude Opus 5.5 913de99f9e Souvenir : grandit depuis sa vignette à l'ouverture, et la visionneuse respecte les mouvements réduits
- Une vignette de la fiche touchée est retenue un court instant (utils/openOrigin.js) ; la visionneuse part de là,
  même largeur, et grandit jusqu'à sa place en 280 ms, transform seul, sans fondu. Le point de départ suit
  l'ancrage de la fenêtre : centre sur ordinateur, bord bas sur téléphone (pz-overlay en place-items: end).
- Ouverte autrement (photo de l'arbre, liste), la visionneuse ne change pas. Fermeture inchangée, d'un coup.
- Mouvements réduits : la carte n'avait pas la classe .pz-modal et jouait sa montée quand même ; elle s'affiche
  désormais d'un coup.

Planche validée par Patch le 27/10 : _bmad-output/parenthese/motion/2026-10-27-souvenir/

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 13:42:58 +01:00
IliesAllali 0b429e78a9 Merge pull request #169 from IliesAllali/feat/annuler-suppressions
Suppression d'une personne annulable (Annuler à la place de la confirmation)
2026-10-27 13:37:25 +01:00
IliesAllali 00b880708d Merge pull request #170 from IliesAllali/feat/mouvement-fiche
Fiche : apparaît d'un coup sur ordinateur, feuille plus vive, résistance vers le haut, coins continus
2026-10-27 13:37:13 +01:00
IliesAllaliandClaude Opus 5.5 3a18ac9eab Fiche : apparaît d'un coup sur ordinateur, feuille en 240 ms, résistance vers le haut, coins continus
- Ordinateur : plus d'entrée animée (fondu et flou de 260 ms) ; on ouvre une fiche des dizaines de fois par visite.
- Téléphone : la feuille monte en 240 ms au lieu de 400 ; en mouvements réduits, fondu court seulement sur téléphone.
- Geste des feuilles (fiche et menu de la barre) : tirée vers le haut, la feuille cède de moins en moins (40 px au plus)
  et revient au lâcher, au lieu de buter net. Logique pure sheetOffset, testée. Une ombre pleine comble le dessous.
- Coins continus (corner-shape: squircle) sur la fiche, le portrait et les vignettes, seulement là où le navigateur
  les dessine ; ailleurs rien ne change.

Planche validée par Patch le 27/10 : _bmad-output/parenthese/motion/2026-10-27-fiche/

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 12:57:34 +01:00
IliesAllaliandClaude Opus 5.5 a2a2a81a12 Suppression d'une personne annulable : Annuler à la place de la confirmation
La personne disparaît tout de suite et un bandeau propose « Annuler » (ou Ctrl+Z) pendant 6 s.
La requête ne part qu'à la fin du délai, ou à la fermeture de la page (fetch keepalive).
Un rechargement de l'arbre pendant le délai ne fait pas revenir la personne.
Démo : même bandeau, retour à l'état d'avant.

Corrige au passage la recherche, qui gardait des résultats périmés après un ajout ou une
suppression (le tableau des personnes est modifié sur place).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 12:15:17 +01:00
IliesAllaliandClaude Opus 5.5 59d3c89b1c 1.5.4 : changelog
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v1.5.4
2026-10-26 16:24:53 +01:00
IliesAllaliandClaude Opus 5.5 42e4ed63bb Lien d'un onglet de famille : ?famille=<charnière> ouvre l'arbre sur cette famille, et le lien de « La famille participe » suit l'onglet ouvert (#167)
- Galaxy : l'onglet du lien s'ouvre dès que l'arbre et ses onglets sont connus, et de nouveau si la personne de départ arrive après (visiteur), tant qu'on n'a pas changé d'onglet soi-même ; onglets coupés dans ce navigateur, l'arbre entier s'ouvre sur la charnière
- App : l'adresse de la page porte l'onglet ouvert, le lien à envoyer aussi, avec le nom de la famille dans le titre
- Même mot de passe, même accès : le lien choisit l'onglet d'arrivée, il ne restreint rien (Patch, 26/10)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 16:21:36 +01:00
IliesAllaliandClaude Opus 5.5 b9f301619b 1.5.3 : changelog
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v1.5.3
2026-10-26 14:19:20 +01:00
IliesAllaliandClaude Opus 5.5 20aded7ee0 Frontend : zod 4.6.7 (faille haute < 4.6.6), via eslint-plugin-react-hooks, fichier de verrouillage seul (#166)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 14:15:47 +01:00
IliesAllaliandClaude Opus 5.5 3aad835908 Tailwind 4 : app et landing, rien ne bouge à l'écran (#165)
* Tailwind 4 (app) : plugin Vite, remise à zéro de la v3 gardée (main sur les boutons, placeholder, bordure grise), thème et utilitaires inutilisés retirés

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Tailwind 4 (landing) : plugin Vite comme l'app, remise à zéro de la v3 gardée, thème inutilisé retiré ; marge gauche du graphe du hero retirée, écrasée par lg:mx-0 en v3 et devenue visible en v4

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 14:06:33 +01:00
IliesAllaliandClaude Opus 5.5 1af0e6842e Déploiement : le contrôle des dépendances backend ne charge plus @prisma/client, qui n'existe qu'après generate depuis Prisma 7
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 14:03:06 +01:00
IliesAllaliandClaude Opus 5.5 cc01059c47 Prisma 7 : pilote pg, client généré, prisma.config.ts (#164)
* Prisma 7 : client généré dans src/generated, pilote pg, prisma.config.ts

- générateur prisma-client (ESM, extension .js), compilé dans dist : plus de node_modules/.prisma à copier dans les images
- @prisma/adapter-pg, délai de connexion de 5 s comme le moteur de Prisma 6
- prisma.config.ts : adresse de la base et .env pour le CLI, sans dépendre de prisma/config à l'exécution (CLI à part dans les images)
- CI : migrate diff --from-config-datasource --to-schema
- deploy.sh : arrêt avant installation si Node est trop vieux pour Prisma 7
- remplace les PR Dependabot #135 et #137

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Prisma 7 : import du client généré dans token-revocation (#163)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 13:58:42 +01:00
IliesAllali ef503c570d Comptes : une déconnexion survit au redémarrage de l'API (#163)
* Comptes : une déconnexion reste valable après un redémarrage de l'API (sessions fermées gardées en base)

* Déconnexion durable : sans rechargement des sessions fermées, l'API ne démarre pas ; modèle remonté au-dessus du commentaire des photos
2026-10-26 13:24:06 +01:00
IliesAllaliandClaude Opus 5.5 f1b4ad8db2 Compte à mot de passe : relier le fournisseur OIDC soi-même (#161)
* OIDC : un compte à mot de passe relie lui-même son identité du fournisseur (ticket à usage unique), pour passer une instance en PASSWORD_LOGIN=false sans l'enfermer dehors

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Compte : « Se connecter aussi avec … » relie le fournisseur à un compte à mot de passe

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* README : relier un compte à mot de passe avant PASSWORD_LOGIN=false

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 12:34:28 +01:00
IliesAllali 856a80d111 Souvenirs : envoi en flux et par plages (Range), pour les vidéos sur Safari (#162)
* Souvenirs : envoi en flux et par plages (Range, 206), pour Safari ; le fichier ne passe plus en entier en mémoire

* Range : fichier vide refusé en 416 ; test d'un souvenir en attente demandé par morceaux
2026-10-26 12:33:24 +01:00
IliesAllali 3bfacc5b1a Déploiement : commande forcée pour la clé de GitHub, qui ne peut plus que déployer un commit de main 2026-10-26 12:24:54 +01:00
IliesAllali 124ceb1c3e Sécurité : bcrypt natif hors de la boucle de l'API ; un souvenir en attente ne se lit que par le gestionnaire et son auteur (#160) 2026-10-26 12:10:55 +01:00
IliesAllaliandClaude Opus 5.5 00aff350f1 1.5.2 : changelog, #154 et #156 ajoutées
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v1.5.2
2026-10-26 11:44:30 +01:00
IliesAllali dcc5fe74f7 1.5.2 : changelog 2026-10-26 11:38:49 +01:00
IliesAllali a6b37bca22 Merge pull request #159 from IliesAllali/fix/noms-monde
Noms en chinois, arabe, hébreu : une seule initiale, lieu et surnom isolés du sens de la ligne
2026-10-26 11:33:43 +01:00
IliesAllali bb6ec09fd1 Premiers visages : import de initialsOf, la fonction locale s'appelait elle-même ; test du panneau sans aperçu 2026-10-26 11:28:47 +01:00
IliesAllali 0f06f5a9f0 Merge pull request #157 from IliesAllali/fix/badge-conflit
Propositions : étiquette posée sur le bord de la carte, « À vérifier » à la place de l'action, bulle du compteur ronde
2026-10-26 11:24:17 +01:00
IliesAllali bc5ab7899e Merge pull request #158 from IliesAllali/fix/dates-region
Dates : ordre et format de la région du navigateur, mois en lettres (#152)
2026-10-26 11:23:16 +01:00
IliesAllali 01ed08d26f Noms en chinois, arabe, hébreu : une seule initiale, lieu et surnom isolés du sens de la ligne 2026-10-26 11:20:32 +01:00
IliesAllali 5b21021aca Propositions : une suppression en conflit garde son mot (« Suppression, à vérifier ») ; « suggestion » en anglais 2026-10-26 11:18:27 +01:00
IliesAllali b6eaa6da78 Dates : marques diacritiques retirées par \p{M}, lisible 2026-10-26 11:18:00 +01:00
dependabot[bot] cb1dfb39a6 build(deps): bump fast-uri in /backend (#155)
Bumps  and [fast-uri](https://github.com/fastify/fast-uri). These dependencies needed to be updated together.

Updates `fast-uri` from 3.1.8 to 3.1.9
- [Release notes](https://github.com/fastify/fast-uri/releases)
- [Commits](https://github.com/fastify/fast-uri/compare/v3.1.8...v3.1.9)

Updates `fast-uri` from 4.2.1 to 4.2.3
- [Release notes](https://github.com/fastify/fast-uri/releases)
- [Commits](https://github.com/fastify/fast-uri/compare/v3.1.8...v3.1.9)

---
updated-dependencies:
- dependency-name: fast-uri
  dependency-version: 3.1.9
  dependency-type: indirect
- dependency-name: fast-uri
  dependency-version: 4.2.3
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-26 11:15:09 +01:00
IliesAllali 8875f2baf0 Dates : ordre et séparateur de la région du navigateur (fr-CA, en-US…), mois en lettres accepté (#152) 2026-10-26 11:08:22 +01:00
IliesAllali fdc4254cdd Propositions : étiquette posée sur le bord de la carte, « À vérifier » remplace l'action en cas de conflit ; bulle du compteur ronde 2026-10-26 11:08:21 +01:00
IliesAllali 3c4eef1c92 Dates : en anglais, l'ordre jour/mois suit la région du navigateur (#152) 2026-10-26 11:08:21 +01:00
IliesAllali 52a3ccd466 Merge pull request #156 from IliesAllali/fix/toast-mobile
Notification après un ajout ou un envoi : sa vraie largeur sur téléphone
2026-10-26 10:57:44 +01:00
IliesAllaliandClaude Opus 5.5 b753e91fb4 Notification après un ajout ou un envoi : sa vraie largeur sur téléphone (plus quatre lignes dans une pilule), sans animation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 10:52:41 +01:00
IliesAllali f49875f821 Merge pull request #154 from IliesAllali/fix/pastilles-proches
Fiche : les « + » des proches en pastilles
2026-10-26 10:47:24 +01:00
dependabot[bot] cd844f12a7 build(deps): bump ip-address from 10.7.3 to 10.7.4 in /backend (#144)
Bumps [ip-address](https://github.com/beaugunderson/ip-address) from 10.7.3 to 10.7.4.
- [Release notes](https://github.com/beaugunderson/ip-address/releases)
- [Commits](https://github.com/beaugunderson/ip-address/compare/v10.7.3...v10.7.4)

---
updated-dependencies:
- dependency-name: ip-address
  dependency-version: 10.7.4
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-26 10:47:15 +01:00
IliesAllaliandClaude Opus 5.5 1f7ed7d96f Fiche : les « + » des proches en pastilles, comme « + Surnom » en modification
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 00:12:26 +01:00
IliesAllaliandClaude Opus 5.5 c530875775 1.5.1 : changelog daté
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v1.5.1
2026-10-25 22:44:19 +01:00
IliesAllali 7ed0117890 Merge pull request #151 from IliesAllali/feat/propositions-fantomes
1.5.1 : les propositions de la famille sur l'arbre, photos de la famille, ajout d'un proche depuis la fiche
2026-10-25 22:41:17 +01:00
IliesAllali 4829fd77f4 Merge remote-tracking branch 'origin/main' into feat/propositions-fantomes
# Conflicts:
#	CHANGELOG.md
#	frontend/src/App.jsx
2026-10-25 22:38:47 +01:00
IliesAllaliandClaude Opus 5.5 f034adf761 Famille : la fenêtre d'envoi ne s'ouvre plus après chaque ajout, la personne est sur l'arbre en brouillon
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 22:32:35 +01:00
IliesAllaliandClaude Opus 5.5 ba6e4cbdf2 1.5.1 : changelog
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 21:06:35 +01:00
IliesAllaliandClaude Opus 5.5 54535cb596 Molette : plus d'erreur console à chaque cran (preventDefault dans un écouteur passif, déjà fait par l'écouteur natif)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 20:38:38 +01:00
IliesAllaliandClaude Opus 5.5 1d04f9ac3d Famille : après l'envoi, l'arbre est relu (plus de photo affichée comme acceptée) et le message dit que c'est en pointillés
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 20:37:00 +01:00
IliesAllaliandClaude Opus 5.5 2f60df2ed9 Relecture depuis l'arbre : une proposition déjà relue le dit, et l'arbre se remet à jour
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 20:35:34 +01:00
IliesAllaliandClaude Opus 5.5 82c895d10a Revue de droits 1.5.1 : photos refusées libérées après la relecture, citations lues dans le JSON décodé, contenu normalisé à l'envoi, plafond tenu sous verrou
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 20:27:35 +01:00