Changelog

Suivez l'évolution de VitaPulse — nouvelles fonctionnalités, améliorations et corrections.

v2.23.32026-03-22
  • Corrigé **package.json** — suppression de la virgule traînante après le script `scan` (causait un `EJSONPARSE` au `npm ci`)
v2.23.22026-03-22
  • Modifié **Sitemap dynamique** — suppression du cron quotidien `generateSitemap.js` et du fichier statique `public/sitemap.xml`. Le sitemap est désormais servi dynamiquement via une route Express `/sitemap.xml` avec cache in-memory (TTL 1h)
v2.23.12026-03-17
  • Corrigé **Emails discussions** — correction de l'URL de fallback dans les templates email de discussion : `vitapulse.io` → `vitapulse.e-xode.net` (5 langues)
  • Modifié **Lighthouse 12 → 13** — mise à jour majeure du moteur d'audit. 27 audits individuels supprimés (consolidés dans les 17 insights). Diagnostics réduits de 33 à 13 IDs. Fallback CLS elements vers `cls-culprits-insight`. `uses-http2` retiré des `skipAudits`. Scores a11y/SEO/BP ajustés (poids modifiés). Rétrocompatibilité totale avec les anciens scans
  • Modifié **Vite 7 → 8** — migration vers Rolldown (bundler Rust). Option `api: 'modern-compiler'` retirée des options SCSS (seul mode supporté). Builds ~2x plus rapides
  • Modifié **Vue Router 4 → 5** — mise à jour majeure sans breaking changes (merge de unplugin-vue-router dans le core)
  • Modifié **@vitejs/plugin-vue 5 → 6** — alignement sur Vite 8
  • Modifié **Dépendances mises à jour** — vue 3.5.18→3.5.30, vuetify 4.0.0→4.0.2, vue-i18n 11.1.11→11.3.0, pinia 3.0.3→3.0.4, dompurify 3.2.6→3.3.3, express 5.1.0→5.2.1, express-rate-limit 8.2.1→8.3.1, stripe 20.4.0→20.4.1, nodemailer 8.0.1→8.0.2, multer 2.0.3→2.1.1, sass-embedded 1.87.0→1.98.0
  • Modifié **TipTap épinglé à 3.20.0** — overrides npm pour contourner le publish cassé de 3.20.3 (dist/ manquant)
  • Modifié **Performance Insights — extraction enrichie** — `extractPerformanceInsights()` capture désormais la structure complète des insights Lighthouse : `headings`, `metricSavings`, `overallSavingsMs/Bytes`, `scoreDisplayMode`, `debugData`, `sortedBy`, `isEntityGrouped`, `subItems` imbriqués, et items sans troncature abusive (50 max pour tables, 30 pour listes)
  • Modifié **Performance Insights — UI refondée** — `ScanInsightsSection.vue` remplacé par une interface riche avec recherche, filtre par métrique impactée (LCP/CLS/INP/TBT/FCP), tri par score ou par gains, chips metricSavings, badges overallSavings, et rendu adaptatif selon le type de données (table/list/checklist)
  • Modifié **Performance Insights — PDF enrichi** — le PDF affiche désormais les metricSavings, warnings, et les tables de détails des insights (même rendu que les opportunités et diagnostics)
  • Modifié **AuditDetailTable — subItems et nouveaux valueTypes** — support des sous-éléments expandables (clic pour déplier), et des types `source-location`, `code`, `numeric`
  • Modifié **Lighthouse — capture `runtimeError`** — vérification de `lhr.runtimeError` après chaque appel à `lighthouse()` pour détecter les erreurs fatales (page non chargée, crash GPU, timeout DNS) et éviter les scans silencieusement marqués "completed" avec des scores null
  • Modifié **Lighthouse — `effort` calculé depuis `guidanceLevel`** — le champ `effort` des opportunités est maintenant calculé depuis `audit.guidanceLevel` (1→high, 2→medium, 3→low) au lieu d'être hardcodé à `'medium'`
  • Modifié **Lighthouse — `language` default cohérent** — le fallback de langue passe de `'fr'` hardcodé à `DEFAULT_LOCALE` (`'en'`) pour respecter la convention du projet
  • Modifié **Lighthouse — desktop timeouts configurables** — `maxWaitForFcp` (15s) et `maxWaitForLoad` (35s) desktop sont maintenant dans `LIGHTHOUSE_CONFIG.timing` au lieu d'être hardcodés
  • Ajouté **InsightChecklist** — nouveau composant pour afficher les insights de type checklist (document-latency, lcp-discovery) avec icônes de validation
  • Ajouté **InsightListRenderer** — nouveau composant pour afficher les insights de type list (cls-culprits, forced-reflow, breakdowns, network-tree) avec rendu récursif
  • Ajouté **Lighthouse — `audit.explanation`** — extraction et affichage du champ `explanation` de Lighthouse dans les opportunités, diagnostics, issues (a11y/SEO/BP/security), insights et le PDF de résultats. Ce champ fournit un texte contextuel expliquant pourquoi l'audit a échoué pour la page spécifique testée
v2.22.12026-03-14
  • Modifié **GitHub Actions** — build workflow déclenché sur push/PR vers `main` (remplace `npm run lint`/`test:run` inexistants par `npm run build`), Docker build déclenché uniquement sur les tags de release (`v*`), CodeQL aligné sur la branche `main`
v2.22.02026-03-12
  • Sécurité **Google reCAPTCHA v3** — intégration CAPTCHA invisible sur les 3 endpoints publics (signup, quick audit, contact). Vérification serveur du token avec score minimum 0.5. Désactivé en développement. Composable Vue `useCaptcha` partagé, helper serveur `verifyCaptcha` factorisé
v2.21.02026-03-12
  • Ajouté **Statut de vérification utilisateur** — l'administration affiche si un utilisateur a validé son compte (code de sécurité vérifié au moins une fois) : chip vert/gris dans la liste et dans le détail utilisateur
  • Ajouté **Suppression de compte utilisateur** — les administrateurs peuvent supprimer un compte utilisateur avec cascade complète (projets, scans, stats, discussions, messages, audits, associés, logs, sessions, avatar). Les comptes admin sont protégés contre la suppression
  • Sécurité **Validation serveur signup** — ajout de la validation email (EMAIL_REGEX), password (≥ 8 caractères), et name (≥ 2 caractères) côté serveur dans l'endpoint d'inscription. Normalisation de l'email en lowercase et trim du name
  • Sécurité **Validation serveur signin** — ajout de la validation email côté serveur dans l'endpoint de connexion
  • Sécurité **Rate limit signup renforcé** — réduction du rate limit signup de 10 à 5 requêtes par 15 minutes
  • Sécurité **Traduction des erreurs serveur** — les erreurs renvoyées par le serveur (signup, signin, forgot, reset) sont désormais traduites via i18n au lieu d'afficher les clés brutes
