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.0 KiB
JSON

{
"pages": {
"dashboard": {
"pageTitle": "Tablero",
"overview": "Resumen",
"loadingWidgets": "Cargando widgets...",
"loading": "Cargando..."
},
"login": {
"pageTitle": "Inicio de sesión",
"sampleCredentialsAdmin": "Use {{email}} / {{password}} para iniciar sesión como Administrador",
"sampleCredentialsUser": "Use {{email}} / {{password}} para iniciar sesión como Usuario",
"form": {
"loginLabel": "Usuario",
"loginHelp": "Introduzca su usuario",
"passwordLabel": "Contraseña",
"passwordHelp": "Introduzca su contraseña",
"remember": "Recuérdame",
"forgotPassword": "¿Olvidó su contraseña?",
"loginButton": "Acceder",
"loading": "Cargando...",
"noAccountYet": "¿Aún no tiene una cuenta?",
"newAccount": "Crear cuenta"
},
"pexels": {
"photoCredit": "Foto de {{photographer}} en Pexels",
"videoCredit": "Vídeo de {{name}} en Pexels",
"videoUnsupported": "Su navegador no admite la etiqueta de vídeo."
},
"footer": {
"copyright": "© {{year}} {{title}}. Todos los derechos reservados",
"privacy": "Política de privacidad"
}
}
},
"components": {
"widgetCreator": {
"title": "Crear gráfico o widget",
"helpText": "Describe tu nuevo widget o gráfico en lenguaje natural. Por ejemplo: \"Número de usuarios administradores\" O \"gráfico rojo con el número de contratos cerrados agrupados por mes\"",
"settingsTitle": "Configuración del creador de widgets",
"settingsDescription": "¿Para qué rol estamos mostrando y creando widgets?",
"doneButton": "Listo",
"loading": "Cargando..."
},
"search": {
"placeholder": "Buscar",
"required": "Obligatorio",
"minLength": "Longitud mínima: {{count}} caracteres"
}
}
}