Employee Of The Month es una plataforma gamificada para entornos empresariales que transforma la gestión del rendimiento de los empleados en una experiencia interactiva y motivadora. La aplicación combina elementos de videojuegos con herramientas de productividad para crear un sistema que fomenta el reconocimiento, la sana competencia y el desarrollo profesional.
Desarrollada con Django y Django REST Framework, esta plataforma ofrece tanto una interfaz web completa como una API RESTful para integración con otros sistemas empresariales.
- Sistema de puntuación: Los empleados acumulan puntos por completar tareas, alcanzar objetivos y recibir reconocimientos.
- Niveles de progresión: Los usuarios avanzan por diferentes niveles a medida que acumulan experiencia.
- Tabla de clasificación (Leaderboard): Muestra los 15 mejores empleados según su rendimiento.
- Logros y medallas: Recompensas virtuales por hitos específicos o comportamientos deseados.
- Misiones y desafíos: Tareas específicas que los empleados pueden completar para ganar puntos adicionales.
- Registro personalizado: Proceso de registro con verificación por correo electrónico.
- Autenticación flexible: Inicio de sesión con nombre de usuario o correo electrónico.
- Perfiles de usuario: Cada empleado tiene un perfil personalizable con estadísticas y logros.
- Roles y permisos: Diferentes niveles de acceso para empleados, gerentes y administradores.
- Dashboard personalizado: Interfaz principal con estadísticas relevantes para cada usuario.
- Visualización de progreso: Seguimiento visual del avance hacia objetivos y niveles.
- Notificaciones: Sistema de alertas para nuevos logros, cambios de posición en el ranking, etc.
- Gestión de tareas: Asignación y seguimiento de responsabilidades laborales.
- Documentación completa: Endpoints documentados con Swagger y ReDoc.
- Autenticación mediante Token y JWT: Seguridad robusta para acceso a la API.
- Versionado: Soporte para diferentes versiones de la API.
- Throttling y caché: Limitación de tasas y optimización del rendimiento.
- Estructura modular: Aplicaciones separadas por dominio funcional.
- Middleware personalizado: Para procesamiento de solicitudes, autenticación, etc.
- Sistema ORM: Modelos optimizados con índices y relaciones apropiadas.
- Señales: Implementación de señales de Django para operaciones asíncronas.
- Gestión de caché: Configuración de Redis para almacenamiento en caché.
- Serializers: Conversión bidireccional entre modelos y datos JSON.
- ViewSets y Routers: Estructura consistente para endpoints de API.
- Filtrado, ordenación y paginación: Funcionalidades avanzadas para consulta de datos.
- Validación de datos: Sistema robusto para entrada de datos.
- PostgreSQL: Base de datos principal con configuración optimizada.
- Migraciones: Control de versiones para la estructura de la base de datos.
- Consultas optimizadas: Uso de select_related, prefetch_related y funciones avanzadas de SQL.
- Indexación: Índices estratégicos para consultas frecuentes.
- TailwindCSS: Framework de CSS utilizable para el diseño responsive.
- Glassmorphism Design: Estética moderna con efectos de transparencia y desenfoque.
- JavaScript: Interactividad en el lado del cliente.
- Componentes reutilizables: Estructura modular para mantener la consistencia visual.
- Animaciones fluidas: Transiciones de elemento suaves para mejorar la experiencia.
- Diseño responsive: Adaptación completa a dispositivos móviles y de escritorio.
- Accesibilidad: Implementación de prácticas WCAG 2.1 para accesibilidad.
- Modo oscuro/claro: Soporte para diferentes preferencias de visualización.
- Autenticación multifactor: Capa adicional de seguridad opcional.
- Protección CSRF y XSS: Medidas contra ataques comunes.
- Limitación de tasa: Protección contra ataques de fuerza bruta.
- Almacenamiento seguro de contraseñas: Utilización de algoritmos de hashing robustos (Argon2).
- Auditoría y logging: Registro de acciones sensibles del sistema.
- Docker: Contenedores para desarrollo y producción.
- CI/CD: Integración continua y despliegue mediante GitHub Actions.
- Entornos separados: Configuraciones distintas para desarrollo, pruebas y producción.
- Monitoreo: Integración con Sentry para seguimiento de errores.
- Backups automatizados: Copias de seguridad programadas de la base de datos.
EmployeeOfTheMonth/
├── apps/ # Aplicaciones de Django
│ ├── custom_auth/ # Sistema de autenticación personalizado
│ │ ├── models.py # Modelo CustomUser extendido
│ │ ├── forms.py # Formularios personalizados
│ │ ├── views.py # Vistas de autenticación
│ │ ├── templates/ # Plantillas para login/registro
│ │ └── urls.py # URLs de la app
│ ├── api/ # API REST
│ │ ├── serializers/ # Serializadores por modelo
│ │ ├── views/ # Viewsets y vistas de API
│ │ ├── permissions.py # Permisos personalizados
│ │ ├── pagination.py # Configuración de paginación
│ │ └── urls.py # Rutas de API
│ └── core/ # Funcionalidad principal
│ ├── models/ # Modelos de datos
│ ├── services/ # Lógica de negocio
│ ├── templatetags/ # Tags personalizados
│ ├── views/ # Vistas web
│ └── templates/ # Plantillas HTML
├── static/ # Archivos estáticos
│ ├── css/ # Estilos compilados
│ ├── js/ # JavaScript
│ └── images/ # Imágenes estáticas
├── templates/ # Plantillas globales
├── media/ # Archivos subidos por usuarios
├── EmployeeOfTheMonth/ # Configuración principal del proyecto
│ ├── settings/ # Configuraciones separadas por entorno
│ │ ├── base.py # Configuración base
│ │ ├── development.py # Entorno de desarrollo
│ │ └── production.py # Entorno de producción
│ ├── urls.py # URLs principales
│ └── wsgi.py # Configuración WSGI
├── manage.py # Script de administración de Django
├── requirements/ # Requisitos separados por entorno
│ ├── base.txt # Dependencias comunes
│ ├── development.txt # Dependencias de desarrollo
│ └── production.txt # Dependencias de producción
├── docker/ # Configuración de Docker
│ ├── Dockerfile # Imagen principal
│ └── docker-compose.yml # Composición de servicios
├── scripts/ # Scripts de utilidad
├── .env.example # Ejemplo de variables de entorno
├── LICENSE # Licencia del proyecto
└── README.md # Este archivo
class CustomUser(AbstractUser):
email = models.EmailField(unique=True)
score = models.IntegerField(default=0)
level = models.IntegerField(default=1)
verification_token = models.CharField(max_length=100, blank=True)
avatar = models.ImageField(upload_to='avatars/', null=True, blank=True)
department = models.ForeignKey('Department', on_delete=models.SET_NULL, null=True, blank=True)
position = models.CharField(max_length=100, blank=True)
bio = models.TextField(blank=True)
date_joined = models.DateTimeField(auto_now_add=True)
last_active = models.DateTimeField(auto_now=True)class Minigame(models.Model):
username = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
tries = models.IntegerField(default=0)POST /api/v1/auth/token/- Obtener token JWTPOST /api/v1/auth/token/refresh/- Refrescar token JWTPOST /api/v1/auth/register/- Registrar nuevo usuario
GET /api/v1/users/- Listar usuariosGET /api/v1/users/{id}/- Detalle de usuarioPATCH /api/v1/users/{id}/- Actualizar usuarioGET /api/v1/users/leaderboard/- Obtener tabla de clasificación
- Python 3.10 o superior
- PostgreSQL 13 o superior
- Node.js 16+ (para procesamiento de assets front-end)
- Docker y Docker Compose (opcional, para desarrollo con contenedores)
-
Clonar el repositorio:
git clone https://github.com/yourusername/EmployeeOfTheMonth.git cd EmployeeOfTheMonth -
Crear un entorno virtual e instalar dependencias:
python -m venv venv source venv/bin/activate # En Windows: venv\Scripts\activate pip install -r requirements/development.txt
-
Configurar variables de entorno:
cp .env.example .env # Editar .env con tus credenciales y configuración -
Aplicar migraciones:
python manage.py migrate
-
Crear datos iniciales (opcional):
python manage.py loaddata initial_data
-
Crear un superusuario:
python manage.py createsuperuser
-
Ejecutar el servidor de desarrollo:
python manage.py runserver
-
Configurar variables de entorno de producción:
# En el servidor de producción export DJANGO_SETTINGS_MODULE=EmployeeOfTheMonth.settings.production export DEBUG=False export SECRET_KEY=your-secure-key export DATABASE_URL=postgresql://user:password@host:port/database # ... otras variables de entorno
-
Recolectar archivos estáticos:
python manage.py collectstatic --no-input
-
Instalar Gunicorn:
pip install gunicorn
-
Configurar Gunicorn como servicio:
# Crear archivo systemd sudo nano /etc/systemd/system/employeeofthemonth.service -
Contenido del archivo de servicio:
[Unit] Description=EmployeeOfTheMonth Gunicorn daemon After=network.target [Service] User=www-data Group=www-data WorkingDirectory=/path/to/employeeofthemonth ExecStart=/path/to/venv/bin/gunicorn --workers 3 --bind unix:/path/to/employeeofthemonth.sock EmployeeOfTheMonth.wsgi:application Restart=on-failure [Install] WantedBy=multi-user.target -
Configurar Nginx:
server { listen 80; server_name yourdomain.com; location = /favicon.ico { access_log off; log_not_found off; } location /static/ { root /path/to/employeeofthemonth; } location /media/ { root /path/to/employeeofthemonth; } location / { include proxy_params; proxy_pass http://unix:/path/to/employeeofthemonth.sock; } }
-
Construir la imagen de producción:
docker build -f docker/Dockerfile.prod -t employeeofthemonth:prod . -
Ejecutar con docker-compose:
docker-compose -f docker/docker-compose.prod.yml up -d
- Todas las contraseñas se almacenan con el algoritmo Argon2
- Protección contra ataques CSRF en todos los formularios
- Se implementa rate limiting para prevenir ataques de fuerza bruta
- La comunicación con la API requiere autenticación mediante tokens JWT
- Cabeceras HTTP de seguridad configuradas (HSTS, X-Content-Type-Options, etc.)
- Integración con Slack/Teams para notificaciones
- Sistema de recompensas canjeables en el mundo real
- Análisis de datos y dashboards para gerentes
- Implementación de eventos temporales (competencias limitadas en el tiempo)
- Soporte para múltiples idiomas
- Aplicación móvil nativa
Agradecemos las contribuciones a Employee Of The Month. Por favor sigue estos pasos:
- Crear un fork del repositorio
- Crear una rama para tu característica (
git checkout -b feature/amazing-feature) - Formatear el código con Black (
black .) - Hacer commit de tus cambios (
git commit -m 'feat: add amazing feature') - Hacer push a la rama (
git push origin feature/amazing-feature) - Abrir un Pull Request
Este proyecto está licenciado bajo la Licencia GNU GENERAL PUBLIC LICENSE
