Files
turo-clone/README.md

301 lines
10 KiB
Markdown

# Turo Clone
Plataforma de alquiler de vehículos entre particulares inspirada en Turo.com. Aplicación web completa desarrollada con arquitectura modular basada en principios SOLID.
## Descripción
Este proyecto es un clon funcional de Turo.com que permite a los usuarios buscar, reservar y gestionar alquileres de vehículos. Los propietarios pueden listar sus vehículos y los arrendatarios pueden buscar y reservar vehículos disponibles.
## Características Principales
### Funcionalidades Core
- **Búsqueda y Filtrado**: Búsqueda avanzada de vehículos por ubicación, fechas, tipo y precio con visualización en mapa estilo Airbnb (integración con Google Maps)
- **Gestión de Vehículos**: Sistema completo para que los propietarios gestionen sus vehículos
- **Sistema de Reservas**: Calendario de disponibilidad y gestión completa de reservas
- **Pagos**: Procesamiento seguro de transacciones
- **Reseñas y Calificaciones**: Sistema de feedback entre usuarios
- **Mensajería**: Comunicación en tiempo real entre propietarios y arrendatarios
- **Notificaciones**: Sistema de alertas y notificaciones para mantener a los usuarios informados
### Flujos Críticos
**Onboarding Host**
Creación de perfil → KYC upload documento → Listar vehículo → Subir fotos → Publicar
**Reserva Guest**
Buscar → Elegir vehículo → Ver calendario → Seleccionar fechas → Ver precio final → Pagar → Notificación host → (Si no instantBook) Host acepta → Reserva confirmada y calendario bloqueado
**Mensajería**
Hilo por booking con notificaciones email/push
**Check-in / Check-out**
Host confirma entrega, marca inicio y fin; posibilidad de añadir "confirmation photos"
**Claims**
Subir fotos y formulario, admin procesa o simula pago de seguro
### Alcance Mínimo Viable (MVP)
#### Prioridad Alta - Funciones Imprescindibles
**Registro / Autenticación**
- Autenticación de usuarios con email
- OAuth: Google y Apple
- Implementado con Appwrite Auth
**Perfiles de Usuarios**
- Roles: Guest (huésped) y Host (anfitrión)
- KYC light para hosts: datos personales y datos del vehículo
**Gestión de Vehículos**
- Crear/editar listado de vehículo
- Campos: título, descripción, fotos, atributos (marca, modelo, año, asientos, transmisión, features)
- Precio base por día
- Reglas de viaje
- Ubicación y calendario de disponibilidad
- Fotos almacenadas en Appwrite Storage
**Búsqueda y Filtros**
- Búsqueda por ubicación, fechas, precio
- Visualización en mapa estilo Airbnb con integración de Google Maps
- Búsqueda interactiva en mapa con marcadores de vehículos disponibles
- Filtros por tipo de vehículo, features
- Filtro por distancia de entrega
- Opciones de entrega/pickup
**Página de Detalle del Vehículo**
- Galería de fotos
- Mapa de ubicación
- Precio diario con desglose
- Políticas del vehículo
- Reseñas
- Calendario de disponibilidad
- Botón reservar/solicitar
**Flujo de Reservas**
- Seleccionar fechas
- Ver precio total (impuestos + fees + protección opcional)
- Pago con Stripe
- Confirmación de reserva
**Mensajería**
- Mensajería en-app para coordinación huésped-anfitrión
- Hilos de conversación por booking
**Calendario y Disponibilidad**
- Calendario de disponibilidad
- Bloqueo automático por reservas
**Panel Host**
- Ver reservas
- Aceptar/rechazar reservas (si no es instant booking)
- Administrar listado de vehículos
- Gestionar protección del vehículo
**Panel Admin**
- Moderación de listados
- Gestión de usuarios
- Transacciones y reportes
#### Funciones Avanzadas (Post-MVP)
- Integración de seguros/planes de protección con distintos planes y deducibles
- Pricing dinámico, "boosts" y reglas de descuentos
- Entrega en aeropuerto con fees incluidos en precio diario
- Calendar sync con Google Calendar
- Integración de telemetría (opcional)
- Ratings & reviews completos
- Claims flow y soporte al cliente
### Roles y Permisos
#### Roles del Sistema
**Guest (Huésped)**
- Puede reservar vehículos
- Realizar pagos
- Dejar reseñas y calificaciones
- Comunicarse con hosts mediante mensajería
**Host (Anfitrión)**
- Crear y gestionar listados de vehículos
- Recibir pagos
- Elegir plan de protección
- Gestionar reservas (aceptar/rechazar)
- Administrar calendario de disponibilidad
**Super-admin / Moderador**
- Gestionar usuarios
- Moderar listados
- Gestionar transacciones
- Acceso a reportes y analytics
#### Implementación
- RBAC implementado en Appwrite con custom claims
- Guards en la capa de frontend para protección de páginas
- Permisos configurados en Appwrite Console por colección
## Stack Tecnológico
- **Frontend**: Next.js 16 con Cache Components
- **Lenguaje**: TypeScript
- **Estilos**: Tailwind CSS
- **UI Library**: Shadcn/ui
- **Validación**: Zod v4
- **Backend**: Appwrite v18
- **Arquitectura**: SOLID con módulos que simulan microservicios
## Arquitectura
El proyecto sigue una arquitectura modular basada en principios SOLID donde cada módulo es autocontenido con sus propios componentes, hooks, servicios y tipos. Esta estructura simula microservicios permitiendo que cada módulo sea independiente y fácil de mantener.
### Estructura de Módulos
Cada módulo contiene:
- Componentes de presentación
- Hooks personalizados para lógica de estado
- Servicios con lógica de negocio
- Tipos TypeScript y schemas de validación Zod
## Módulos del Sistema
1. **Autenticación** - Login, registro y gestión de sesiones
2. **Usuarios** - Perfiles y gestión de usuarios
3. **Vehículos** - CRUD completo y gestión de vehículos
4. **Búsqueda** - Búsqueda avanzada y filtrado
5. **Reservas** - Sistema completo de reservas con calendario
6. **Pagos** - Procesamiento de pagos
7. **Reseñas** - Sistema de calificaciones y feedback
8. **Mensajería** - Chat en tiempo real entre usuarios
9. **Notificaciones** - Sistema de alertas y notificaciones
## Configuración Inicial
### Requisitos Previos
- Node.js instalado
- Cuenta de Appwrite configurada
- Variables de entorno configuradas
### Variables de Entorno
Configurar las siguientes variables en un archivo `.env.local`:
- Endpoint de Appwrite
- ID del proyecto de Appwrite
- ID de la base de datos de Appwrite
### Instalación
Instalar las dependencias del proyecto y ejecutar el servidor de desarrollo.
### Configuración de Appwrite
El proyecto utiliza Appwrite SDK directamente desde el frontend sin necesidad de API routes intermedias. La autenticación y autorización son manejadas por Appwrite, y los permisos se configuran en Appwrite Console.
### Base de Datos
Se requiere crear las siguientes colecciones en Appwrite:
- Usuarios
- Vehículos
- Reservas
- Pagos
- Reseñas
- Mensajes
- Notificaciones
## Estructura del Proyecto
El proyecto está organizado en módulos independientes dentro de la carpeta `modules/`, cada uno con su propia estructura de componentes, hooks, servicios y tipos. Los componentes compartidos se encuentran en `components/`, y las configuraciones y utilidades en `lib/`.
### Estructura de Directorios
```
turo-clone/
├── app/ # Next.js App Router
│ ├── (auth)/ # Grupo de rutas de autenticación
│ │ ├── login/
│ │ ├── register/
│ │ └── layout.tsx
│ ├── (public)/ # Rutas públicas
│ │ ├── page.tsx # Homepage
│ │ ├── search/
│ │ ├── vehicles/
│ │ │ └── [id]/
│ │ └── layout.tsx
│ ├── (dashboard)/ # Rutas protegidas
│ │ ├── dashboard/
│ │ │ ├── vehicles/
│ │ │ │ ├── create/
│ │ │ │ └── [id]/
│ │ │ └── page.tsx
│ │ ├── reservations/
│ │ ├── profile/
│ │ └── layout.tsx
│ ├── api/ # API Routes (solo para webhooks o integraciones externas)
│ ├── error.tsx # Manejo de errores global
│ ├── global-error.tsx # Manejo de errores críticos
│ ├── not-found.tsx # Página 404 global
│ ├── loading.tsx # Estado de carga global
│ ├── layout.tsx
│ └── globals.css
├── modules/ # Módulos del sistema (microservicios simulados)
│ ├── auth/
│ │ ├── components/ # Componentes de UI
│ │ ├── hooks/ # Custom hooks
│ │ ├── services/ # Lógica de negocio
│ │ ├── types/ # Tipos TypeScript
│ │ └── index.ts # Barrel exports
│ │
│ ├── users/
│ ├── vehicles/
│ ├── search/
│ ├── reservations/
│ ├── payments/
│ ├── reviews/
│ ├── messaging/
│ └── notifications/
├── components/ # Componentes compartidos
│ ├── ui/ # Componentes de shadcn/ui
│ ├── layout/ # Componentes de layout
│ └── common/ # Componentes comunes
├── lib/ # Utilidades y configuraciones
│ ├── utils.ts
│ ├── appwrite/ # Configuración de Appwrite
│ └── constants/
├── hooks/ # Hooks compartidos
├── types/ # Tipos globales
├── public/ # Archivos estáticos
├── config/ # Configuraciones
└── docs/ # Documentación del proyecto
```
### Estructura de un Módulo
Cada módulo sigue esta estructura estándar:
```
modules/[module-name]/
├── components/ # Componentes de presentación
│ └── [Component].tsx
├── hooks/ # Custom hooks para lógica de estado
│ └── use[Feature].ts
├── services/ # Servicios de negocio (lógica pura)
│ └── [feature].service.ts
├── types/ # Definiciones de tipos TypeScript y schemas Zod
│ ├── [feature].types.ts # Tipos TypeScript
│ └── [feature].schemas.ts # Schemas de validación Zod
└── index.ts # Barrel exports para importaciones limpias
```