- Ajout de lib/rate-limit.js : fabrique de limiter en mémoire (closure +
Map avec nettoyage lazy), sans dépendance externe, réutilisable
- Ajout de middleware.js : intercepte /api/auth/register (5 req/15min)
et /api/auth/callback/credentials (10 req/5min), répond 429 + Retry-After
- Ajout de tasks/todo.md et tasks/lessons.md (suivi CLAUDE.md)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Ajout useTheme pour accès aux couleurs Material-UI
- Utilisation theme.palette.text.secondary pour le markdown
- Compatible thèmes sombre et clair
- Texte markdown maintenant lisible sur tous fonds
- Upgrade Next.js de 14.2.3 vers 15.4.3
- Upgrade React et React DOM vers version 19
- Modification page dynamique [id] pour compatibilité Next.js 15
- Gestion asynchrone des params et searchParams
- Tests de build et développement réussis
- Composant PrintButton avec fenêtre popup dédiée
- Styles CSS print-optimized pour A4 avec media queries
- Support markdown complet avec rendu approprié
- Interface print avec boutons Imprimer/Fermer
- Feedback snackbar cohérent avec autres composants
- Intégré dans VersionPage, ListVersions et VersionTimeline
- Calcul isVoteDisabled basé sur 3 jours après création
- Désactivation VoteButtons pour versions anciennes
- Chip visuel "Vote fermé" pour versions expirées
- Cohérence avec VersionPage et VersionComparison
- Parser markdown avec marked pour rendu HTML complet
- Styles CSS pour éléments markdown (headings, listes, code, etc.)
- Nettoyage automatique des styles temporaires
- Fallback texte brut si parsing markdown échoue
- Notifications snackbar pour partage natif et copie presse-papier
- Gestion erreurs avec messages appropriés
- Fallback complet pour navigateurs plus anciens
- État voteRefreshKey partagé pour forcer refresh des VoteButtons
- Props onVoteResult passées à VersionComparison
- Clés uniques pour chaque VoteButtons (header/comparison)
- Snackbar local dans VersionComparison si pas de callback parent
- Callback onVoteResult pour VoteButtons avec notifications
- Snackbar pour confirmer succès/erreur des votes
- État snackbar avec gestion des messages
- Ajout ShareButton dans colonnes Actions table et cards timeline
- Génération URLs partageables vers versions spécifiques
- Support partage natif avec fallback copie presse-papier
- Route app/dashboard/versions/[id]/ pour URLs spécifiques
- Composant VersionPage avec affichage et partage natif
- Support modes comparison/content via paramètre URL