Repository navigation
Conversation
Pose l'architecture Vibed sans toucher au site vanilla ni au Dockerfile/workflow GHCR existants : API chi/pgx avec migrations, package legal stub, front Vite/Tailwind/shadcn, compose et CI. Co-authored-by: tainalo2 <[email protected]>
Nom officiel « Devis Generator : VIBED », LICENSE.vibed (Apache-2.0) sans toucher au GPL racine, docs/DECISIONS.md, et migration initiale alignée (types acompte/avoir, TVA par ligne, compteurs, password_hash). Co-authored-by: tainalo2 <[email protected]>
Ajoute vibed-release.yml (tags vibed-v*), sépare liveness/readiness, retries Postgres + migrations avec verrou advisory, et documente les variables d'environnement pour le déploiement multi-réplicas. Co-authored-by: tainalo2 <[email protected]>
Co-authored-by: tainalo2 <[email protected]>
Le filtre v* matchait aussi vibed-v* ; on ajoute !vibed-v* pour laisser les tags vX.Y.Z inchangés tout en isolant VIBED. Co-authored-by: tainalo2 <[email protected]>
Inscription/connexion/déconnexion, moi, export RGPD et suppression en cascade ; argon2id ; cookies HttpOnly/Secure/SameSite + CSRF ; AES-GCM versionné ; SESSION_SECRET et ENCRYPTION_KEY documentés. Co-authored-by: tainalo2 <[email protected]>
API métier authentifiée, moteur billing (arrondis/multi-taux/franchise), émission transactionnelle F-2026-0001, PDF gofpdf compte + invité, chiffrement IBAN/adresses, front listes/édition en français. Co-authored-by: tainalo2 <[email protected]>
…EDB, BCE) Providers HTTP mockables avec timeout/rate-limit/retry, cache append-only legal_values + projection legal_variables, refresh sous verrou advisory, API statut/recherche/VIES (invité + anti-abus), UI autocomplétion et page sources légales. Mentions d'émission remplacent defaults-v1 dès qu'une valeur vérifiée existe. Insee/PISTE en stub ; API Entreprise exclue. Co-authored-by: tainalo2 <[email protected]>
Shell sidebar desktop / navigation mobile, tableau de bord, parcours document avec aperçu PDF, design system (Fraunces + thème encre/teal), landing publique, mentions et confidentialité (éditeur/hébergeur à compléter), toasts, 404, robots/sitemap/favicon. Config publique DONATE_URL et LEGAL_* ; licence Apache explicite (LICENSE.APACHE-2.0). Co-authored-by: tainalo2 <[email protected]>
Le décodage JSON échouait sur client.id="" ; GuestParty dédié pour l’endpoint guest/pdf et l’aperçu en direct. Co-authored-by: tainalo2 <[email protected]>
La prod échouait avec TEDB-ERR-2 / XSD validation failed car la requête utilisait le targetNamespace WSDL VatRetrievalService et des enfants non qualifiés. L'envelope valide lie IVatRetrievalService + :types. Ajoute fixtures (réponse FR anonymisée + fault XSD) et préserve le repli verified. Co-authored-by: tainalo2 <[email protected]>
Canvas Design construit sur le design system DevisUI : barre de navigation, landing, éditeur de document (devis, facture, facture d'acompte, mobile, modales client et émetteur), zonages et maquettes complètes des autres pages en version bureau et mobile. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01AgucMgYwpHeh4eAUwAKTZA
- Navigation : barre d'en-tête unique (connecté / invité), menu du compte,
panneau mobile ; logo dans l'en-tête et le pied de page.
- Pages refaites d'après design/maquettes : accueil, tableau de bord,
documents, clients, fiche client, Entreprise, connexion, inscription,
Mon compte, sources légales, mentions légales, confidentialité, 404.
- Éditeur : zones colorées (tokens clair/sombre), formulaire
redimensionnable et aperçu A4, modales client et émetteur, facture
d'acompte calculée depuis le devis, autosauvegarde, émission confirmée,
parcours en trois étapes sur mobile.
- Document émis : suivi envoi / acceptation / paiement, documents liés,
historique, avoir, conversion devis → facture, duplication.
- Backend : route POST /documents/{id}/status et migration 000005
(sent_at, accepted_at, paid_at) ; le PDF d'un document émis utilise
l'émetteur figé à l'émission.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- L'instantané émetteur enregistré à l'émission (documents.issuer_snapshot) contenait l'IBAN et l'adresse en clair. Ils sont désormais chiffrés (AES-256-GCM, même clé que issuer_profiles) et déchiffrés uniquement à la lecture par le propriétaire. Les instantanés existants sont rechiffrés au démarrage (SealLegacySnapshots, idempotent). - Export CSV des documents : les cellules commençant par = + - @ sont préfixées d'une apostrophe pour empêcher l'injection de formules dans le tableur ; les montants restent numériques. Co-Authored-By: Claude Opus 5.5 <[email protected]>
Un document émis relisait la fiche client à chaque affichage et à chaque PDF : modifier ou supprimer un client changeait les factures déjà émises. - Migration 000006 : documents.client_snapshot (nom, e-mail, adresse, SIREN, SIRET, TVA ; ni notes internes ni IBAN), adresse chiffrée. - Émission : le client est figé avec l'émetteur ; le PDF et l'API utilisent cette copie. La liste des documents expose client_name. - Démarrage : les documents déjà émis reçoivent une copie du client depuis sa fiche actuelle (idempotent). - Front : aperçu, fiche latérale, listes et tableau de bord affichent le client figé ; texte de suppression d'un client corrigé. Co-Authored-By: Claude Opus 5.5 <[email protected]>
- Adresses clients : plus d'écriture dans les colonnes en clair (address_line1, address_line2, postal_code, city) ; au démarrage, les adresses existantes sont chiffrées puis ces colonnes vidées (SealClientAddresses, idempotent). - Export RGPD : fiche Entreprise, clients et documents exportés déchiffrés via la couche métier (l'export lisait les colonnes en clair et omettait la fiche Entreprise). - IP client : X-Forwarded-For n'est lu que depuis un proxy déclaré dans TRUSTED_PROXIES (adresse la plus à droite non fiable) ; suppression de middleware.RealIP. Limite de connexion par compte (10 / 15 min) en plus de la limite par IP. - Dépendances : chi 5.5.0, pgx 5.11.0, x/text 0.43.0, x/crypto 0.58.0, golang-migrate 4.20.1 ; Go 1.26 minimum, toolchain 1.27.3, image de build golang:1.27. govulncheck : aucune vulnérabilité atteinte. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…ants - Requêtes API : corps limité à 1 Mio ; Origin, s'il est présent, doit correspondre au site ; un corps doit être en application/json (bloque la connexion forcée depuis un autre site via un formulaire text/plain). Le proxy Vite conserve Host pour que ce contrôle fonctionne en dev. - Serveur : délais de lecture, d'écriture et d'inactivité, en-têtes de 64 Kio maximum. - En-têtes de sécurité : CSP stricte, X-Frame-Options DENY, nosniff, Referrer-Policy, Permissions-Policy, COOP, HSTS en HTTPS. - Endpoints publics : PDF invité limité à 20/min par IP, calcul des totaux à 120/min pour les visiteurs sans compte. - Calcul : 500 lignes et 2000 caractères par désignation maximum ; multiplication exacte (math/big) et plafond de 10 000 milliards d'euros au lieu d'un débordement silencieux d'int64. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…storique, CI - Documents : création et modification refusent un client ou un document lié qui n'appartient pas au compte. - Erreurs : les erreurs métier non liées à la validation ne sont plus renvoyées telles quelles (journalisées, message générique). - Suppression du compte : mot de passe exigé, tentatives limitées. - Cache VIES borné à 10 000 entrées. - Site historique : saisies recopiées en texte (textContent, DOMParser pour les champs multilignes) au lieu d'innerHTML ; jsPDF 2.5.1 → 4.2.1 (avis critiques et élevés corrigés). PDF vérifié dans le navigateur. - CI : actions épinglées par SHA, Dependabot (actions, Go, npm). - compose : Postgres et l'application n'écoutent que sur 127.0.0.1. - .env.example : TRUSTED_PROXIES documenté. - Front : composants morts retirés (aperçu iframe, ancien formulaire) ; colonne Date du tableau de bord masquée sous 1536 px. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…sécurité - Intégration du design system et des maquettes (navigation, pages, éditeur, document émis). - Client et émetteur figés à l'émission, chiffrés au repos. - Correctifs de l'audit de sécurité : adresses chiffrées, IP fiable, dépendances, limites de requêtes, CSRF de connexion, en-têtes, montants, cloisonnement, suppression de compte, site historique, CI. Co-Authored-By: Claude Opus 5.5 <[email protected]>
« Docker release » construit le Dockerfile historique (site nginx) : lancé sur vibed, il publiait l'ancien site au lieu de l'application. - Workflows renommés : « Docker release (site historique nginx) » et « VIBED release (image Go + React) ». - Docker release refuse les branches vibed et feature/* avec un message qui indique le bon workflow. - Dockerfile.vibed : étapes de build sur la plateforme du runner et compilation croisée Go (TARGETARCH), sans émulation QEMU pour arm64. - make image : construit Dockerfile.vibed (docker build . construit l'ancien site). Co-Authored-By: Claude Opus 5.5 <[email protected]>
Sur le modèle de « Publication » de MyInfra : - lancement manuel avec une version (0.3.0, 0.3.0-rc.1) et la branche à publier (vibed par défaut), ou push d'un tag vibed-vX.Y.Z ; - vérifications Go et front avant toute publication ; - image multi-architecture sur ghcr.io/tainalo2/devisgenerator-vibed (version, majeure.mineure et latest hors préversion) ; - contrôle de l'image publiée : démarrage en production avec PostgreSQL, version renvoyée par /api/v1/healthz, front servi ; - release GitHub vibed-vX.Y.Z avec compose.yaml prêt à déployer, env.example et SHA256SUMS. Remplace « VIBED release ». La version est gravée dans le binaire (ARG VERSION de Dockerfile.vibed) ; deploy/compose.vibed.yaml exige POSTGRES_PASSWORD, ENCRYPTION_KEY et SESSION_SECRET. Co-Authored-By: Claude Opus 5.5 <[email protected]>
Factur-X : XML CII au profil EN 16931
Le dépôt explique, pour un humain, un développeur et un agent, qu'il vise une plateforme gratuite pour signer les factures en France. La page dans docs/ est prête pour GitHub Pages. Co-authored-by: Cursor <[email protected]>
Documentation et page de présentation
tainalo2
marked this pull request as ready for review
October 28, 2026 09:28
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Objectif
Socle VIBED + auth + CRUD/PDF + sources légales + refonte UI/UX / landing / pages légales (draft, pas de merge / pas de tag image).
Correctif TEDB (prod 0.2.0)
VatRetrievalServiceavec des enfants non qualifiés →TEDB-ERR-2/ « XSD validation failed » (HTTP 500), d’où le loglegal fetch failedpourtedb.vat_rates.fr.IVatRetrievalService+ enfants dans:types(memberStates/isoCode/situationOn) ; parse STANDARD/DEFAULT + REDUCED (ignore EXEMPTED) ; fixtures anonymisées + fault XSD.error, projectionverified/manualconservée ; démarrage et émission de documents non bloqués ; statut visible via/api/v1/legal/status.Ce lot (UI / site)
DONATE_URL+LEGAL_PUBLISHER_*/LEGAL_HOST_*viaGET /api/v1/public/configLICENSE.APACHE-2.0)Lots précédents
Auth, CRUD, PDF, sources légales (DINUM/VIES/TEDB/BCE), cache
legal_valuesEnv
Obligatoires inchangés. Optionnelles :
DONATE_URL,LEGAL_PUBLISHER_*,LEGAL_HOST_*,LEGAL_TEDB_URL, etc.À compléter / valider
Identité éditeur & hébergeur, lien de don, validation juridique des pages légales, règle pénalités
max(3×intérêt légal, BCE+10)