v2.20.02026-03-12
  • Ajouté **Suivi conversions Google Ads** — événement GA4 `purchase` déclenché après un checkout réussi (Pro/Business) avec valeur de conversion, devise EUR et cycle de facturation. L'événement est automatiquement importé par Google Ads via `ads_conversion_PURCHASE_1`
  • Ajouté **Validation URL** — vérification du format URL sur la page Quick Audit et la page d'accueil (protocole http/https, hostname valide avec au moins un point). Le bouton est désactivé tant que l'URL est invalide
  • Ajouté **Validation email** — vérification du format email sur les pages de connexion et d'inscription. Utilise le regex partagé `EMAIL_REGEX` au lieu d'un regex inline moins strict
  • Corrigé **Textes de validation en dur** — remplacement des messages de validation en français hardcodés (signup/signin) par des clés i18n traduites dans les 5 langues
v2.19.02026-03-08
  • Ajouté **Langue italienne** — ajout de l'italien (it) comme 5ème langue supportée : traductions complètes (interface, vulnérabilités, emails), drapeau, imports dans tous les modules (main, email, googleWebhook, downloadPdf)
  • Corrigé **Traductions allemandes incomplètes** — correction de 697 clés manquantes dans de.json (landing, admin, billing, project, cwv, caseStudies, pdf, et toutes les autres sections). Nettoyage des clés obsolètes et correction des types incompatibles (tableaux FAQ, takeaways, includes)
  • Corrigé **Traductions italiennes incomplètes** — correction de 320 clés manquantes dans it.json. Nettoyage des clés obsolètes pour alignement parfait avec la structure anglaise de référence
v2.18.22026-03-08
  • Corrigé **Appel parasite quick-audit/convert** — nettoyage du localStorage lorsque la conversion échoue, évitant un appel API inutile à chaque connexion
v2.18.12026-03-08
  • Modifié **Limite scans Pro** — réduction de la limite de scans manuels du plan Pro de 50 à 30 par mois. Code et textes mis à jour dans les 4 langues (en/fr/es/de)
  • Corrigé **Limite scans Business** — correction de la limite de scans manuels du plan Business (était `Infinity`, maintenant 100). Seul l'admin est illimité
  • Corrigé **Reset mensuel du compteur de scans** — ajout d'un reset lazy du compteur `scansThisMonth` (le compteur n'était jamais remis à zéro, bloquant les utilisateurs définitivement après X scans)
  • Corrigé **Affichage compteur scans** — le dashboard Billing affiche maintenant les scans du mois en cours (`scansThisMonth`) au lieu du total à vie
  • Corrigé **Alignement textes/code limites scans** — correction des incohérences entre les textes (5/50/200) et les valeurs réelles dans le code (10/30/100) pour les 3 plans dans les 4 langues
v2.18.02026-03-08
  • Ajouté **Langue allemande (DE)** — support complet de l'allemand comme 4ème langue : traductions UI (de.json), vulnérabilités (vulnerabilities/de.json), templates email (emails/de.js), drapeau SVG, intégration dans les imports (main.js, email.js, googleWebhook.js, downloadPdf.js)
  • Ajouté **News multilingues dynamiques** — refonte de l'éditeur de news admin : EN toujours obligatoire, ajout de langues supplémentaires via bouton (+), onglets dynamiques par langue. Champ `languages` stocké sur chaque news. Recherche admin étendue à toutes les langues. Chips de langues affichées dans la liste admin
  • Modifié **Rétention plan Free** — passage de 1 mois à 3 mois d'historique de scans (retentionDays 30 → 90). Textes pricing, FAQ et labels mis à jour dans les 4 langues
v2.17.12026-03-08
  • Modifié **Page Free Audit enrichie** — ajout de 3 sections marketing sous le formulaire : highlights des fonctionnalités, aperçu du rapport PDF (screenshots case study), et CTA vers l'inscription
v2.17.02026-03-08
  • Ajouté **Landing pages campagnes** — 3 pages dédiées pour Google Ads : `/agencies` (agences web, white label), `/developers` (développeurs, régressions), `/core-web-vitals` (métriques Google). Traduites en FR/EN/ES, intégrées au sitemap
  • Modifié **Limites de plans** — rétention réduite : free 1 mois (était 6), pro 6 mois (était 12), business 1 an (était 3 ans). URLs par projet pro : 3 (était 5)
  • Modifié **CheckoutView factorisé** — les features hardcodées en anglais sont remplacées par les traductions i18n de la page pricing
v2.16.22026-03-07
  • Ajouté **ProjectBanner sur la page scan** — affichage du screenshot et de l'URL du projet dans les résultats de scan, avec lien cliquable vers la page du projet
  • Sécurité **Codes de sécurité cryptographiques** — remplacement de `Math.random()` par `crypto.randomInt()` pour la génération des codes 2FA
  • Sécurité **Comparaison timing-safe** — les vérifications de codes de sécurité utilisent désormais `crypto.timingSafeEqual` pour prévenir les attaques par timing
  • Sécurité **Protection open redirect** — validation du paramètre `redirect` dans les pages d'authentification (signin, signup, verify-code)
  • Sécurité **Invalidation des sessions** — les autres sessions sont détruites lors d'un changement de mot de passe ou d'email
  • Sécurité **Fuite de stack trace** — les erreurs 500 n'exposent plus la stack trace en production
  • Sécurité **Secret de cookie** — le secret de session est désormais obligatoire en production (plus de fallback en dur)
  • Sécurité **CSP Helmet activé** — Content Security Policy configuré en production (script-src, style-src, frame-src, etc.)
  • Sécurité **Sanitization v-html** — les descriptions Stack Packs sont désormais sanitizées via DOMPurify
  • Sécurité **Webhook Stripe** — les messages d'erreur ne divulguent plus les détails Stripe internes
  • Sécurité **Sanitization HTML durcie** — restriction de l'attribut `style` au tag `span` uniquement, regex de couleur stricte
  • Sécurité **Rate limiting étendu** — ajout de limites sur change-password, change-email, verify-email-change
  • Sécurité **Plages IPv6 privées complètes** — ajout des plages `fd00:`, `::ffff:` mapped pour bloquer les scans sur IPs privées
  • Corrigé **Bug associates/invite.js** — correction d'un crash `ReferenceError` quand la variable `project` était utilisée avant sa déclaration
