Skip to content

Alexcastr/uber-clone

Repository files navigation

Uber Clone (React Native/Expo)

Bienvenido al repositorio del Uber Clone. Esta aplicación es una réplica funcional de la experiencia de usuario de Uber, construida con tecnologías modernas para desarrollo móvil híbrido.

🚀 Stack Tecnológico

El proyecto está construido utilizando las siguientes herramientas y librerías clave:


🛠️ Configuración del Proyecto

Sigue estos pasos para configurar el entorno de desarrollo localmente.

1. Prerrequisitos

Asegúrate de tener instalado:

2. Instalación de dependencias

bun install

3. Variables de Entorno

Crea un archivo .env en la raíz del proyecto basado en el .env.example (si existe) o agrega tus propias keys:

EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_...
EXPO_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_test_...
DATABASE_URL=postgresql://...
EXPO_PUBLIC_GOOGLE_MAPS_API_KEY=AIza...

Nota: Para Google Maps, asegúrate de habilitar en Google Cloud Console las APIs: Maps SDK for Android, Maps SDK for iOS y Directions API.


🗄️ Configuración de Base de Datos (Neon PostgreSQL)

Para que la aplicación funcione correctamente, necesitas crear las tablas en tu base de datos Neon. Ejecuta los siguientes scripts en el SQL Editor de Neon:

Tabla: Drivers

Almacena la información de los conductores disponibles.

CREATE TABLE drivers (
    id SERIAL PRIMARY KEY,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    profile_image_url TEXT,
    car_image_url TEXT,
    car_seats INTEGER NOT NULL CHECK (car_seats > 0),
    rating DECIMAL(3, 2) CHECK (rating >= 0 AND rating <= 5)
);

Tabla: Users

Sincronizada con Clerk para almacenar datos básicos del usuario.

CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    clerk_id VARCHAR(50) UNIQUE NOT NULL
);

Tabla: Rides

Historial y registro de viajes solicitados.

CREATE TABLE rides (
    ride_id SERIAL PRIMARY KEY,
    origin_address VARCHAR(255) NOT NULL,
    destination_address VARCHAR(255) NOT NULL,
    origin_latitude DECIMAL(9, 6) NOT NULL,
    origin_longitude DECIMAL(9, 6) NOT NULL,
    destination_latitude DECIMAL(9, 6) NOT NULL,
    destination_longitude DECIMAL(9, 6) NOT NULL,
    ride_time INTEGER NOT NULL,
    fare_price DECIMAL(10, 2) NOT NULL CHECK (fare_price >= 0),
    payment_status VARCHAR(20) NOT NULL,
    driver_id INTEGER REFERENCES drivers(id),
    user_id VARCHAR(100) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

💳 Configuración de Stripe

Para probar los pagos, Stripe requiere inicializarse correctamente en el cliente.

  1. Obtén tus llaves de API en el Dashboard de Stripe.
  2. Importante: La integración de pagos móviles de Stripe no funciona en Expo Go. Debes crear una "Development Build" para probarla.

Más info en la documentación oficial.


▶️ Ejecución y Desarrollo

Iniciar el servidor de desarrollo

bun start:reset # Para iniciar limpiando caché (recomendado si hay cambios de nativos)
# O simplemente
bun start

Crear Build de Desarrollo (Obligatorio para Mapas y Stripe)

Dado que usamos librerías con código nativo (Stripe, Maps), Expo Go no soportará todas las funciones. Genera una build de desarrollo:

Para Android:

bun run android

Esto generará el APK y lo instalará en tu emulador o dispositivo conectado.


📝 Notas Adicionales

  • Sincronización de Usuarios: Asegúrate de que al registrar un usuario en Clerk, se cree el registro correspondiente en la tabla users (generalmente manejado vía webhooks o directamente en el API route de registro).
  • Permisos de Ubicación: Verifica que el emulador o dispositivo tenga activados los permisos de ubicación para que los mapas funcionen.

🌱 Datos de Prueba (Seed)

Para poblar la base de datos con conductores de prueba e imágenes iniciales, ejecuta el siguiente script SQL en tu editor de base de datos (Neon SQL Editor o pgAdmin):

INSERT INTO drivers (id, first_name, last_name, profile_image_url, car_image_url, car_seats, rating)
VALUES
('1', 'James', 'Wilson', 'https://ucarecdn.com/dae59f69-2c1f-48c3-a883-017bcf0f9950/-/preview/1000x666/', 'https://ucarecdn.com/a2dc52b2-8bf7-4e49-9a36-3ffb5229ed02/-/preview/465x466/', 4, '4.80'),
('2', 'David', 'Brown', 'https://ucarecdn.com/6ea6d83d-ef1a-483f-9106-837a3a5b3f67/-/preview/1000x666/', 'https://ucarecdn.com/a3872f80-c094-409c-82f8-c9ff38429327/-/preview/930x932/', 5, '4.60'),
('3', 'Michael', 'Johnson', 'https://ucarecdn.com/0330d85c-232e-4c30-bd04-e5e4d0e3d688/-/preview/826x822/', 'https://ucarecdn.com/289764fb-55b6-4427-b1d1-f655987b4a14/-/preview/930x932/', 4, '4.70'),
('4', 'Robert', 'Green', 'https://ucarecdn.com/fdfc54df-9d24-40f7-b7d3-6f391561c0db/-/preview/626x417/', 'https://ucarecdn.com/b6fb3b55-7676-4ff3-8484-fb115e268d32/-/preview/930x932/', 4, '4.90');

📱 Generación de Builds con EAS

Para distribuir o probar la aplicación en dispositivos físicos sin depender del servidor de desarrollo local, utilizaremos eas build.

Nota: Este proyecto está configurado para usar el perfil default (definido en eas.json), el cual genera distribuciones internas (APK para Android).

Requisitos Previos

Asegúrate de tener instalado el CLI de EAS y haber iniciado sesión:

npm install -g eas-cli
eas login

Comandos de Construcción

Ejecuta el comando correspondiente a la plataforma deseada:

Para Android (APK):

eas build --platform android --profile default

Para iOS:

eas build --platform ios --profile default

Para ambas plataformas:

eas build --platform all --profile default

Hay que deployar primero la version web para poder tener acceso a las server routes

 npx expo export --platform web

eas deploy

eas deploy --prod

About

A modern Uber clone built to learn and demonstrate real-world ride-hailing features like real-time location tracking, trip management, and scalable app architecture. 🚗💻

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors