114 Commits
Author SHA1 Message Date
IliesAllali 2a510bf474 Merge pull request #55 from IliesAllali/docker/api-upstream
Docker : le front lit l'adresse de l'API dans API_UPSTREAM
v1.0.3
2026-10-10 16:23:10 +02:00
IliesAllaliandClaude Opus 5.5 7becb821a3 CHANGELOG : 1.0.3
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 16:18:02 +02:00
IliesAllaliandClaude Opus 5.5 333a11e84b Docker : le front lit l'adresse de l'API dans API_UPSTREAM
Le conteneur web relayait l'API vers `api:4000`, écrit en dur. Sur un réseau
partagé entre plusieurs applications (Umbrel), ce nom peut appartenir à une autre.
L'adresse vient maintenant de API_UPSTREAM, `api:4000` par défaut : rien ne
change pour les installations existantes. L'image tout-en-un garde sa propre
configuration. La CI lance un second front qui joint l'API par le nom de son
conteneur et repasse le test de fumée.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 16:15:46 +02:00
IliesAllali b774b1dff8 Merge pull request #53 from IliesAllali/docker/aio
Docker : image tout-en-un pour Unraid et les NAS
2026-10-09 17:53:04 +02:00
IliesAllaliandClaude Opus 5.5 30d015f083 Docker tout-en-un : journal sur stderr, il polluait le mot de passe lu par $(secret ...)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 17:51:29 +02:00
IliesAllaliandClaude Opus 5.5 cea8d1db8f Docker tout-en-un : journal PostgreSQL dans le dossier de la base (écriture refusée à la racine de /data)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 17:46:58 +02:00
IliesAllaliandClaude Opus 5.5 91abe47614 Docker : image tout-en-un pour Unraid et les NAS
Une seule image (PostgreSQL 15, API, nginx) qui crée sa base et ses secrets dans /data au premier
démarrage. Publiée par images.yml sous ghcr.io/iliesallali/parenthese-aio, testée en CI (démarrage
à vide, redémarrage, test de fumée).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 17:42:14 +02:00
IliesAllali 5a11d00af9 Merge pull request #38 from IliesAllali/dependabot/npm_and_yarn/landing/landing-minor-patch-0c4d63a201
Bump posthog-js from 1.435.8 to 1.438.0 in /landing in the landing-minor-patch group across 1 directory
2026-10-09 17:04:54 +02:00
IliesAllali c564ebeb05 Merge pull request #52 from IliesAllali/dependabot/npm_and_yarn/frontend/frontend-minor-patch-8178106ae4
Bump the frontend-minor-patch group across 1 directory with 2 updates
2026-10-09 17:04:51 +02:00
dependabot[bot] ada823ab47 Bump the frontend-minor-patch group across 1 directory with 2 updates
Bumps the frontend-minor-patch group with 2 updates in the /frontend directory: [posthog-js](https://github.com/PostHog/posthog-js) and [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite).


Updates `posthog-js` from 1.436.0 to 1.438.0
- [Release notes](https://github.com/PostHog/posthog-js/releases)
- [Changelog](https://github.com/PostHog/posthog-js/blob/main/CHANGELOG.md)
- [Commits](https://github.com/PostHog/posthog-js/compare/posthog-js@1.436.0...posthog-js@1.438.0)

Updates `vite` from 8.3.2 to 8.3.3
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v8.3.3/packages/vite)

---
updated-dependencies:
- dependency-name: posthog-js
  dependency-version: 1.438.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: frontend-minor-patch
- dependency-name: vite
  dependency-version: 8.3.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: frontend-minor-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-09 13:23:56 +00:00
dependabot[bot] 2e638d8a43 Bump posthog-js
Bumps the landing-minor-patch group with 1 update in the /landing directory: [posthog-js](https://github.com/PostHog/posthog-js).


Updates `posthog-js` from 1.435.8 to 1.438.0
- [Release notes](https://github.com/PostHog/posthog-js/releases)
- [Changelog](https://github.com/PostHog/posthog-js/blob/main/CHANGELOG.md)
- [Commits](https://github.com/PostHog/posthog-js/compare/posthog-js@1.435.8...posthog-js@1.438.0)

---
updated-dependencies:
- dependency-name: posthog-js
  dependency-version: 1.435.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: landing-minor-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-09 13:23:34 +00:00
IliesAllaliandClaude Opus 5.5 52fff2b037 Dépendances du 09/10 et version 1.0.2
fast-jwt 6.3.4 (cache du vérificateur, jetons expirés sans iat), source-map-js 1.2.2 et
postcss-selector-parser 7.1.6 forcé sous Tailwind 3 (CSS produit identique octet pour octet).
Landing en Vite 8 et plugin-react 6, mêmes navigateurs cibles que le front, rendu comparé à
l'écran au build Vite 7 en 1920 et 390 px. Groupes mineurs front (#50) et landing (#38).
Reprend #38, #41, #46, #49, #50, #51. CHANGELOG 1.0.2.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v1.0.2
2026-10-09 15:21:08 +02:00
IliesAllaliandClaude Opus 5.5 3c263a708d Docker : images API et front publiées sur ghcr.io, installation sans cloner le dépôt
Après chaque CI verte sur main (et sur un tag vX.Y.Z), le workflow Images construit
parenthese-api et parenthese-web en amd64 et arm64, les pousse sur ghcr.io, puis teste
une installation dans un dossier vide avec docker-compose.yml et .env pour seuls fichiers.
docker-compose.yml tire ces images (PARENTHESE_VERSION, latest par défaut) et garde le
build depuis les sources en repli. Demande faite sur r/GenealogieFR.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 14:24:19 +02:00
IliesAllali 4bdf7aa1f3 Merge pull request #43 from IliesAllali/dependabot/npm_and_yarn/frontend/globals-17.13.0
Bump globals from 16.5.0 to 17.13.0 in /frontend
2026-10-08 16:45:38 +02:00
IliesAllali 24e28e98b8 Merge pull request #45 from coutadeurf/fix/random-uuid-insecure-context
Correction : création d'arbre impossible en HTTP simple
2026-10-08 16:45:22 +02:00
Fabrice Coutadeur ebba0c8ce8 Correction : création d'arbre impossible en HTTP simple
crypto.randomUUID n'est exposé par le navigateur qu'en contexte sécurisé
(HTTPS ou localhost). Servie en HTTP simple, l'app plantait dans
generateSecurePassword à l'étape de création de l'arbre.

Repli sur crypto.getRandomValues, disponible partout, qui produit le
même UUID v4 sans tirets.

Signed-off-by: Fabrice Coutadeur <coutadeurf@gmail.com>
2026-10-08 12:00:17 +02:00
dependabot[bot] e49467059e Bump globals from 16.5.0 to 17.13.0 in /frontend
Bumps [globals](https://github.com/sindresorhus/globals) from 16.5.0 to 17.13.0.
- [Release notes](https://github.com/sindresorhus/globals/releases)
- [Commits](https://github.com/sindresorhus/globals/compare/v16.5.0...v17.13.0)

---
updated-dependencies:
- dependency-name: globals
  dependency-version: 17.13.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-08 01:15:29 +00:00
IliesAllaliandClaude Opus 5.5 0365a71618 Suivi avant le Show HN : démo, source jusqu'à l'inscription, un seul clic CTA
- demo_opened (une fois par chargement, visiteur sans compte) et demo_interaction (personne, média, recherche, édition, création d'arbre ; une fois par type, sans contenu)
- Source d'arrivée gardée sur l'appareil (?source=hn) et jointe à account_screen_viewed et account_registered ; la landing transmet la vraie source au CTA et à l'iframe de démo au lieu de source=landing
- Plus de remise à zéro PostHog à chaque ouverture anonyme (effaçait le visiteur de la landing), seulement à la déconnexion
- Landing : un seul événement signup_cta_clicked (hero_cta_clicked retiré, plus utilisé par le funnel), envoyé avant la navigation sans sendBeacon (bloqué par Brave)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 13:41:21 +02:00
IliesAllaliandClaude Opus 5.5 10f1fc5d14 Typo : plus de mot ni de signe seul en fin de ligne
- text-wrap-style pretty sur les paragraphes, listes, légendes et chapôs, balance sur les titres
  (landing, guides statiques, base pz.css de l'app). Longhand pour ne pas réactiver le retour
  à la ligne là où white-space: nowrap est posé. Les noms de l'arbre sont sur le canvas, non touchés.
- Espaces insécables du français dans le texte visible : fine insécable avant ? ! ;,
  insécable avant : et dans les guillemets, entre un nombre et son unité (Mo, Go, €, dpi).
  Landing (i18n.js, bloc fr hors meta) et pages guides FR (corps de page, hors script).
- App : frenchTypography() appliquée par t() en français, avant le remplacement des variables ;
  le dictionnaire anglais reste indexé sur le français tel qu'écrit. Tests mis à jour.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 17:06:44 +02:00
IliesAllaliandClaude Opus 5.5 d7c86b5ae8 docs(readme): what each backup command saves, GEDCOM is not a backup
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 15:14:53 +02:00
IliesAllaliandClaude Opus 5.5 b41eb7c2ec Landing : capture de l'arbre de démo sous le bouton « Entrer dans la démo »
Avant le chargement de l'iframe, le bloc #demo n'affichait qu'un fond papier
et le bouton n'apparaissait qu'une fois la démo chargée. Une capture fixe de
l'arbre (FR/EN, grand écran et mobile, WebP 29 à 69 Ko, même origine) sert
maintenant de fond, et le bouton est visible dès l'arrivée sur la section.
Le clic garde le même comportement ; s'il arrive avant la fin du chargement,
le symbole de chargement s'affiche par-dessus la capture.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 18:25:16 +02:00
IliesAllaliandClaude Opus 5.5 aeb6db9036 Landing : aplats de la démo et de l'appel final en terracotta vive, démo sans ombre
Choix A de Patch le 02/10/2026 sur la planche des trois terracotta : fond
#D2694A (--a500) sur .sec-demo et .final à la place des roses --a50 et
--peche-50, titres et textes en blanc, bouton final blanc à texte encre.
Le cadre de la démo perd son ombre portée, il garde sa bordure.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 17:15:05 +02:00
IliesAllaliandClaude Opus 5.5 8b50356c4b Démo : vraie vidéo d'époque pour le mariage de Simone, vidéos de remplacement retirées
Le souvenir « Mariage Simone 1943 » ouvrait Big Buck Bunny sur YouTube.
Remplacé par 25 s des actualités Polygoon « Bruiloft te Giethoorn » (1947,
Beeld en Geluid via Open Beelden, CC BY-SA 3.0 NL), sans le son, en H.264
pour Safari, servi par le site (media-src 'self'). Crédit dans CREDITS.md
et sources.json. Les trois autres vidéos YouTube de remplacement de la démo
(Témoignage filmé 1960, Anniversaire 2020, Interview archive radio) sont
retirées.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 14:55:05 +02:00
IliesAllaliandClaude Opus 5.5 75922f3ed3 Sécurité 1.0.1 : audit indépendant de la 1.0
- Vidéo piégée : l'expression régulière de position était quadratique, un faux MP4 de 2 Mo figeait l'API (bornée, linéaire)
- Sessions émises avant le 01/10/2026 refusées (SESSIONS_NOT_BEFORE) : des sessions ont fuité dans les annotations et les journaux jusqu'à la 1.0
- Contributions : l'« avant » montré au propriétaire vient de la base ; une suppression approuvée part en cascade (unions, liens, souvenirs, portrait, fichiers)
- Mot de passe de partage : essai compté avant bcrypt, comparaisons une par une, changement et rattachement dans une transaction
- Quota mesuré sur le disque, 10 arbres par compte, corps à 1 Mo hors envois, bornes sur annotations, contributions et GEDCOM
- GIF réencodés ; anciennes propositions d'annotation sans adresse stockée ; clé d'exemple refusée sans NODE_ENV
- Déploiement du commit validé par la CI, clé d'hôte obligatoire ; nginx : X-Forwarded-For écrasé, version masquée, journal sans query string
- PostHog verrouillé dans le code, sans script externe ; CSP sans *.posthog.com ; sauvegardes hors serveur chiffrées par défaut

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v1.0.1
2026-10-01 12:19:41 +02:00
IliesAllaliandClaude Opus 5.5 ee7d2809fc Front : mêmes navigateurs qu'avec Vite 7
Vite 8 relève sa cible par défaut à Safari 16.4 et Chrome 111. La famille ouvre souvent l'arbre sur un vieil iPad ou un ancien téléphone : la cible reste celle de Vite 7 (Chrome et Edge 107, Firefox 104, Safari 16.0), valeurs lues dans le guide de migration de Vite 8.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 12:13:19 +02:00
IliesAllali 2f9fa742fa Intègre deps/landing-infra 2026-10-01 11:56:15 +02:00
IliesAllali 6a4b8d9539 Intègre deps/frontend 2026-10-01 11:56:15 +02:00
IliesAllali 0e055a34f7 Intègre deps/backend 2026-10-01 11:56:15 +02:00
IliesAllaliandClaude Opus 5.5 e145cad509 Vitest 5.0 (Dependabot #37)
Vitest 5 demande Vite 6.4 ou plus et Node 22.12 ou plus (Vite 8.3 et Node 24 ici). Aucun test n'utilise vi.mock, bench, describe.sequential, toThrow('') ni d'assertion asynchrone non attendue, les points touchés par le guide de migration ; clearMocks activé par défaut est sans effet sans mock. 97 tests passent, comme avant.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 11:20:22 +02:00
IliesAllaliandClaude Opus 5.5 431eb06a87 ESLint 10 et @eslint/js 10 (Dependabot #36)
La PR montait @eslint/js seul, dont la config recommandée ajoute no-useless-assignment, no-unassigned-vars et preserve-caught-error. eslint passe aussi en 10 (configuration à plat déjà en place, aucun commentaire eslint-env, Node 24) ; eslint-plugin-react-hooks 7.1 et eslint-plugin-react-refresh 0.5 la déclarent prise en charge. Les trois signalements de no-useless-assignment étaient fondés : une valeur initiale jamais lue, chaque branche suivante l'écrase ou quitte la fonction (libellé de parenté, contenu JSON d'une photo ou d'un tracé posé sur l'arbre). Valeur initiale retirée, comportement inchangé.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 11:19:27 +02:00
IliesAllaliandClaude Opus 5.5 bfa05ddffa Vite 8.3 et @vitejs/plugin-react 6.1 (Dependabot #35)
La PR seule ne pouvait pas s'installer : @vitejs/plugin-react 5 n'accepte pas Vite 8 (ERESOLVE à npm ci, en CI comme dans l'image Docker). Les deux montent ensemble : Vite 8 construit avec Rolldown et Oxc, la 6 du plugin abandonne Babel, dont ce projet n'utilisait aucune option. Rien à migrer dans vite.config.js (ni rollupOptions, ni esbuild, ni manualChunks). Le build garde un seul script module externe dans index.html, sans eval ni script en ligne, compatible avec la CSP ; les polices auto-hébergées sortent avec les mêmes empreintes. Changements à connaître : CSS minifiée par Lightning CSS, cible navigateur par défaut relevée (Safari 16.4, Chrome et Edge 111, Firefox 114), Node 20.19 ou 22.12 minimum (Docker et CI en Node 24).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 11:17:53 +02:00
IliesAllaliandClaude Opus 5.5 f509bc1751 lucide-react 1.49 (Dependabot #33) : tracés de l'arbre lus dans @lucide/icons
La version 1 ne publie plus dist/esm/icons/*.js ni __iconNode : renderers.js importait ces fichiers internes pour dessiner les vignettes carte et GPX sur le canvas, d'où l'échec du build (CI Frontend et image Docker). Les tracés viennent maintenant de @lucide/icons, le paquet officiel des données d'icônes (export nommé, propriété node), à la même version que lucide-react. Les 47 icônes utilisées existent toujours sous leur nom (Edit3, HelpCircle, MoreHorizontal, Trash2 restent des alias) et rendent un SVG identique à la 0.564, aria-hidden compris. Les icônes de marque retirées en v1 ne sont pas utilisées ici.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 11:16:33 +02:00
IliesAllaliandClaude Opus 5.5 b33ef1e61e API : TypeScript 7.0.2, compilateur natif
Reprend la PR Dependabot #30. La 7.0 adopte les défauts de la 6.0 et rend fatales ses options dépréciées : rien de cela ne touche tsconfig.json, qui fixait déjà rootDir (src), types (["node"]), module et moduleResolution NodeNext, target ES2022, strict, esModuleInterop à true. Le JavaScript produit dans dist/ est identique octet pour octet à celui de TypeScript 5.9.3 (diff -r vide sur les 27 fichiers). La 7.0 n'a plus d'API JavaScript, mais aucun outil du backend ne s'en sert : vitest et tsx ne passent pas par tsc, Prisma ne lit que le numéro de version et tolère son absence. Binaires natifs dans le package-lock pour Linux x64 (CI, Docker, VPS) et Windows. 113 tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 11:15:12 +02:00
IliesAllaliandClaude Opus 5.5 ca4138ebc2 API : dotenv 18.0.5, démarrage sans ligne « injected env »
Reprend la PR Dependabot #34 (18.0.5, correctif publié depuis). Depuis la 17.0.0, config() écrit « ◇ injected env (N) from .env » à chaque démarrage, même sans fichier .env (vu avec la 18.0.5 : « injected env (0) »), ce qui glisse une ligne hors format dans les journaux JSON de production : config({ quiet: true }). Les autres ruptures de la 18.0.0 (préchargement -r dotenv/config retiré, .env.vault retiré) ne touchent pas Parenthèse, qui n'appelle que config() dans config/env.ts. La CLI Prisma garde sa propre copie de dotenv 16. 113 tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 11:13:50 +02:00
IliesAllaliandClaude Opus 5.5 f6fb6540e7 API : @fastify/cors 11.3.0, méthodes annoncées gardées
Reprend la PR Dependabot #32. Rupture de la 11.0.0 : la pré-vérification CORS n'annonce plus par défaut que GET, HEAD et POST, un navigateur d'une autre origine aurait refusé les PUT, PATCH et DELETE de l'API. La liste d'avant est maintenant écrite dans app.ts, et un test vérifie la réponse à un OPTIONS d'une origine autorisée (il échoue sans la ligne). Option origin inchangée. Les ajouts de la 11.x (logLevel du préflight, cors par route dans config.cors) ne sont pas utilisés. 113 tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 11:13:07 +02:00
IliesAllaliandClaude Opus 5.5 5fcaa85d8f Front : mineures et correctifs groupés (Dependabot #31), refs hors du rendu
React et react-dom 19.3.0, @types/react et @types/react-dom 19.3.0, posthog-js 1.434.15, autoprefixer 10.6.1, eslint-plugin-react-hooks 7.1.1, eslint-plugin-react-refresh 0.5.7. La règle react-hooks/refs de la 7.1 voit maintenant les refs lus ou écrits pendant le rendu, corrigés plutôt que désactivés : le nom de l'arbre partagé affiché par l'écran compte passe par un état (un ref ne redessine rien), la personne de départ de l'arbre est recopiée dans un effet déclaré avant celui du cadrage, l'API de zoom est exposée par useImperativeHandle, l'horodatage des portraits est posé au premier chargement au lieu de Date.now() au rendu (react-hooks/purity). react-refresh 0.5 garde l'export par défaut et la config vite utilisés ici.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 11:12:32 +02:00
IliesAllaliandClaude Opus 5.5 aabc29358d Dependabot : nginx reste sur la branche stable (PR #26 écartée)
nginx 1.31 est la branche mainline (développement), la stable est 1.30 (nginx.org au 01/10/2026). Les montées mineures de nginx sont ignorées, les correctifs de la 1.30 arrivent toujours. Passer à la stable suivante à la main.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 11:12:26 +02:00
IliesAllaliandClaude Opus 5.5 2aa685cafd Déploiement : webfactory/ssh-agent 0.10.0 (Node 24, PR #25)
L'action passe de Node 20 à Node 24, ce qui retire l'avertissement de dépréciation des journaux de déploiement. Empreinte épinglée vérifiée contre le tag v0.10.0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 11:12:26 +02:00
IliesAllaliandClaude Opus 5.5 9d9b6a8480 Landing : React 19.3, posthog-js, autoprefixer (groupe mineur, PR #28)
Versions mineures. Pages vues à l'écran (accueil FR et EN, téléphone, vie privée), 13 tests, et événements PostHog toujours envoyés (requêtes interceptées, comparées avec main).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 11:12:25 +02:00
IliesAllaliandClaude Opus 5.5 3f4419ec9a API : @fastify/rate-limit 11.2.0, limites d'essais non contournables en IPv6
Reprend la PR Dependabot #29. La 11.2.0 corrige GHSA-grpc-p53c-r64v : la clé par défaut était l'adresse IP telle quelle, un client IPv6 changeait d'adresse dans son /64 (ou réécrivait la même autrement) et repartait à zéro. La clé est maintenant l'adresse normalisée, IPv4 mappée ramenée en IPv4, IPv6 regroupée par /64. Rupture de la 11.0.0 : option whitelist retirée au profit d'allowList, que Parenthèse n'utilise pas. Aucun changement de code (global: false, limites par route dans config.rateLimit, clé par défaut sur request.ip calculée par Fastify avec TRUST_PROXY). 112 tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 11:11:27 +02:00
IliesAllaliandClaude Opus 5.5 b11d90dcd6 API : zod 4.6.5 et vitest 5.0.3 (versions mineures et correctives)
Reprend le groupe Dependabot backend-minor-patch (#27). vitest arrive en 5.0.3, correctif publié depuis la PR (5.0.2). Aucun changement de code. Compilation propre, 112 tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 11:10:44 +02:00
IliesAllaliandClaude Opus 5.5 ea49f77651 sharp 0.35.5 : failles de libvips et libheif corrigées
Les versions de sharp antérieures à 0.35.0 sont touchées quand elles décodent des images non fiables (GHSA-f88m-g3jw-g9cj, libvips), et antérieures à 0.35.4 pour libheif (GHSA-rgj7-g3m4-5g8c). Parenthèse décode les photos envoyées par la famille : montée en 0.35.5 (libvips 8.18.7). Aucun changement d'API utilisé ici (Node 24, failOn, rotate, sorties JPEG/PNG/WebP). 112 tests, recette sécurité et comparaison de rotation relues.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 23:32:48 +02:00
IliesAllaliandClaude Opus 5.5 86ac1eb7ab Scénario compte (e2e-account) : barre de la famille depuis le 25/09
Le test cherchait l'ancienne barre (« Contribuer à l'arbre »). Il suit maintenant la carte d'accueil, la barre « Ajouter un souvenir » et le menu « Plus » pour créer un compte. 19/19 en local.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 23:22:46 +02:00
IliesAllaliandClaude Opus 5.5 ba15fc8745 Compte : « Supprimer mon compte » joignable, lien mort sans déconnexion
Avec un arbre, la fenêtre « Mon compte » ne menait nulle part : elle a maintenant « Gérer mon compte », qui ouvre « Vos arbres » (déconnexion, suppression du compte), la croix ramène à l'arbre. Sans arbre, « Mon compte » renvoyait aussitôt à l'assistant de création : le repli vers la démo ne se déclenche plus quand l'utilisateur a ouvert l'écran lui-même. Sur le lien d'un arbre supprimé, la session du compte est restaurée, « Créer mon arbre » ouvre le compte connecté au lieu d'un écran de connexion. Page vie privée alignée sur le chemin réel.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 23:22:45 +02:00
IliesAllaliandClaude Opus 5.5 e718d48708 CHANGELOG 1.0.0 : section sécurité et vie privée
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v1.0.0
2026-09-30 18:38:18 +02:00
IliesAllaliandClaude Opus 5.5 038ccd4b35 Vie privée : un seul mot de passe de partage
La page décrivait encore deux mots de passe (visiteur et contributeur). Elle décrit maintenant le mot de passe de partage (haché, et gardé chiffré pour que le propriétaire le relise), la famille qui propose des ajouts, la fermeture des sessions quand il change, le prénom noté sur une contribution, et les photos réenregistrées sans position GPS.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 18:37:26 +02:00
IliesAllaliandClaude Opus 5.5 a289c128f4 Portraits du site : Pexels à la place de randomuser.me
Camille et Alex (hero, « Pour qui ») venaient de randomuser.me, sans licence établie pour un site public. Remplacés par deux portraits Pexels recadrés en 400 x 400 (Clay Elliot, Vitaly Gariev), sources dans CREDITS.md. Images d'aperçu refaites depuis le hero actuel, sur le fond de la DA.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 18:37:26 +02:00
IliesAllali bd4f5856ad Intègre securite/front : polices servies par le site, PostHog sans adresse d'arbre, vie privée à jour 2026-09-30 18:09:30 +02:00
IliesAllaliandClaude Opus 5.5 43d56a52e2 Vie privée : polices locales, YouTube et OpenStreetMap, mesure d'audience, accès par mot de passe
Pages française et anglaise alignées sur le code. Polices servies sans Google,
vidéos YouTube et cartes chargées seulement à l'ouverture, pas d'enregistrement
de session ni d'adresse d'arbre envoyée à PostHog, arbre entier et export GEDCOM
pour qui a le mot de passe, contributions anonymisées à la suppression du compte.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 18:08:01 +02:00
IliesAllaliandClaude Opus 5.5 6f16b65e2a Site : provenance des photos du hero notée dans CREDITS.md
Unsplash pour les souvenirs, Pexels pour Lya, Marc et Jeanne. Les trois
portraits randomuser.me n'ont pas de licence établie pour un site public,
signalé dans le fichier.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 18:05:07 +02:00