v2.16.12026-03-07
  • Corrigé **SSR 404 systématique** — toutes les pages retournaient HTTP 404 quand JavaScript est désactivé (le slash initial de l'URL était supprimé avant résolution du routeur Vue)
v2.16.02026-03-07
  • Ajouté **Page 404** — les URLs inexistantes affichent désormais une page 404 dédiée avec HTTP 404 au lieu de rediriger vers la homepage (amélioration SEO)
  • Ajouté **Méta dynamiques pour les news** — les pages de détail des articles ont désormais un titre, description et image OG uniques générés côté SSR. Schema JSON-LD `NewsArticle` avec auteur et dates
  • Ajouté **x-default dans le sitemap** — le générateur de sitemap inclut désormais le hreflang `x-default`
  • Modifié **Optimisation fonts** — suppression du double chargement Google Fonts dans `index.html` (déjà chargé via `style.css`) et de la police IBM Plex Mono inutilisée
  • Modifié **Remplacement de Plotly par Chart.js** — le graphique d'historique CWV utilise désormais Chart.js (tree-shaked) au lieu de `plotly.js-dist-min`, réduisant le bundle de ~4.6 MB à ~50 KB
  • Corrigé **robots.txt** — correction du domaine du sitemap (pointait vers un domaine inexistant)
  • Corrigé **Schema Pricing** — suppression du faux `AggregateRating` (données inventées)
  • Supprimé **`useMeta.js`** — composable jamais utilisé, supprimé (dead code)
  • Supprimé **`sitemap.xml` du dépôt Git** — fichier régénéré quotidiennement par cron, ne doit pas être versionné
v2.15.02026-03-07
  • Ajouté **Suppression de projet** — les propriétaires peuvent supprimer un projet depuis la page Paramètres (zone de danger). La suppression cascade sur tous les scans, statistiques, discussions et messages associés. Les associés perdent automatiquement l'accès
  • Ajouté **Navigation par clic sur les scores** — cliquer sur une carte de score (Performance, Accessibilité, SEO, Best Practices) redirige automatiquement vers l'onglet ou sous-onglet correspondant dans les résultats du scan
  • Corrigé **Badge non lu des news** — les news sans commentaire restaient toujours marquées comme non lues même après consultation, car la discussion nécessaire au suivi de lecture n'était créée qu'au premier commentaire
v2.14.0
  • Ajouté **Redirection post-auth vers le projet partagé** — lorsqu'un associé clique sur le lien d'un email de partage de projet, il est redirigé automatiquement vers la page du projet après connexion ou inscription (au lieu du dashboard)
  • Ajouté **Liens documentation dans les résultats de scan** — les éléments de sécurité documentés (headers HTTP, audits Lighthouse, warnings TLS, versions logicielles) affichent une icône "doc" avec tooltip, cliquable pour ouvrir la page de documentation correspondante dans un nouvel onglet
  • Ajouté **Badge non lu en cyan** — les badges de contenu non lu (news, discussions) utilisent la couleur primaire au lieu du rouge pour éviter la confusion avec les erreurs
  • Ajouté **Annulation des invitations en attente** — les propriétaires de projet peuvent annuler les invitations en attente d'un associé via un bouton dans la section "Invitations en attente" des paramètres du projet
  • Ajouté **Bannière projet partagée** — le titre, l'URL et le screenshot du projet sont affichés sur les pages Discussions et Paramètres via un composant `ProjectBanner` réutilisable
  • Ajouté **Lien résultats complets** — lien "Consulter tous les résultats de l'audit" sous les scores dans la page projet
  • Modifié **Logo email embarqué (CID)** — le logo VitaPulse dans les emails est désormais embarqué en pièce jointe CID au lieu d'être référencé par URL externe, garantissant son affichage dans Gmail, Outlook et tous les clients email
  • Modifié **Avatar email embarqué (CID)** — l'avatar de l'utilisateur dans les emails d'invitation associé est embarqué en pièce jointe CID pour un affichage fiable dans tous les clients email
  • Modifié **Menu header** — l'option "Administration" est déplacée juste avant "Déconnexion" (après le divider) au lieu d'être en première position
  • Modifié **MongoDB connection** — encodage `encodeURIComponent()` du nom d'utilisateur et mot de passe dans l'URI de connexion pour gérer les caractères spéciaux
  • Modifié **Traduction française** — remplacement de tous les termes "scan/scans" par "audit/audits" dans l'interface française
  • Modifié **Harmonisation responsive** — remplacement de tous les breakpoints hardcodés (768px, 960px, 600px) par des mixins SCSS centralisés (`max-md`, `max-sm`, `max-lg`) basés sur les variables du design system. Harmonisation des 4 pages projet (overview, settings, discussions, discussion detail) : même background (`$gradient-light`), même padding, même breakpoint (`max-md`), même variable `$header-height`. Remplacement de `calc(100vh - 72px)` par `$header-height` dans 6 pages app
v2.13.32026-03-06
  • Corrigé **Email partage projet** — l'email envoyé lors du partage d'un projet avec un associé déjà inscrit inclut désormais les scores de performance et les alertes de sécurité (headers manquants), comme c'était déjà le cas pour les invitations de nouveaux utilisateurs
  • Modifié **Factorisation `getProjectScanData()`** — la logique d'extraction des scores et headers de sécurité pour les emails d'invitation est centralisée dans `dbHelpers.js` (utilisée par `invite.js` et `share.js`)
v2.13.22026-03-06
  • Modifié **MongoDB indexes initialization** — `initializeCollections(db)` est désormais appelée au démarrage du serveur, garantissant la création des index sur toutes les collections (users, projects, scans, quickAudits)
  • Modifié **Optimisation N+1 project list** — remplacement de 2N requêtes individuelles (find + count par projet) par 2 aggregations batch (`$group` + `$facet`), réduisant drastiquement la charge MongoDB sur le dashboard
  • Modifié **Aggregation `$facet`** — les endpoints `GET /api/projects/:id/scans` et `GET /api/admin/projects/:id` combinent désormais data + count en une seule requête MongoDB au lieu de deux
  • Modifié **Admin scans pagination** — l'endpoint `GET /api/admin/scans` est désormais paginé (50 résultats/page avec navigation) au lieu de charger 200 résultats d'un coup
  • Modifié **Index compound scans** — ajout de l'index `{ projectId: 1, status: 1, createdAt: -1 }` pour optimiser les requêtes filtrées par statut
  • Corrigé **MongoDB sort memory overflow** — ajout de `allowDiskUse()` sur les requêtes de listing scans pour éviter le crash `QueryExceededMemoryLimitNoDiskUseAllowed` sur les collections volumineuses
v2.13.12026-03-06
  • Modifié **Sécurité : hashage des codes de vérification** — remplacement de l'encodage Base64 (réversible) par SHA-256 pour le stockage des codes de sécurité 2FA (`hashCode`/`verifyCode` dans `email.js`)
  • Modifié **Sécurité : projection MongoDB sur `users`** — exclusion systématique des champs sensibles (`password`, `securityCode`, `securityCodeExpires`, `securityCodeAttempts`) via `findUserSafe()` dans 18 fichiers API (billing, projects, associates, scans)
  • Modifié **Sécurité : sanitization formulaire de contact** — les champs `name`, `subject` et `message` sont désormais trimés et sanitizés via `sanitize-html` avant envoi
  • Modifié **Extraction IP centralisée** — remplacement de 9 occurrences de `req.headers['x-forwarded-for']` manuelles par `getClientIp(req)` dans les endpoints commentaires, discussions et admin
  • Modifié **Consolidation `escapeHtml`** — suppression des 2 implémentations dupliquées (entry-server.js, useMeta.js), import unique depuis `shared/utils.js`. Ajout de l'échappement des quotes simples (`'` → `'`)
  • Modifié **Helpers backend factorisés** — `parseObjectId()`, `parsePagination()`, `findUserSafe()` dans `dbHelpers.js` ; pagination utilisée dans 4 endpoints (logs, discussions, news, scans)
  • Modifié **Robustesse logging** — `logEvent()` loggue désormais les erreurs d'écriture MongoDB au lieu de les ignorer silencieusement
  • Modifié **Robustesse router** — le catch vide dans `router.beforeEach` loggue désormais les erreurs de vérification auth
v2.13.02026-03-06
  • Ajouté **Project discussions** — forum-style discussions for project associates. Owner and associates can create discussions, post messages, and track unread discussions. Accessible from the project overview via a "Discussions" button with unread badge.
  • Ajouté **Unified discussion system** — news comments and project discussions now share the same data architecture (`discussions`, `discussionMessages`, `discussionReads` collections) and reusable `CommentThread` component
  • Ajouté **Discussion email notifications** — configurable alerts for new discussions and new messages, with separate toggles in project settings (available for all plans)
  • Ajouté **Admin discussions page** — manage all discussions (news and projects) from admin panel with filtering by type and deletion capabilities
  • Ajouté **Rich text messages** — discussion messages and news comments now support rich text editing (TipTap) with full toolbar: bold, italic, underline, colors, headings, lists, blockquotes, code blocks, images, YouTube, links. Images uploaded to dedicated `public/uploads/discussions/` directory
  • Ajouté **Server-side HTML sanitization** — all user-generated HTML content (discussions and news comments) is sanitized server-side via `sanitize-html` to prevent XSS attacks. Only safe tags, attributes, and YouTube iframes are allowed
  • Ajouté **Client-side HTML sanitization** — DOMPurify applied to all `v-html` rendering (discussion messages, news article content, news comments)
  • Ajouté **Source Serif 4 content font** — discussion messages, news articles, and rich text editor now use Source Serif 4 (serif) for content readability, creating a clear visual distinction between app UI (Inter) and user-generated content
  • Ajouté **Page comments** — users can read and post comments on documentation pages (vulnerability details). Public read, authenticated write, comment count badges and unread indicators on the vulnerability list page. Admin panel updated with "Pages" filter for page-type discussions
  • Modifié **News comments** — migrated from `newsComments`/`newsReads` to unified `discussions`/`discussionMessages`/`discussionReads` collections (breaking: existing news comments are lost, fresh start)
  • Modifié **TiptapEditor** — moved from `components/admin/` to `components/common/` for reuse across discussions and news. Added `showRawMode` prop (raw HTML mode now admin-only)
  • Modifié **Discussion & news UI redesign** — card-based message layout with left accent border, proper page backgrounds (gradient-light), white card containers for articles and comments, improved typography with content font, hover effects on messages, styled empty states and form areas
  • Corrigé **News comment log events** — posting or editing a news comment now logs `news-comment-create` and `news-comment-edit` events (was missing)
v2.12.12026-03-03
  • Corrigé **Associate sharing bug** — re-inviting an accepted associate on a new project incorrectly returned an "already associate" error instead of sharing the project
  • Corrigé **Associate display per project** — associates tab in project settings now correctly filters by current project: shows only associates with access to this project, pending invitations for this project, and other associates without access
  • Corrigé **Project settings centering** — page was not centered due to missing `container-narrow` class
  • Ajouté **Associate empty states** — each section (project associates, pending invitations, other associates) now shows an explicit message when empty
  • Ajouté **Signup email pre-fill** — associate invitation emails for new users include the email as query parameter, pre-filling the signup form
v2.12.02026-03-02
  • Ajouté **User avatar system** — users can upload a profile picture (JPEG/PNG/WebP, 2MB max) from their account page. Avatar displayed in header menu, news comments, associate invite emails, and admin user pages
  • Ajouté **News author display** — news articles show "Published by {name}" with author avatar below the title. Author is automatically tracked when creating news
  • Modifié **Email templates** — added VitaPulse logo (icon-192.png) in email header above the brand name for better visual identity
  • Modifié **Associate invite emails** — include the inviter's avatar and name in a styled card
  • Corrigé **Security headers detection** — response headers were extracted from redirect responses (301/302) instead of the final response (200), causing security headers like `strict-transport-security` to be incorrectly reported as missing. Now uses `lhr.finalDisplayedUrl` for URL matching and filters only 2xx responses
v2.11.02026-03-01
  • Ajouté **Google Analytics 4 integration** — GA4 tracking with SSR-compatible injection, SPA page view tracking on route changes, and custom events for key user actions (sign_up, login, quick_audit, project_create, scan_start, pdf_download, begin_checkout, contact form, share report). Configurable via `GA_MEASUREMENT_ID` environment variable
  • Ajouté **Sitemap generator cron** — automated `public/sitemap.xml` generation with all static pages (11 routes × 3 locales with hreflang alternates) and dynamic news pages from database. Run via `npm run sitemap` or scheduled cron
  • Ajouté **Public news list page** — new paginated `/news` page accessible without authentication, SEO-indexable with cover images, excerpts and pagination. News routes moved from `/app/news/` to `/news/` for better search engine visibility
  • Ajouté **Dynamic news back link** — back button on news detail page dynamically adapts based on navigation history (returns to news list, dashboard or previous page)
  • Ajouté **TipTap HTML raw mode** — toggle button in the editor toolbar to switch between WYSIWYG and raw HTML editing, allowing direct HTML paste
  • Ajouté **Blog link in footer** — added Blog link in the Resources column of the footer
  • Modifié **Optimized robots.txt for SEO** — locale-aware Disallow rules for all private routes (`/*/app/`, `/*/signup`, `/*/signin`, `/*/auth/`, `/*/checkout`, `/*/report/`), allowing proper crawling of public content pages (landing, pricing, docs, news, case studies, etc.)
  • Modifié **Vue Router navigation guard** — migrated from deprecated `next()` callback to return-based API
  • Corrigé **TipTap duplicate extensions warning** — disabled `link` and `underline` in StarterKit config since they are added separately with custom configuration
  • Corrigé **News validation error messages** — admin news creation/update now returns specific missing field names instead of generic `error.validation`
  • Corrigé **NewsDetailView comments crash** — restored missing `comments` ref declaration
v2.10.02026-03-01
  • Ajouté **Email change with verification** — users can change their email address from the Account page via a secure 6-digit code sent to the new address (10 min expiry, 3 attempts max). Inline UI with two-step flow (enter new email → enter code)
  • Ajouté **Enriched associate invitation emails** — invitation emails now include latest performance scores (4 categories with color-coded badges) and missing high/medium-severity security headers to incentivize recipients to sign up and view full reports
  • Ajouté **Security alerts email helper** — new `renderSecurityAlerts()` shared helper in `emailLayout.js` for displaying missing security headers with severity badges
  • Ajouté **Responsive container widths** — optimized Vuetify container max-widths for all breakpoints (92% at md, 1080px at lg, 1400px at xl, 1800px at xxl) with `.container-narrow` opt-out for form/centered pages
  • Ajouté **`.form-narrow` utility class** — constrains form widths to 640px max, applied to ProjectSettingsView and ProjectNewView
  • Modifié **Unified email templates** — all 7 email types now share a consistent branded layout via `emailLayout.js` (gradient header with VitaPulse/e-xode branding, navigation footer with links to Pricing, Docs, Contact, Terms, Privacy). Factored shared helpers (score colors, CWV formatting, CTA buttons, code boxes) to eliminate duplication across locale files.
  • Modifié **Upgraded Vuetify from 3.x to 4.0.0** — full Material Design 3 migration
  • Modifié Migrated all typography classes from MD2 to MD3 (text-h1→text-display-large, text-body-2→text-body-medium, text-caption→text-body-small, etc.)
  • Modifié Migrated VRow grid props (`align` → CSS class, `dense` → `density="compact"`)
  • Modifié Updated SCSS breakpoints to MD3 values (md: 840px, lg: 1145px, xl: 1545px, xxl: 2138px)
  • Modifié Added `xxl` breakpoint mixin to SCSS design system
  • Modifié Added CSS reset for headings/paragraphs to replace Vuetify 4's removed global reset
  • Modifié Updated `vue` from 3.5.27 to 3.5.29
  • Modifié Updated `playwright` from 1.58.1 to 1.58.2
  • Modifié Updated `cors` from 2.8.5 to 2.8.6
  • Modifié Updated `vue-router` from 4.6.4 to 5.0.3
  • Modifié Updated `mongodb` from 6.21.0 to 7.1.0
  • Modifié Updated `nodemailer` from 6.10.1 to 8.0.1
  • Modifié Updated `stripe` from 14.25.0 to 20.4.0
  • Modifié Updated `@stripe/stripe-js` from 3.5.0 to 8.8.0
  • Corrigé **Email link colors** — fixed link colors being overridden by email clients (Gmail, Outlook) using `<span>` wrapper technique
  • Corrigé **Pending associates visibility** — associates with pending status now appear in the project settings list instead of being hidden until they accept
  • Corrigé **Node watch paths** — added `src/translate/emails/` to `--watch-path` list for email template hot-reload in development
v2.9.02026-02-28
  • Ajouté Security vulnerabilities documentation page (`/docs/vulnerabilities`) with detailed guides for HTTP security headers, TLS/SSL, Lighthouse security audits, and software version exposure (26 vulnerabilities total)
  • Ajouté Separate translation files for vulnerabilities (`src/translate/vulnerabilities/en.json`, `fr.json`)
  • Ajouté Vulnerability detail view with route `/docs/vulnerabilities/:id` and breadcrumb navigation
  • Ajouté Vulnerabilities listed in Docs page section #10 with severity chips and direct links
  • Ajouté 4 vulnerability categories: HTTP Security Headers (10), TLS/SSL Certificate (5), Lighthouse Security Audits (7), Software Version Exposure (4)
  • Ajouté Spanish language support (es.json, vulnerability translations, email templates, flag icon)
  • Ajouté Centralized locale configuration (`SUPPORTED_LOCALES`, `LOCALE_CODES`, `getIntlLocale()`, `getOgLocale()` in `shared/const.js`) — adding a new language only requires updating the single source of truth
  • Ajouté Changelog page now auto-generated from `CHANGELOG.md` — single source of truth, no duplication in translation files
  • Modifié Redesigned header action elements (language switcher, account, sign in) with consistent pill-style buttons using shared SCSS mixin
  • Modifié Language switcher now displays country flag emoji (🇬🇧/🇫🇷) with locale code, clearly interactive at rest
  • Modifié CTA buttons (Dashboard, Start Free) use rounded pill style for visual consistency
  • Modifié Mobile drawer language buttons also show flag emojis
v2.8.32026-02-28
  • Corrigé PDF section order now matches app tab order: Security → Quality → Performance → Resources → Advanced (Global → Framework → Critical Chains → Scripts Treemap → Audit Timing → Passed)
  • Corrigé Moved `runWarnings` from after CWV to Advanced/Global section in PDF
  • Corrigé Moved `console` to first position in Advanced section in PDF
  • Corrigé Added missing translation key `scan.details.showAll` (EN/FR)
v2.8.22026-02-28
  • Modifié Moved Server Response Time block from Advanced > Global to Performance tab (displayed before Opportunities/Diagnostics)
  • Modifié PDF report updated to match new Server Response Time placement
v2.8.12026-02-28
  • Ajouté Advanced tab split into 6 sub-tabs: Global, Framework, Critical Chains, Scripts Treemap, Audit Timing, Passed
  • Ajouté New components: `ScanStackPacksSection`, `ScanCriticalChainsSection`, `ScanScriptTreemapSection`, `ScanAuditTimingSection`
  • Modifié Advanced > Global sub-tab: Console section displayed first, then Server Response Time, then remaining technical data
  • Modifié Fixed console section scrollbar overflow (removed unnecessary max-height constraint)
  • Corrigé Console section displaying unwanted horizontal/vertical scrollbars
v2.8.02026-02-28
  • Ajouté HTTP response headers extraction from Lighthouse artifacts (`NetworkRecords`) during scans
  • Ajouté Standalone Security tab in scan results with four sub-tabs: "TLS Certificate", "Response Headers", "Software Versions" and "Lighthouse Audits"
  • Ajouté Security headers analysis: 10 critical headers checked (HSTS, CSP, X-Frame-Options, etc.) with present/missing status and risk severity levels (high/medium/low)
  • Ajouté Full response headers table in Security > Headers sub-tab
  • Ajouté TLS certificate analysis: protocol version, cipher suite, signature algorithm, issuer, expiration with warnings for weak/expired certificates
  • Ajouté Software versions detection from HTTP headers (Server, X-Powered-By), HTML content (CMS, meta generator, frameworks) and TLS protocol
  • Ajouté PDF report: security section now includes TLS certificate, response headers, software versions and Lighthouse security audits
  • Ajouté Global CSS gap utilities (`.gap-1` to `.gap-16`) in design system — fixes all `gap-*` classes that were non-functional with Vuetify
  • Ajouté Lighthouse scores sorted worst-to-best on scan details page and project overview page
  • Ajouté Core Web Vitals sorted worst-to-best on scan details page and project overview page
  • Ajouté Quick stats clickable: navigate to corresponding tab and sub-tab with smooth scroll
  • Ajouté Passed audits click scrolls directly to Passed section anchor within Advanced tab
  • Modifié Scan result tabs reordered: Security → Quality → Performance → Resources → Advanced
  • Modifié Security tab is now the default selected tab on scan results
  • Modifié Security issues moved from Quality tab sub-tab to standalone Security tab
  • Modifié Scan results overview layout reorganized: environment chips before quick-stats, screenshot in 3rd column
  • Modifié Loading timeline moved from overview to Resources tab (after stat-cards, before resources by type)
  • Modifié Quality tab reduced from 4 sub-tabs to 3 (accessibility, SEO, best practices)
v2.7.12026-02-28
  • Modifié Refactored project creation wizard: removed step 4 (scan progress), now redirects to project overview after creation where `ScanProgressCard` handles scan progress display
  • Modifié Project creation wizard reduced from 4 steps to 3 steps (Info → Pages → Alerts → Launch)
  • Corrigé Dashboard news section not displaying: `NewsSection` was reading `data.news` instead of `data.items` from API response
  • Corrigé Scan results: overview section extracted from tabs and displayed permanently between CWV and tab navigation
v2.7.02026-02-28
  • Ajouté Localized URLs: all routes now prefixed with locale (`/en/*`, `/fr/*`)
  • Ajouté `useLocalePath` composable for locale-aware navigation
  • Ajouté Automatic locale detection from browser on first visit
  • Ajouté SEO: hreflang, canonical, og:locale, and Schema.org inLanguage in SSR
  • Ajouté Locale switcher updates URL path in real-time
  • Ajouté News system: CRUD backend with bilingual content (FR/EN), cover image upload, sticky/homepage banner flags
  • Ajouté News comments with moderation: users can post, edit own comments; admin approval workflow with pending/approved/rejected status
  • Ajouté Comment rate limiting: configurable max comments per time window via admin settings
  • Ajouté Admin news management: TipTap WYSIWYG editor, bilingual tabs, publish/draft, sticky and homepage banner controls
  • Ajouté Admin comments moderation panel: approve, reject, delete comments with filters
  • Ajouté Dashboard news section: latest 3 articles with unread badge and sticky indicator
  • Ajouté News detail page with full content rendering and comments section
  • Ajouté Homepage news banner: dismissible gradient banner for featured articles
  • Ajouté IP tracking: user login IPs stored with history for security auditing
  • Ajouté User blocking system: admin can block by account and/or IP addresses
  • Ajouté Admin user detail: security section with block/unblock UI, IP history table with per-IP status and unblock action
  • Ajouté Admin bypass: administrators exempt from all plan limits (projects, scans, associates, pages)
  • Ajouté Favicon: SVG/PNG/ICO with VitaPulse branding (gradient V + pulse line)
  • Ajouté News publicly accessible: reading news and comments no longer requires authentication
  • Ajouté Comment posting/editing still requires authentication, with "Sign in to comment" prompt for visitors
  • Ajouté Centralized event logging system: `logEvent()` helper, `logs` collection, admin logs page with search/filter/delete
  • Ajouté Event logging instrumented across all endpoints: auth, projects, scans, billing, associates, admin, contact, quick audit, PDF download (40+ events)
  • Ajouté Admin user detail: recent activity logs section with link to filtered logs page
  • Ajouté Forgot password flow: email verification code, reset password page
  • Ajouté Change password: authenticated users can change password from account page
  • Ajouté Account page: profile editing (name) and password change under `/app/account`
  • Modifié Pricing FAQ completely rewritten with 20 comprehensive questions covering all features, plans, and capabilities
  • Modifié Backend-generated URLs (Stripe checkout, emails, Google Chat webhooks, share links) now include locale prefix
  • Modifié Admin user detail page shows IP history and blocking controls
  • Modifié SCSS design system: all hardcoded hex colors, border-radius, font-size, font-weight replaced with variables across 30+ files
  • Modifié New SCSS mixins: `hover-row`, `hover-lift`, `hover-light-on-dark`, `link-on-dark`, `link-primary` for consistent hover effects
  • Modifié Removed unused SCSS mixins (`status-good/warning/error`, `score-gauge`)
  • Modifié Added `$border-radius-xs`, `$gradient-dark-diagonal` SCSS variables
  • Modifié Favicon and apple-touch-icon now use relative paths (fixes cross-origin issues in dev)
  • Modifié Removed orphan `src/views/auth/` directory (duplicate of `src/views/Auth/`)
  • Modifié Refactored: auth page SCSS extracted to global `.auth-page` class in `_components.scss`
  • Modifié Refactored: `getEventColor`/`getEventCategory`/`formatLogMeta` extracted to `useLogUtils` composable
  • Modifié Refactored: business downgrade logic extracted to `handleBusinessDowngrade()` in `dbHelpers.js`
  • Modifié Refactored: inline URL truncation styles replaced with `.admin-url-truncate` SCSS class
  • Modifié Logger `logEvent()` changed to fire-and-forget with `.catch(() => {})` (no more async/await)
  • Sécurité ObjectId validation added to all news/comments API endpoints
  • Sécurité ObjectId.isValid() validation added to all API endpoints accepting ID parameters (17+ routes)
  • Sécurité Error logging (`console.error`) added to all catch blocks across the entire API (15+ files)
  • Sécurité Blocked users/IPs rejected at login with appropriate error messages
  • Sécurité MongoDB projection added to user query in lighthouse.js to exclude password hash
  • Sécurité Webhook error responses standardized to JSON format
  • Sécurité setReference race condition fixed with atomic bulkWrite operation
  • Corrigé Hardcoded French progress messages in scan store replaced with i18n keys (`scan.progress.*`)
  • Corrigé Default locale inconsistency: backend now uses `DEFAULT_LOCALE` ('en') everywhere instead of mixed 'fr'/'en'
  • Corrigé Hardcoded French in `useDateFormat.js` replaced with i18n keys (`dashboard.fewSeconds`, `dashboard.days`)
  • Corrigé Default locale for `formatDateShort`/`formatDateFull` changed from `'fr-FR'` to `'en-US'`
  • Corrigé Scan status colors centralized in `SCAN_STATUS_COLORS` constant (removed duplication in 3 admin views)
  • Corrigé ObjectId validation added to `findUserOrSharedProject` helper (prevents crash on invalid IDs)
  • Corrigé Cron notifications now log warnings on failure instead of silently swallowing errors
  • Corrigé Cron scheduled scans now validate `project.url` before launching scan
  • Corrigé TiptapEditor image upload now handles fetch errors and checks `res.ok`
  • Corrigé Unused `shallowRef` import removed from NewsDetailView
  • Corrigé Unused `mdiEyeOff` import removed from AdminNewsEditView
v2.6.12026-02-27
  • Modifié CWV tooltips on scan detail page now show per-metric descriptions matching project overview page
  • Modifié Removed non-functional expandable CWV cards on scan detail page
  • Modifié Added spacing between Mobile/Desktop toggle buttons
  • Modifié Removed share report button from scan detail page
v2.6.02026-02-27
  • Ajouté Plan upgrade/downgrade with Stripe proration (Pro ↔ Business, monthly ↔ yearly)
  • Ajouté Upgrade preview dialog showing prorated amount before confirmation
  • Ajouté Webhook handler for `customer.subscription.updated` as backup sync
  • Ajouté Checkout guard preventing duplicate subscriptions
  • Ajouté Project screenshot thumbnail on dashboard cards and project overview header
  • Ajouté Placeholder image for projects without scans (VitaPulse branded SVG)
  • Modifié Upgrade button in Billing page now opens inline preview dialog instead of redirecting to pricing
  • Modifié Pricing page buttons adapt for existing subscribers (upgrade, downgrade, cycle change)
  • Modifié Downgrade from Business automatically revokes associates
  • Modifié Admin downgrade from Business now properly revokes associates and cleans shared projects
v2.5.12026-02-27
  • Ajouté Associates can now view project settings in read-only mode
  • Ajouté Associates can manage their own email notification preferences (scan results and regression alerts) based on their plan
  • Ajouté Associate notification emails are sent after each scan completion
v2.5.02026-02-27
  • Modifié Case Studies page: fixed all section-to-page mappings to match actual PDF content (16 sections for 28 pages)
  • Modifié Case Studies page: corrected metrics values (mobile 82, desktop 78)
  • Modifié Documentation page: complete rebuild with comprehensive VitaPulse user guide (10 sections: Quick Audit, Projects, Scans, Scores, CWV, Opportunities, Regressions, PDF Reports, Associates, Plans)
  • Modifié Documentation page: added quick start cards, table of contents, and screenshot illustrations
  • Modifié Landing page: enhanced features section with 6 benefit cards and 4 illustrated feature showcases
  • Modifié Changelog page: complete rewrite with full version history (v1.0.0 to v2.4.0)
  • Modifié Security page: updated with VitaPulse-specific security practices and technical details
  • Modifié Terms of Service: comprehensive rewrite with 12 sections covering SaaS-specific terms
  • Modifié Privacy Policy: GDPR-compliant rewrite with detailed data collection, storage, and rights information
  • Modifié Cookie Policy: rewritten to reflect actual minimal cookie usage (single session cookie)
  • Supprimé API documentation page and route (no public API)
  • Supprimé Blog page link from footer (no blog content)
  • Supprimé Status page link from footer
v2.4.12026-02-26
  • Modifié Project settings page: split into tabs (Settings / Associates) for Business plan users
  • Modifié Dashboard: search field and project filter now on the same line
  • Corrigé Associates tab not switching (missing activeTab ref)
  • Corrigé Invite button not vertically centered next to email input
v2.4.02026-02-26
  • Ajouté Associates system for Business plan users: invite up to 5 associates by email to share project access
  • Ajouté Associates management section in project settings (invite, share, remove per project)
  • Ajouté Dashboard filter (All / My projects / Shared with me) with shared badge showing owner name
  • Ajouté Email invitation templates for associates (existing user + new user) in EN/FR
  • Ajouté Automatic project linking when invited associate registers a new account
  • Ajouté Associate access inheritance: associates inherit PDF download and report sharing capabilities from project owner's plan
  • Ajouté Scan ownership awareness: project owners can manage scans launched by associates
  • Ajouté Automatic associate revocation on plan downgrade (Business → Pro/Free)
v2.3.22026-02-26
  • Corrigé Global button spacing: adjacent buttons in card actions are no longer visually stuck together
  • Corrigé CWV history chart now auto-rebuilds project stats from existing scans when collection is empty
v2.3.12026-02-22
  • Corrigé Admin scores display not showing due to per-device nested data structure
  • Corrigé Admin CWV table empty due to same nested structure issue
  • Corrigé Scan detail page now shows scores and CWV per device with mobile/desktop toggle
v2.3.02026-02-22
  • Ajouté Admin user detail page with editable plan, type, name, company
  • Ajouté User projects list in admin user detail
  • Ajouté Clickable rows in admin users table
  • Ajouté Admin project detail page with editable name, URL, scan frequency
  • Ajouté Project scans list in admin project detail with status, score, device
  • Ajouté Clickable project rows in admin projects list and user detail
  • Ajouté Link to project owner from project detail page
  • Ajouté Admin scan detail page with scores, CWV, regressions display
  • Ajouté Editable scan status and reference flag from admin
  • Ajouté Admin scan delete with confirmation dialog
  • Ajouté Clickable scan rows in admin scans list and project detail
  • Ajouté Links to owner and project from scan detail page
v2.2.12026-02-22
  • Corrigé Landing page hero section alignment and height
v2.2.02026-02-22
  • Ajouté User `type` field (`user` default, `admin` manual) for role-based access
  • Ajouté Admin dashboard with user listing (email, plan, projects, scans, registration date)
  • Ajouté Admin projects page listing all projects with owner, scan count, latest score
  • Ajouté Admin scans page listing 200 most recent scans with project, owner, status, score, duration
  • Ajouté `requireAdmin` middleware for admin-only API endpoints
  • Ajouté Admin menu in header (crown icon) visible only for admin users
  • Ajouté Admin route guard (`requiresAdmin`) on frontend router
  • Modifié CWV history chart now uses dedicated `projectStats` collection with incremental aggregation instead of paginated scan data
  • Modifié Stats are pushed to `projectStats` on each scan completion (no cron needed)
  • Modifié New `GET /api/projects/:id/stats` endpoint for lightweight chart data
v2.1.02026-02-21
  • Ajouté "Set as reference" action on scan details page with `isReference` badge display
  • Ajouté Network requests table in Resources tab (URL, type, protocol, status, transfer/resource size, priority)
  • Ajouté Main thread time column in third-party summary table
  • Ajouté Parse/Compile column in script bootup table
  • Ajouté Overview stat cards in Resources tab (requests, transferred, third parties count, JS libraries count)
  • Ajouté Show more/less toggle on script bootup, third-party, and network requests tables
  • Ajouté Core Web Vitals history chart (Plotly) on project overview page, visible when at least 2 completed scans exist
  • Modifié Merged "Insights" tab into "Performance" tab (opportunities + diagnostics + insights)
  • Modifié Merged "Technical", "Console", and "Passed" tabs into a single "Advanced" tab
  • Modifié Replaced `v-btn-toggle` navigation with `v-tabs` for scan result sections
  • Modifié Redesigned Resources tab with section headers, sorted resource bars, and detailed tables
  • Modifié Third-party section now displays data directly from `thirdPartySummary` with entity name and main thread time
  • Modifié Replaced `networkSummary` (aggregate) with detailed `networkRequests` table
  • Modifié Regression detection now prioritizes scans marked as `isReference` before falling back to latest scan
  • Modifié Synchronized PDF report generation with all scan result display changes (4 stat cards, parseCompile column, network requests table, third-party mainThreadTime, section ordering)
v2.0.02026-02-15
  • Ajouté Comprehensive PDF report generation matching the full application display with 25+ sections (screenshots, filmstrip, audit detail tables, resource bar charts, critical chains, layout shifts, script treemap, entities, BF cache, user timings, server response time, config settings)
  • Ajouté Case studies page with real audit data from www.e-xode.net (23-page PDF, per-page screenshots, key metrics, takeaways)
  • Ajouté Complete i18n localization system with `createT(locale)` server-side translation resolver
  • Ajouté Shared component library: 13 reusable components extracted (`AlertError`, `ConfirmDialog`, `DataTable`, `EmptyState`, `LoadingSpinner`, `PageHeader`, `ScoreCircle`, `ScanProgressCard`, `SearchInput`, `SectionCard`, `StatCard`, `StatusChip`, `UpgradeCta`)
  • Ajouté Shared utilities module (`shared/utils.js`) with `escapeHtml`, `formatBytes`, `formatMs`, `getScoreColor`, `getScoreLabel`, `getScoreBg`, `getCwvStatus`, `getCwvColor`, `formatCwvValue`
  • Ajouté Shared constants module (`shared/const.js`) with `DEVICES`, `CWV_METRICS`, `INSIGHTS_FAILING_THRESHOLD`, `SCAN_DATA_FIELDS`
  • Ajouté Shared database helpers (`shared/dbHelpers.js`) for MongoDB operations
  • Ajouté Shared API client (`shared/api.js`) with centralized error handling
  • Ajouté Rate limiting on all API endpoints with configurable windows
  • Ajouté Session management with automatic cleanup on dev startup
  • Ajouté Version number displayed in application footer
  • Ajouté PDF White Label mode for Business plan users
  • Ajouté App version exposed via Vite `define` for frontend access
  • Modifié Rewrote `pdfTemplate.js` (~580 lines) with all scan data sections, matching app UX/design (brand gradient, score colors, impact badges, CWV thresholds)
  • Modifié Rewrote `downloadPdf.js` with comprehensive `preparePdfData()` extracting all 35+ scan data fields per device
  • Modifié Refactored all Pinia stores to use shared utilities and constants
  • Modifié Refactored all API endpoints to use shared database helpers and middleware
  • Modifié Updated all Vue components to use shared component library
  • Modifié Migrated all hardcoded strings to i18n translation files (en.json, fr.json)
  • Modifié Updated `entry-server.js` with i18n-aware SSR (`getRouteMeta`, `generateMetaTags`, `getSchemaMarkup`)
  • Modifié Updated `index.html` with `<!--app-lang-->` placeholder for dynamic lang attribute
  • Modifié Rewrote `CaseStudiesView.vue` with real audit content and PDF page screenshots
  • Modifié Improved error handling across all API routes with safe JSON parsing
  • Corrigé Security audit: input validation, authorization checks, rate limiting on all endpoints
  • Corrigé Data parity between scan storage and display fields
  • Corrigé Docker and Playwright configuration for PDF generation
  • Corrigé Session cleanup preventing stale session file accumulation
  • Corrigé Rate limiting configuration for different endpoint categories
  • Corrigé SSR hydration for localized meta tags and schema markup
  • Corrigé Translation key consistency across all components
  • Sécurité Added `requireAuth` middleware on all protected routes
  • Sécurité Added input sanitization with `escapeHtml` utility
  • Sécurité Enforced ownership checks on scan/project access
  • Sécurité Configured Helmet CSP and CORS policies
  • Sécurité Added rate limiting per API category (auth, scans, general)
v1.3.02026-02-10
  • Ajouté Case studies page showcasing VitaPulse audit capabilities
  • Ajouté GitHub Actions workflow for CI testing
  • Modifié Layout improvements across all views
  • Modifié Translation updates for all supported locales
  • Modifié Major layout and code refactoring
v1.2.02026-02-07
  • Ajouté Coupon management system for Stripe payments
  • Ajouté Quick audit rate limiting (max audits per plan)
  • Ajouté Automated cron jobs for data pruning
  • Ajouté Email notifications with scoring reports
  • Ajouté Multi-page scan support
  • Modifié Pricing logic refactored with plan-based feature gating
  • Modifié Header theme improvements
  • Modifié Report results display fixes
  • Corrigé Docker environment variables for Stripe integration
  • Corrigé Translation consistency issues
v1.1.02026-02-06
  • Ajouté PDF report export with Chromium rendering
  • Ajouté SEO optimizations (meta tags, schema markup, sitemap)
  • Ajouté Scan animation and progress indicators
  • Ajouté CSS design system with variables and mixins
  • Ajouté Detailed audit results display (8 tabbed sections)
  • Ajouté New project creation workflow with guided steps
  • Modifié Factorized scan animation components
  • Modifié Server-side rendering fixes for Vue Router
  • Corrigé Translation loading and fallback behavior
  • Corrigé Server rendering hydration issues
v1.0.02026-02-04
  • Ajouté Initial release of VitaPulse platform
  • Ajouté Lighthouse 12 audit engine integration
  • Ajouté Core Web Vitals monitoring (LCP, FCP, CLS, TBT, INP, TTFB, Speed Index, TTI)
  • Ajouté Mobile and desktop device analysis
  • Ajouté Performance, Accessibility, Best Practices and SEO scoring
  • Ajouté Stripe payment integration with Pro and Business plans
  • Ajouté User authentication with email verification
  • Ajouté Legal pages (Terms, Privacy, Cookies)
  • Ajouté CORS and security configuration
  • Ajouté Docker containerization with docker-compose