301 lines
10 KiB
Markdown
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
|
|
```
|