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>
- 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>
Chaque action est référencée par son commit, version en commentaire. Le
déploiement lit la clé d'hôte dans le secret SSH_KNOWN_HOSTS et exige sa
vérification ; sans secret, repli sur ssh-keyscan avec un avertissement.
La CI échoue sur une faille critique d'une dépendance de production.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
deploy.sh sauvegarde la base dans $BACKUP_ROOT/pre-migration quand prisma migrate
status signale un écart, garde les 10 derniers dumps et s'arrête si pg_dump échoue.
backup.sh crée ses fichiers en umask 077 et, si BACKUP_AGE_RECIPIENT est renseigné,
n'envoie sur S3 que des copies chiffrées avec age. Commentaires sur les polices
du frontend mis à jour (deploy.sh, ci.yml).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
X-Frame-Options ALLOWALL (invalide) et X-XSS-Protection retirés. Les location qui
posent leur propre add_header répètent la liste complète, sinon nginx n'hérite
de rien. CSP de l'app et de la landing construites depuis ce que chargent les
builds (PostHog, YouTube sans cookie, OpenStreetMap, blob:, iframe de démo).
Prod seulement : HSTS avec includeSubDomains, ssl_protocols TLSv1.2 TLSv1.3.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Licence et façon dont le projet a été fait en tête, capture de la démo anglaise,
section sur les traductions. Les deux versions à jour : un seul mot de passe de
partage, « arbre » plutôt que « galaxie », interface en deux langues.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Utilisateurs
- Suppression de compte depuis l'écran « Votre compte », confirmée par mot de passe :
arbres possédés et médias effacés, email retiré des contributions, sessions fermées partout.
- Suppression d'arbre définitive, en base et sur le disque.
- Ajout d'un frère ou d'une sœur relié aux parents existants ; relations parent et enfant
corrigées en mode démo.
- Liste d'attente retirée (route, envoi d'emails, dépendance Resend).
Projet ouvert
- CI : front, landing, backend avec vérification des migrations, test Docker de bout en bout.
- Déploiement lancé seulement après une CI réussie sur main.
- Image API : CLI Prisma installée à part pour que les migrations tournent au démarrage.
- SECURITY.md, CONTRIBUTING.md, modèles d'issue et de pull request.
- Migration renommée avec un nom descriptif, contenu identique.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Galaxie familiale : personnes, unions et filiations, photos, vidéos et voix sur chaque personne,
partage par lien avec consultation sans compte et contributions validées par le propriétaire.
Auto-hébergeable avec Docker. Licence PolyForm Noncommercial 1.0.0.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>