Configuración inicial del proyecto: estructura de directorios y dependencias mínimas instaladas
This commit is contained in:
300
README.md
Normal file
300
README.md
Normal file
@@ -0,0 +1,300 @@
|
||||
# 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
|
||||
```
|
||||
Reference in New Issue
Block a user