Files
turo-clone/README.md

10 KiB

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