Un starter completo y profesional para monorepos TypeScript con Angular 20 + Express.js + PostgreSQL
Un proyecto starter completo con monorepo Nx que incluye autenticación JWT, gestión de usuarios, sistema de permisos, internacionalización y Docker. Perfecto para comenzar nuevos proyectos fullstack con Angular y Node.js.
- Frontend: Angular 20 con standalone components
- Backend: Node.js + Express.js + TypeScript
- Base de datos: PostgreSQL con Sequelize ORM
- Monorepo: Nx workspace para gestión eficiente
- Build System: Vite + esbuild (build ultra-rápido)
- Containerización: Docker + Docker Compose
- UI: Bootstrap 5 + NgBootstrap
- i18n: Transloco (Español/Valenciano)
- JWT con access y refresh tokens
- Sistema de permisos basado en roles
- Guards para protección de rutas
- Interceptores HTTP automáticos
- Hashing seguro de contraseñas con bcrypt
- Soporte completo para múltiples idiomas
- Cambio dinámico de idioma
- Persistencia de preferencias
- Traducciones completas de la UI
- Patrón Controller-Service-Repository
- DTOs compartidos entre frontend y backend
- Middleware de autenticación centralizado
- Manejo de errores unificado
- Validación de datos robusta
# Verificar versiones
node --version # >= 22.12.0
npm --version # >= 10.9.0
docker --version
docker-compose --version# 1. Clonar el repositorio
git clone https://github.com/dherrero/nx-fullstack-starter.git
cd nx-fullstack-starter
# 2. Instalar dependencias
npm install
# 3. Configurar variables de entorno
cp .env.example .env
# Editar .env con tus configuraciones
# 4. Iniciar desarrollo
npm run dev- Frontend: http://localhost:4200
- Backend API: http://localhost:3200
- Base de datos: localhost:5432
Email: test@local.com
Contraseña: 123456
# Desarrollo completo (recomendado)
npm run dev # Base de datos + Backend + Frontend
# Desarrollo por pasos
npm run dev:db # Solo base de datos
npm run dev:back # Solo backend (espera DB)
npm run dev:front # Solo frontend (espera Backend)
# Comandos individuales
npm run start:front # Iniciar frontend
npm run start:back # Iniciar backend
npm run start:both # Iniciar ambosnpm run dev:db:down # Detener base de datos
npm run dev:db:clean # Limpiar volúmenes de DB# Construcción
npm run build:front # Construir frontend
npm run build:back # Construir backend
npm run build # Construir ambos
# Docker
npm run docker:up # Iniciar con Dockernx-fullstack-starter/
├── apps/
│ ├── front/ # Aplicación Angular
│ │ ├── src/app/
│ │ │ ├── components/ # Componentes reutilizables
│ │ │ ├── pages/ # Páginas principales
│ │ │ ├── libs/ # Módulos de funcionalidad
│ │ │ └── services/ # Servicios de negocio
│ │ └── src/assets/i18n/ # Archivos de traducción
│ └── back/ # API Node.js
│ ├── src/
│ │ ├── controllers/ # Controladores de rutas
│ │ ├── services/ # Lógica de negocio
│ │ ├── models/ # Modelos de Sequelize
│ │ ├── routes/ # Definición de rutas
│ │ └── adapters/ # Adaptadores externos
│ └── .env # Variables de entorno
├── libs/
│ └── rest-dto/ # DTOs compartidos
├── db/ # Scripts de base de datos
├── nginx/ # Configuración Nginx
└── compose.yaml # Docker Compose
-
Configuración inicial
# Clonar y configurar git clone <repo-url> cd nx-fullstack-starter npm install cp .env.example .env
-
Desarrollo diario
# Terminal 1: Base de datos npm run dev:db # Terminal 2: Backend npm run dev:back # Terminal 3: Frontend npm run dev:front
-
Antes de commit
npm run lint npm run test npm run build
- Standalone Components: Usa componentes independientes
- Services: Lógica de negocio en servicios inyectables
- Guards: Protección de rutas con guards
- Interceptors: Manejo automático de autenticación
- Reactive Forms: Formularios reactivos con validación
- Controller-Service-Repository: Separación clara de responsabilidades
- Middleware: Autenticación y validación centralizada
- DTOs: Transferencia de datos tipada
- Error Handling: Manejo centralizado de errores
# Crear feature branch
git checkout -b feature/nueva-funcionalidad
# Desarrollo con commits frecuentes
git add .
git commit -m "feat: añadir nueva funcionalidad"
# Push y PR
git push origin feature/nueva-funcionalidadfeat: nueva funcionalidad
fix: corrección de bug
docs: actualización de documentación
style: cambios de formato
refactor: refactorización de código
test: añadir o modificar tests
chore: tareas de mantenimiento
- Archivos: kebab-case (
user-service.ts) - Clases: PascalCase (
UserService) - Variables: camelCase (
userName) - Constantes: UPPER_SNAKE_CASE (
API_BASE_URL)
# Tests unitarios
npm run test:front
npm run test:back
# Tests e2e
npm run e2e:front
# Coverage
npm run test:coverage# Solo base de datos
docker-compose -f docker-compose.db.yml up
# Aplicación completa
docker-compose up# Construir y desplegar
npm run build
docker-compose -f docker-compose.prod.yml up -d- Crear archivo en
apps/front/src/assets/i18n/nuevo-idioma.json - Actualizar
transloco-loader.service.ts - Añadir opción en
language-switcher.component.ts
// En el componente
this.translocoService.translate('clave.traduccion');
// En el template
{
{
'clave.traduccion' | transloco;
}
}# Nunca commitees archivos .env
echo ".env" >> .gitignore
# Usa .env.example como plantilla
cp .env.example .env// Backend: Configurar secrets seguros
JWT_SECRET=tu-secret-super-seguro
JWT_REFRESH_SECRET=tu-refresh-secret-super-seguro// Usar diferentes niveles de log
console.log('Info:', data);
console.warn('Warning:', warning);
console.error('Error:', error);- Usar Angular DevTools
- Redux DevTools para estado
- Network tab para requests
- Lazy loading de módulos
- OnPush change detection
- TrackBy en *ngFor
- Preload strategies
- Connection pooling
- Query optimization
- Caching strategies
- Compression middleware
CREATE TABLE users (
id SERIAL PRIMARY KEY,
email VARCHAR(255) UNIQUE NOT NULL,
name VARCHAR(255) NOT NULL,
lastName VARCHAR(255) NOT NULL,
permission VARCHAR(50) NOT NULL,
password VARCHAR(255) NOT NULL,
createdAt TIMESTAMP DEFAULT NOW(),
updatedAt TIMESTAMP DEFAULT NOW()
);ADMIN: Acceso completo al sistemaWRITE_SOME_ENTITY: Ejemplo permiso escritura de una entidadREAD_SOME_ENTITY: Ejemplo permiso para lectura de una entidad
# Database
POSTGRESDB_HOST=localhost
POSTGRESDB_PORT=5432
POSTGRESDB_DATABASE=your_db_name
POSTGRESDB_USER=postgres
POSTGRESDB_PASSWORD=password
# JWT
JWT_SECRET=your_jwt_secret_key_here
JWT_REFRESH_SECRET=your_jwt_refresh_secret_key_here
JWT_EXPIRES_IN=1h
JWT_REFRESH_EXPIRES_IN=7d
# Server
PORT=3200
NODE_ENV=development
CORS_ORIGIN=http://localhost:4200export const environment = {
production: false,
api: 'http://localhost:3200/api/',
appName: 'Nx Fullstack Starter',
};# 1. Construir para producción
npm run build
# 2. Crear imágenes Docker
docker-compose -f docker-compose.prod.yml build
# 3. Desplegar
docker-compose -f docker-compose.prod.yml up -dNODE_ENV=production
POSTGRESDB_HOST=postgresdb
POSTGRESDB_DATABASE=production_db
JWT_SECRET=production-secret-key
CORS_ORIGIN=https://your-domain.com- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'feat: Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
- Sigue las convenciones de código existentes
- Añade tests para nuevas funcionalidades
- Actualiza la documentación si es necesario
- Usa commits descriptivos
Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.
# Verificar que Docker esté corriendo
docker ps
# Reiniciar la base de datos
npm run dev:db:down
npm run dev:db# Matar proceso en puerto 3200
lsof -ti:3200 | xargs kill
# Matar proceso en puerto 4200
lsof -ti:4200 | xargs kill-
Cambiar el branding
- Actualiza textos en
apps/front/src/assets/i18n/ - Modifica colores en
apps/front/src/styles.scss - Cambia el favicon y logo
- Actualiza textos en
-
Añadir nuevas funcionalidades
- Crea nuevos módulos siguiendo la estructura existente
- Añade nuevos endpoints en el backend
- Implementa nuevos componentes en el frontend
-
Configurar la base de datos
- Añade nuevas tablas en
db/ - Crea nuevos modelos en
apps/back/src/models/ - Actualiza DTOs en
libs/rest-dto/
- Añade nuevas tablas en
-
Implementar tests
- Añade tests unitarios para servicios
- Implementa tests e2e para flujos críticos
- Configura coverage reports
- Añadir más ejemplos de componentes
- Implementar sistema de notificaciones
- Añadir tests e2e completos
- Crear documentación de API
- Añadir CI/CD pipeline
- Implementar logging avanzado
- Añadir métricas y monitoreo
¡Dale una ⭐ en GitHub y compártelo con la comunidad!
¡Disfruta construyendo tu próxima aplicación! 🚀
Hecho con ❤️ por la comunidad
Angular • Express • Nx • PostgreSQL