¡Bienvenido! Este es un proyecto template fullstack diseñado para desarrolladores junior que quieren aprender cómo construir aplicaciones web modernas con React y Node.js.
Esta es una aplicación de autenticación completa con:
- Frontend: React + TypeScript + Vite + Tailwind CSS
- Backend: Node.js + Express + JavaScript
- Autenticación: Sistema de login y registro
- UI/UX: Diseño moderno y responsivo
template-react-node-fullstack/
├── apps/
│ ├── backend/ # Servidor Node.js
│ │ ├── src/
│ │ │ ├── controllers/
│ │ │ ├── services/
│ │ │ ├── routes/
│ │ │ └── middleware/
│ │ ├── server.js # Punto de entrada
│ │ └── package.json
│ └── frontend/ # Aplicación React
│ ├── src/
│ │ ├── components/
│ │ ├── pages/
│ │ ├── hooks/
│ │ ├── context/
│ │ └── services/
│ ├── index.html
│ └── package.json
└── README.md
- React 19: Biblioteca principal de UI
- TypeScript: Tipado estático
- Vite: Herramienta de build y desarrollo
- React Router: Manejo de rutas
- Tailwind CSS: Framework de CSS
- pnpm: Gestor de paquetes
- Node.js: Runtime de JavaScript
- Express: Framework web
- CORS: Middleware para cross-origin
- body-parser: Middleware para parsear JSON
# Iniciar ambos servicios con Docker
docker-compose up --build
# Detener los servicios
docker-compose down
# Reconstruir y empezar
docker-compose up --build --force-recreate# Backend
cd apps/backend
docker build -t example-auth-backend .
# Frontend
cd apps/frontend
docker build -t example-auth-frontend .# Usar el stage de producción
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up- Node.js (v18 o superior)
- pnpm (recomendado) o npm
- Docker y Docker Compose (opcional)
# Backend
cd apps/backend
npm install
# Frontend
cd apps/frontend
pnpm install# Backend (en una terminal)
cd apps/backend
npm run dev
# → Corre en http://localhost:3000
# Frontend (en otra terminal)
cd apps/frontend
pnpm run dev
# → Corre en http://localhost:5173- Registro: Los usuarios crean una cuenta con email y contraseña
- Login: Los usuarios inician sesión y reciben un token mock
- Dashboard: Vista protegida que muestra información del usuario
Usuario → Frontend → Backend → Base de datos (mock) → Backend → Frontend → Usuario
- AuthProvider: Contexto de React para manejar el estado de autenticación
- Login/Register: Formularios de autenticación
- Dashboard: Página protegida
- Routes: Configuración de rutas públicas y privadas
POST /api/auth/register- Registrar nuevo usuarioPOST /api/auth/login- Iniciar sesiónGET /api/health- Verificar estado del servidor
Este proyecto es un template educativo. Para producción necesitas implementar:
- Base de datos real (PostgreSQL, MongoDB, etc.)
- JWT tokens válidos con expiración
- Hashing de contraseñas (bcrypt)
- Variables de entorno para secrets
- Validación de inputs más robusta
- Rate limiting para prevenir ataques
// Ejemplo de lo que necesitarías implementar:
const bcrypt = require("bcrypt");
const jwt = require("jsonwebtoken");
const { Pool } = require("pg");
// Servicio de usuario real
class UserService {
async create(userData) {
const hashedPassword = await bcrypt.hash(userData.password, 10);
// Guardar en base de datos real
}
async authenticate(email, password) {
const user = await this.findByEmail(email);
const isValid = await bcrypt.compare(password, user.password);
if (!isValid) throw new Error("Invalid credentials");
return user;
}
}- Recuperación de contraseña
- Verificación de email
- Perfil de usuario editable
- Logout real (invalidar tokens)
- Roles y permisos
- Logs y auditoría
- Tests unitarios y de integración
- Dockerización
- CI/CD pipeline
- Caching (Redis)
- CDN para assets estáticos
- Lazy loading de componentes
- Optimización de bundle
- Service Worker para PWA
# Matar proceso en puerto 3000
lsof -ti:3000 | xargs kill -9# Instalar pnpm
npm install -g pnpmAsegúrate que el backend tenga el middleware CORS configurado.
- Aprender sobre bases de datos SQL/NoSQL
- Estudiar JWT y autenticación moderna
- Implementar validación con Joi/Zod
- Agregar tests con Jest/Vitest
- Configurar Docker
- Desplegar en producción (Vercel, Railway, etc.)
¡Este es un proyecto educativo! Si encuentras errores o tienes sugerencias, siéntete libre de abrir un issue o hacer un pull request.
MIT License - puedes usar este proyecto para aprender y construir tus propias aplicaciones.
Recuerda: Este es solo el comienzo. La programación web es un campo vasto y emocionante. ¡Sigue aprendiendo y construyendo! 🚀