Sistema de logros y recompensas inspirado en mecánicas de videojuegos.
Permite crear logros y asociar recompensas a cada uno, pensado como un proyecto demostrativo de arquitectura serverless en AWS.
El objetivo principal del proyecto es mostrar diseño de APIs, seguridad, infraestructura cloud y buenas prácticas usando Next.js y servicios administrados de AWS.
El sistema permite:
- Crear logros (achievements)
- Asociar recompensas (rewards) a cada logro
- Consumir la API desde un frontend en Next.js
- Proteger el acceso a la API mediante API Keys y control de red
- Utilizar una arquitectura serverless, escalable y de bajo costo
- Next.js
- AWS Lambda
- Amazon API Gateway
- Amazon DynamoDB
- Amazon CloudFront
- Amazon Route 53
- Template de CloudFront incluido (requiere adaptación)
Flujo general:
- El frontend en Next.js consume los endpoints expuestos por API Gateway.
- API Gateway gestiona los endpoints y valida el uso de API Keys.
- Cada endpoint invoca una función Lambda.
- Las Lambdas interactúan con DynamoDB.
- CloudFront actúa como capa de protección, limitando el acceso público y permitiendo solo IPs autorizadas.
- Route 53 gestiona el dominio personalizado.
El proyecto utiliza dos tablas:
Almacena los logros creados por el usuario.
Campos principales:
- achievementId (PK)
- title
- description
- createdAt
Almacena las recompensas asociadas a un logro.
Campos principales:
- rewardId (PK)
- achievementId (relación lógica)
- rewardDescription
- createdAt
- API Gateway protegido mediante API Keys
- CloudFront configurado para restringir acceso público
- Acceso permitido únicamente a IPs específicas
- Backend completamente serverless (sin servidores expuestos)
El repositorio incluye un template de CloudFront como referencia.
Importante:
- El template no contiene valores reales
- Debe adaptarse manualmente antes de usarse
- Es necesario configurar:
- IPs permitidas
- Orígenes reales
- Comportamientos según el entorno
El objetivo del template es servir como base replicable, no como configuración lista para producción.
- Clonar el repositorio
- Configurar variables de entorno necesarias
- Desplegar los recursos de AWS (DynamoDB, Lambda, API Gateway, CloudFront)
- Ejecutar el frontend:
npm install
npm run dev