Aplicación web para gestión de listas y tareas desarrollada con React, Node.js, Express y MongoDB Atlas.
Permite crear listas, agregar tareas, editarlas, marcarlas como completadas, eliminarlas y adjuntar archivos de Google Drive por tarea.
| Servicio | URL |
|---|---|
| Frontend | https://todolist-app-eight-theta.vercel.app/ |
| Backend | https://todolist-app-wtkf.onrender.com |
| Campo | Valor |
|---|---|
| camitkdos@gmail.com | |
| Contraseña | cami123 |
| Capa | Tecnologías |
|---|---|
| Frontend | React, Vite, CSS |
| Backend | Node.js, Express, HTTPS (SSL) |
| Base de datos | MongoDB Atlas, Mongoose |
| Validación | Zod |
| Infraestructura | Vercel (frontend), Render (backend) |
Instalar antes de continuar:
- Node.js 18 o superior
- Git
- OpenSSL (en Linux ya viene instalado; en Windows ver paso 3)
Verificar:
node -v
npm -v
openssl versiongit clone https://github.com/tu-usuario/todolist-app.git
cd todolist-appBackend:
cd backend
npm installFrontend:
cd ../frontend
npm installDescargar e instalar desde: https://slproweb.com/products/Win32OpenSSL.html
Verificar:
& "C:\Program Files\OpenSSL-Win64\bin\openssl.exe" versionDesde la raíz del proyecto crear la carpeta:
mkdir backend/certsGenerar los certificados:
Linux / Mac:
openssl req -nodes -new -x509 \
-keyout backend/certs/key.pem \
-out backend/certs/cert.pem \
-days 365Windows PowerShell:
& "C:\Program Files\OpenSSL-Win64\bin\openssl.exe" req -nodes -new -x509 -keyout backend/certs/key.pem -out backend/certs/cert.pem -days 365Cuando pida datos se puede presionar Enter para saltar cada campo.
Al finalizar deben existir:
backend/certs/key.pem
backend/certs/cert.pem
Backend — crear el archivo backend/.env:
PORT=3000
MONGO_URI=mongodb+srv://<usuario>:<contraseña>@cluster0.xxxxx.mongodb.net/todolistdb
JWT_SECRET=cualquier_texto_secreto
JWT_EXPIRES_IN=7d
CLIENT_URL=https://localhost:5173
GOOGLE_CLIENT_ID=tu_google_client_id
GOOGLE_CLIENT_SECRET=tu_google_client_secret
GOOGLE_REDIRECT_URI=https://localhost:3000/api/auth/google/callbackFrontend — crear el archivo frontend/.env:
VITE_API_URL=https://localhost:3000/apiEditar frontend/vite.config.js:
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
import fs from "fs";
const isProduction = process.env.NODE_ENV === "production";
export default defineConfig({
plugins: [react()],
server: {
https: isProduction ? false : {
key: fs.readFileSync("../backend/certs/key.pem"),
cert: fs.readFileSync("../backend/certs/cert.pem"),
},
proxy: {
"/api": {
target: "https://localhost:3000",
changeOrigin: true,
secure: false,
}
}
}
});Abrir dos terminales:
Terminal 1 — Backend:
cd backend
npm run devDebe aparecer:
MongoDB conectado
Servidor HTTPS corriendo en puerto 3000
Terminal 2 — Frontend:
cd frontend
npm run devAbrir en el navegador:
https://localhost:3000
Va a aparecer una advertencia de seguridad. Seleccionar:
Opciones avanzadas → Continuar a localhost
Luego abrir la aplicación en:
https://localhost:5173
todolist-app/
├── frontend/
│ └── src/
│ ├── pages/
│ ├── services/
│ ├── utils/
│ ├── App.jsx
│ └── main.jsx
│
├── backend/
│ ├── src/
│ │ ├── controllers/
│ │ ├── models/
│ │ ├── routes/
│ │ ├── middlewares/
│ │ ├── validations/
│ │ └── server.js
│ └── certs/ ← generado localmente, no incluido en el repo
│
└── README.md
| Método | Endpoint |
|---|---|
| POST | /api/auth/register |
| POST | /api/auth/login |
| GET | /api/auth/profile |
| Método | Endpoint |
|---|---|
| GET | /api/todolists |
| POST | /api/todolists |
| PUT | /api/todolists/:id |
| DELETE | /api/todolists/:id |
| Método | Endpoint |
|---|---|
| GET | /api/tasks |
| POST | /api/tasks |
| PUT | /api/tasks/:id |
| PATCH | /api/tasks/:id/completed |
| DELETE | /api/tasks/:id |
| Método | Endpoint |
|---|---|
| GET | /api/tasks/:id/files |
| POST | /api/tasks/:id/files |
| DELETE | /api/tasks/:id/files/:fileId |
Por seguridad estos archivos deben generarse localmente:
backend/.env
backend/certs/key.pem
backend/certs/cert.pem
frontend/.env