RecogeLatas es una aplicación web que permite a los estudiantes registrar, visualizar y organizar la recolección de latas en una campaña escolar del 4C generación 2025. En la aplicación en cuestión, cada estudiante tiene su propio perfil, donde registra la cantidad de latas que va recolectando, obteniendo estadísticas suyas y del grupo al que pertenece, además de un posicionamiento automático en el ranking del curso, en función de las latas que vaya recolectando.
├── backend/
│ ├── controllers/
│ │ └── authController.js
│ │ └── collectController.js
│ │ └── groupController.js
│ │ └── logController.js
│ │ └── monitorController.js
│ │ └── userController.js
│ ├── routes/
│ │ └── authRoutes.js
│ │ └── collectRoutes.js
│ │ └── groupRoutes.js
│ │ └── logRoutes.js
│ │ └── monitorRoutes.js
│ │ └── userRoutes.js
│ ├── config/
│ │ └── db.js
│ └── server.js
├── frontend/
│ ├── index.html
│ ├── register.html
│ ├── profile.html
│ ├── styles/
│ │ └── login.css
│ │ └── profile.css
│ ├── js/
│ │ └── api.js
│ │ └── login.js
│ │ └── profile.js
│ │ └── register.js
│ │ └── swiper.js
└── README.md
- Registro de usuarios a partir de un listado preexistente en la base de datos (con asignación de nickname y contraseña).
- Inicio y cierre de sesión con cookies y JWT.
- Visualización del perfil del usuario y su progreso.
- Muestra del total de latas recolectadas por todos los participantes.
- Interfaz clara y amigable para usuarios jóvenes.
- Ranking de grupo y general, para fomentar la recolección a partir de la competitividad.
- Estadísticas del usuario en comparación a su grupo con gráficos integrados.
- Node.js
- Express
- PostgreSQL
- JWT (jsonwebtoken)
- Bcrypt.js
- dotenv
- HTML
- CSS
- JavaScript (vanilla)
- pg-promise o pg: Conector para PostgreSQL
- CORS: Middleware para manejo de CORS
- cookie-parser: Manejo de cookies
- Swiper.js: Para sliders en el frontend
Sigue estos pasos para ejecutar el proyecto de manera local:
git clone https://github.com/tuusuario/tu-repo.git
cd backend
npm install
Crea un archivo .env dentro de la carpeta backend/ con el siguiente contenido
DATABASE_URL=postgresql://usuario:contraseña@localhost:5432/nombre_de_tu_base_de_datos
JWT_SECRET=una_clave_secreta_para_los_tokens
NODE_ENV=development
node server.js
Navega a la carpeta frontend/ y abre el archivo index.html
con tu navegador.
Asegúrate de tener tu base de datos PostgreSQL en ejecución antes de iniciar el servidor.
Este proyecto utiliza PostgreSQL como sistema de gestión de base de datos. A continuación se describe la estructura de las tablas utilizadas:
Columna | Tipo | Restricciones |
---|---|---|
id | integer | PRIMARY KEY, NOT NULL |
name | text | NOT NULL |
nickname | text | ÚNICO (UNIQUE), puede ser NULL |
password | text | Puede ser NULL |
total_cans | integer | DEFAULT 0 |
group_id | integer | FOREIGN KEY → groups(id), puede ser NULL |
Relaciones:
- Un usuario puede pertenecer a un grupo (
group_id
). - Un usuario puede tener muchas entradas en
collects
ylogs
.
Columna | Tipo | Restricciones |
---|---|---|
id | integer | PRIMARY KEY, NOT NULL |
name | text | NOT NULL |
description | text | Puede ser NULL |
Relaciones:
- Un grupo puede tener muchos usuarios.
Columna | Tipo | Restricciones |
---|---|---|
id | integer | PRIMARY KEY, NOT NULL |
user_id | integer | FOREIGN KEY → users(id), puede ser NULL |
amount | integer | NOT NULL |
date | timestamp | DEFAULT CURRENT_TIMESTAMP |
log_id | integer | FOREIGN KEY → logs(id), puede ser NULL, ON DELETE CASCADE |
Relaciones:
- Cada recolección pertenece a un usuario.
- Puede estar vinculada a un log.
Columna | Tipo | Restricciones |
---|---|---|
id | integer | PRIMARY KEY, NOT NULL |
user_id | integer | FOREIGN KEY → users(id), puede ser NULL, ON DELETE CASCADE |
action | text | NOT NULL |
timestamp | timestamp | DEFAULT CURRENT_TIMESTAMP |
Relaciones:
- Un log pertenece a un usuario.
- Un log puede estar vinculado a múltiples entradas en
collects
.
⚠️ Recuerda ejecutar las migraciones o crear estas tablas manualmente antes de iniciar el backend.
El proyecto puede desplegarse en plataformas como Vercel (frontend) y Render o Railway (backend). Asegúrate de configurar correctamente las variables de entorno.
José Garrillo - Ssj400
- ✅ Proyecto terminado
- 🔒 Modo solo lectura
- 🌱 Apto para ser desplegado o integrado en una campaña escolar real.
Este proyecto está bajo la licencia MIT.