Dmitri d4a5378adf Refactor: migrate frontend to Vite/React, add product backend modules
Frontend:
- Replace Next.js with Vite + React + TypeScript
- Add new component architecture (app-shell, sidebar, dashboard modules)
- Implement product modules: FRAME, safety protocols, walkthrough checkin,
  campus/staff attendance, personality quiz, sign language, classroom timer
- Add shadcn/ui component library with Tailwind CSS
- Remove legacy generated components, stores, and pages

Backend:
- Add product migrations: frame_entries, user_progress, safety_quiz_results,
  walkthrough_checkins, communication_events, personality_quiz_results,
  campus_attendance_config/summaries, staff_attendance_records, content_catalog
- Add corresponding models, services, and routes
- Implement cookie-based auth with refresh token rotation
- Add content catalog seeder with product content
- Migrate to ESLint flat config
- Switch from yarn to npm

Infrastructure:
- Update .gitignore for new tooling
- Add project documentation (CLAUDE.md, docs/)
- Remove deprecated config files and yarn.lock

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-06-09 15:18:23 +02:00

56 lines
2.1 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"pages": {
"dashboard": {
"pageTitle": "Tableau de bord",
"overview": "Vue d'ensemble",
"loadingWidgets": "Chargement des widgets...",
"loading": "Chargement..."
},
"login": {
"pageTitle": "Connexion",
"sampleCredentialsAdmin": "Utilisez {{email}} / {{password}} pour vous connecter en tant quadministrateur",
"sampleCredentialsUser": "Utilisez {{email}} / {{password}} pour vous connecter en tant quutilisateur",
"form": {
"loginLabel": "Identifiant",
"loginHelp": "Veuillez saisir votre identifiant",
"passwordLabel": "Mot de passe",
"passwordHelp": "Veuillez saisir votre mot de passe",
"remember": "Se souvenir de moi",
"forgotPassword": "Mot de passe oublié ?",
"loginButton": "Se connecter",
"loading": "Chargement…",
"noAccountYet": "Vous navez pas encore de compte ?",
"newAccount": "Créer un compte"
},
"pexels": {
"photoCredit": "Photo de {{photographer}} sur Pexels",
"videoCredit": "Vidéo de {{name}} sur Pexels",
"videoUnsupported": "Votre navigateur ne prend pas en charge la balise vidéo."
},
"footer": {
"copyright": "© {{year}} {{title}}. Tous droits réservés",
"privacy": "Politique de confidentialité"
}
}
},
"components": {
"widgetCreator": {
"title": "Créer un graphique ou un widget",
"helpText": "Décrivez votre nouveau widget ou graphique en langage naturel. Par exemple : \"Nombre d'utilisateurs administrateurs\" OU \"graphique rouge avec le nombre de contrats clôturés regroupés par mois\"",
"settingsTitle": "Paramètres du créateur de widget",
"settingsDescription": "Pour quel rôle affichons-nous et créons-nous des widgets ?",
"doneButton": "Terminé",
"loading": "Chargement..."
},
"search": {
"placeholder": "Rechercher",
"required": "Champ requis",
"minLength": "Longueur minimale : {{count}} caractères"
}
}
}