No pudiste responder a tiempo. La partida ha terminado.
Pregunta 1 de 10
Preparando partida
Cargando preguntas, espera un momento…
🏆
¡Partida terminada!
Aquí están tus resultados
0
Puntos
0
Correctas
0%
Aciertos
💡¿Sabías que...?
Resumen Ejecutivo
# GameFrikis — Resumen Ejecutivo
> **Última actualización:** 28 de abril de 2026
> **Versión:** Laravel 13.4.0 | PHP 8.4 | Gemini AI integrado
## 🎯 Descripción
**GameFrikis** es una aplicación de trivia gamificada orientada a cultura friki (videojuegos, anime, cine, cómics, tecnología). Combina una API REST en Laravel con un frontend SPA vanilla JS, e integra **Google Gemini AI** para generar preguntas infinitas automáticamente.
```mermaid
flowchart TD
A["Usuario inicia partida"] --> B["JuegoService::obtenerPreguntas()"]
B --> C["Consultar BD:\npreguntas activas\n- filtrar por tema/dificultad\n- excluir ya respondidas"]
C --> D{"¿Hay suficientes\npreguntas?"}
D -->|"Sí (≥ cantidad)"| E["Devolver preguntas\nde BD"]
D -->|"No"| F["GeminiService\ngenerar faltantes"]
F --> G["POST Gemini API\n(JSON mode, retry)"]
G -->|"200 OK"| H["Parsear + validar\nestructura JSON"]
H --> I["Pregunta::create()\norigen = 'ia'"]
I --> J["Merge BD + nuevas\ny devolver"]
G -->|"Error/Rate Limit"| K["Devolver lo que\nhaya en BD\n(sin error al usuario)"]
```
> [!TIP]
> Las preguntas generadas por IA se **persisten en la BD** con `origen = 'ia'`. Los siguientes jugadores las reusan directamente desde la BD, ahorrando llamadas a la API.
users {
int id PK
string name
string email UK
string password
int puntos
int nivel
string avatar
string rol "admin|user"
}
temas {
int id PK
string nombre
string icono
string color
string descripcion
boolean activo
int orden
}
preguntas {
int id PK
int tema_id FK
string texto
string opcion_a
string opcion_b
string opcion_c
string opcion_d
string respuesta_correcta "a|b|c|d"
string dificultad "facil|medio|dificil"
int puntos
string explicacion
boolean activa
string origen "manual|ia"
}
respuesta_usuarios {
int id PK
int user_id FK
int pregunta_id FK
string respuesta_dada
boolean es_correcta
int puntos_obtenidos
int tiempo_respuesta
}
curiosidads {
int id PK
int tema_id FK
string titulo
text contenido
boolean activa
}
```
### Estadísticas Actuales de la BD
| Entidad | Registros | Detalle |
|---------|-----------|---------|
| Temas | **5** | Videojuegos 🎮, Cine y Series 🎬, Anime y Manga ⚡, Tecnología 💻, Cómics 🦸 |
| Preguntas | **31** | 21 manuales + 10 generadas por IA |
| Usuarios | **3** | Incluye admin demo |
| Respuestas | **13** | — |
| Variable | Valor | Descripción |
|----------|-------|-------------|
| `APP_URL` | `http://localhost/gamefrikis` | URL con subdirectorio WAMP |
| `GEMINI_API_KEY` | `AIzaSy...` (configurada) | API key gratuita de Google |
| `GEMINI_MODEL` | `gemini-2.5-flash` | Modelo AI (free tier: 15 req/min) |
| `DB_CONNECTION` | `mysql` | Puerto 3307 |
## 🎨 Características de Diseño
- **Glassmorphism** con backdrop blur y transparencias
- **Tema dual**: Dark mode (default) + Light mode con toggle
- **Partículas flotantes** animadas en el fondo
- **Micro-animaciones**: fadeInUp, bounceIn, scale en hover
- **Fuente Inter** desde Google Fonts
- **Gradientes indigo→purple** en CTAs
- **Timer circular SVG** con animación de cuenta regresiva
- **Responsive**: mobile-first con breakpoints SM/LG
## 🔧 Aspectos Técnicos Destacados
| Feature | Implementación |
|---------|---------------|
| **IA Híbrida** | BD primero → Gemini si faltan → guardar en BD → degradación elegante |
| **SSL Fix WAMP** | `withOptions(['verify' => false])` en no-producción |
| **Retry inteligente** | Solo reintenta en 5xx/conexión, NO en 429 (rate limit) |
| **Base path dinámico** | `window.BASE_PATH` inyectado desde Blade para subdirectorio |
| **Seguridad API** | `PreguntaResource` oculta `respuesta_correcta` hasta después de responder |
| **Gamificación** | Puntos × multiplicador dificultad × bonus velocidad |
| **Roles** | admin / user con middleware `admin` |