App social para registrar rondas en grupo con foto y competir por puntos, logros y rachas
DrinkLegends convierte una reunión con amigos en una liga. Cada participante registra su ronda eligiendo bebida, cantidad y una foto, y eso le da puntos. Los puntos alimentan cuatro clasificaciones — semanal, mensual, anual y total — más un ranking global mundial al que se entra por decisión propia.
Alrededor de eso hay una capa de engagement diseñada para que la gente vuelva: 16 logros con barra de progreso, rachas diarias que dan bonus cada siete días, el MVP de la noche que premia automáticamente al máximo anotador del día anterior, retos semanales creados por el administrador del grupo, eventos con su propia clasificación y estadísticas avanzadas.
La parte social la completan los grupos con código de invitación de 6 caracteres, el muro con likes y comentarios, el chat con notificaciones push, el sistema de amigos y tres juegos integrados. El backend está en Laravel 13 con autenticación JWT.
Registro y login con límite de intentos, token de acceso corto y refresh largo, con reintento automático al caducar.
Creación y acceso por código de invitación de 6 caracteres, foto de portada editable solo por quien lo creó.
Cuatro bebidas por defecto más tres configurables por grupo.
Se elige bebida, se fija cantidad de 1 a 20 y se hace una foto comprimida en el cliente antes de subirla.
Feed del grupo con likes, comentarios y botón de compartir nativo.
Clasificación del grupo en semanal, mensual, anual y total, con medallas.
Top mundial al que se entra activando el perfil público.
El máximo anotador de cada día pasado recibe 10 puntos automáticamente.
Por rondas, puntos, MVPs, rachas, amigos y grupos, cada uno con su barra de progreso.
Cuenta los días consecutivos y otorga 5 puntos de bonus en cada hito de 7 días.
Gráfico de los últimos 7 días, distribución por día de la semana, hora punta y bebidas favoritas.
Retos por grupo creados por su administrador, con puntos extra.
Eventos dentro del grupo; las rondas se etiquetan y generan una clasificación propia.
Búsqueda por email o apodo, solicitudes, aceptación, rechazo y lista de amigos.
Mensajería con notificación push a los miembros.
Verdad o Reto en tres niveles con más de 90 preguntas en español, ruleta para elegir participante y ¿Quién es más probable? con 20 preguntas.
Backend Laravel 13 con la estructura estándar del framework: controladores de API en
app/Http/Controllers/Api, modelos Eloquent, servicios para la lógica
que no cabe en un controlador y middleware para la validación del JWT. Las 42 rutas
viven en routes/api.php.
El frontend se sirve como PWA desde public/, con su manifiesto y su
service worker. Todo el esquema de base de datos está en una única migración
inicial.
DrinkLegends/ ├── memory/ # PRD.md: documento de producto ├── design_guidelines.json # sistema visual ├── test_reports/ # resultados PHPUnit y pytest └── backend/ ├── app/Http/Controllers/Api/ ├── app/Models/ · app/Services/ ├── app/Http/Middleware/ # validación JWT ├── routes/api.php # 42 rutas ├── database/migrations/ # esquema completo ├── config/drinklegends.php # config propia └── public/ # PWA: manifest.json, sw.js
El PRD.md del proyecto define el stack original: React Native con Expo,
backend FastAPI y MongoDB. La implementación acabó siendo Laravel 13 con
MySQL. El motivo fue de despliegue: un backend PHP con MySQL entra en
cualquier hosting compartido, mientras que FastAPI y MongoDB requieren
infraestructura propia. Documentar la desviación respecto al PRD me parece más
honesto que reescribir el PRD.
Las imágenes se guardan como base64 en la base de datos, lo cual no escala bien y está reconocido como limitación en el PRD. La mitigación es comprimir antes de subir: 900 px y JPEG al 60% en el navegador. La migración a un servicio de imágenes quedó deliberadamente aplazada por requerir una cuenta externa.
La mecánica de puntos sola no retiene a nadie más de una semana. Los cuatro sistemas — MVP diario, rachas con hito a 7 días, 16 logros con progreso visible y ranking global — están pensados en escalas de tiempo distintas: el MVP da motivo para volver mañana, la racha para volver toda la semana, y los logros para seguir a los tres meses.
El PRD deja constancia de lo que no funciona: las notificaciones push requieren una build de desarrollo o producción de Expo, y el flujo de cámara en web cae a una foto de demostración porque la cámara real es de móvil. Un proyecto que documenta sus límites es más útil que uno que finge no tenerlos.
Desarrollador full stack — autor único.
Documento de producto, modelo de datos, las 42 rutas de la API, autenticación JWT con refresh, sistemas de puntuación y logros, frontend PWA e internacionalización.
Versión 3 funcional con todas las funcionalidades de los niveles 1 y 2
implementadas. La carpeta test_reports/ conserva los resultados de
PHPUnit y pytest de tres iteraciones de prueba. Su sucesor es Pint
League, una reescritura completa sobre PHP sin framework.