beauty-salon

Cómo funciona el sistema multi-tenant:

  1. Verticales disponibles (ya configurados en el seed):
    • Barberías (barbershop) - Tema negro/amarillo, terminología “Barbero/Turno”
    • Peluquerías (beautysalon) - Tema rosa/blanco, terminología “Estilista/Cita”
    • Centros de Estética (aesthetics) - Tema lavanda/púrpura, terminología “Esteticista/Reserva”
  2. Arquitectura de aislamiento:
    • Cada tenant tiene su propio schema PostgreSQL (tenant_guid)
    • Datos completamente aislados entre tenants
    • Tablas maestras compartidas en schema public (verticales, planes, tenants)
  3. Acceso por dominio:
    • Subdominio: mibarberia.barbershop.com
    • Dominio personalizado: mibarberia.com (opcional)
    • El middleware detecta automáticamente el tenant por el dominio
  4. Personalización automática: Cada tenant hereda de su vertical:
    • Colores y tema visual
    • Servicios predeterminados (Corte $15, Barba $10, etc.)
    • Terminología (Barbero vs Estilista vs Esteticista)
    • Características habilitadas (pagos online, SMS, programa de lealtad)
  5. Creación de nuevos tenants: Desde el panel de SuperAdmin puedes:
  6. Elegir el vertical (barbería, peluquería, estética)
  7. Definir subdomain único
  8. El sistema automáticamente: - Crea el schema PostgreSQL - Configura las tablas - Aplica configuraciones del vertical - Habilita el acceso

Ejemplo práctico:

Cada uno opera independientemente con sus propios clientes, citas, profesionales y configuraciones.

BookingPro - SaaS Multi-Tenant para Gestión de Turnos

Sistema SaaS multi-tenant para gestión de reservas y turnos, segmentado en tres verticales: barberías, peluquerías y centros de estética.

🏗️ Arquitectura

🚀 Quick Start

Prerrequisitos

Configuración Local

  1. Clonar el repositorio
    git clone <repository-url>
    cd Bookear
    
  2. Configurar variables de entorno
    cp .env.example .env
    # Editar .env con valores reales
    
  3. Configurar PostgreSQL
    CREATE DATABASE bookingprodb;
    CREATE USER postgres WITH PASSWORD 'password123';
    GRANT ALL PRIVILEGES ON DATABASE bookingprodb TO postgres;
    
  4. Ejecutar con Docker Compose
    docker-compose up --build
    

O ejecutar individualmente:

  1. Backend
    cd src/backend/BookingPro.API
    dotnet restore
    dotnet run
    
  2. Frontend
    cd src/frontend
    npm install
    npm start
    

🌐 Deployment en Digital Ocean

Opción 1: Automático con GitHub (Recomendado)

  1. Conectar repositorio en Digital Ocean App Platform
  2. Digital Ocean detectará automáticamente el archivo .do/app.yaml
  3. Configurar variables de entorno en el dashboard
  4. Deploy automático en cada push a master

Opción 2: CLI

# Instalar doctl CLI
doctl apps create --spec deploy.yaml

Variables de Entorno Requeridas

# En Digital Ocean App Platform
DATABASE_URL=${db.DATABASE_URL}  # Auto-generada
JWT_KEY=your-production-jwt-secret-32-chars-minimum
ASPNETCORE_ENVIRONMENT=Production
REACT_APP_API_URL=/api
REACT_APP_APP_NAME=BookingPro

📊 Estructura de Base de Datos

Schema Público (Compartido)

Schema por Tenant

🔧 API Endpoints

Autenticación

Tenant

Bookings

Admin (Super Admin)

🎨 Personalización por Vertical

Cada vertical tiene su propia configuración:

Barbershop

Beauty Salon

Aesthetics

🔒 Seguridad

Sistema Super Admin

Multi-Tenant Security

Medidas de Seguridad Adicionales

🧪 Testing

# Backend
cd src/backend/BookingPro.API
dotnet test

# Frontend
cd src/frontend
npm test

📁 Estructura del Proyecto

Bookear/
├── .do/
│   └── app.yaml                    # Configuración DO App Platform
├── src/
│   ├── backend/
│   │   └── BookingPro.API/
│   │       ├── Controllers/        # API Controllers
│   │       ├── Data/              # DbContexts
│   │       ├── Models/            # Entidades
│   │       ├── Services/          # Servicios de negocio
│   │       ├── DTOs/              # Data Transfer Objects
│   │       ├── Utilities/         # Helpers y middleware
│   │       └── Dockerfile.prod    # Docker para producción
│   └── frontend/
│       ├── src/
│       │   ├── components/        # Componentes React
│       │   ├── pages/            # Páginas
│       │   ├── services/         # API client
│       │   ├── store/            # Redux store
│       │   ├── types/            # TypeScript types
│       │   └── contexts/         # React contexts
│       ├── Dockerfile.prod       # Docker para producción
│       └── nginx.prod.conf       # Nginx para producción
├── nginx/
│   └── nginx.conf                # Nginx para desarrollo
├── docker-compose.yml            # Desarrollo local
├── deploy.yaml                   # DO deployment config
└── README.md

📝 Logs y Monitoreo

Los logs estructurados se envían a:

🐛 Troubleshooting

Error de conexión a BD

Frontend no carga configuración

Docker issues

🤝 Contribución

  1. Fork el proyecto
  2. Crear feature branch (git checkout -b feature/nueva-funcionalidad)
  3. Commit cambios (git commit -m 'Agregar nueva funcionalidad')
  4. Push al branch (git push origin feature/nueva-funcionalidad)
  5. Crear Pull Request

📄 Licencia

Este proyecto está bajo la Licencia MIT - ver el archivo LICENSE para detalles.

📞 Soporte

Para soporte técnico:


Desarrollado con .NET 8, React 18 y desplegado en Digital Ocean App Platform