Aplicación React Native con Expo para gestionar leads de Facebook. Funciona en Web, iOS y Android.
- ✅ Autenticación de usuarios
- ✅ Dashboard para gestión de leads
- ✅ Estadísticas de leads
- ✅ CRUD completo de leads
- ✅ Filtrado por cliente
- ✅ Interfaz responsive para web y móvil
- Node.js (v18 o superior)
- pnpm (o npm/yarn)
- Expo CLI (se instala automáticamente)
-
Clonar el repositorio (si aplica)
-
Instalar dependencias:
pnpm install
-
Configurar variables de entorno:
Crear archivo
.enven la raíz del proyecto:# Producción: EXPO_PUBLIC_API_URL=https://cmlaplata.ar/api # Desarrollo local: # EXPO_PUBLIC_API_URL=http://localhost:3001
Nota: La aplicación usa Firebase Authentication. Las credenciales de Firebase están configuradas en
src/config/firebase.ts.
pnpm run webpnpm run iosPasos para ejecutar en el emulador:
-
Iniciar el emulador Android:
emulator -avd cmlaplata
⚠️ Importante: Espera a que el emulador se inicie completamente (pantalla de inicio de Android visible) antes de continuar. -
Instalar Expo Go en el emulador:
- Abre Google Play Store en el emulador
- Busca "Expo Go" e instálalo
-
Iniciar la aplicación:
pnpm android
O si prefieres el menú interactivo:
pnpm start
Luego presiona
apara abrir en Android.
Nota: Si tienes múltiples emuladores, verifica cuál está activo con:
adb devicesSolución si Expo intenta usar un emulador incorrecto:
Si Expo intenta conectarse a un emulador que no funciona (ej: emulator-5554), puedes:
-
Desconectar el emulador problemático:
adb disconnect emulator-5554
-
Configurar el puerto manualmente en el emulador correcto:
adb -s emulator-5556 reverse tcp:8081 tcp:8081
(Reemplaza
emulator-5556con el ID de tu emulador) -
Iniciar Expo sin conexión automática:
pnpm start
Luego presiona
ay selecciona el dispositivo correcto del menú.
pnpm start├── app/ # Rutas con Expo Router
│ ├── (auth)/ # Rutas de autenticación
│ │ └── login.tsx
│ ├── (tabs)/ # Rutas principales
│ │ └── dashboard.tsx
│ ├── _layout.tsx # Layout principal
│ └── index.tsx # Página inicial
├── src/
│ ├── components/ # Componentes React
│ │ ├── FacebookLeadsList.tsx
│ │ ├── FacebookLeadsPage.tsx
│ │ ├── LeadForm.tsx
│ │ └── LeadsStats.tsx
│ ├── context/ # Contextos de React
│ │ └── AuthContext.tsx
│ ├── hooks/ # Hooks personalizados
│ │ ├── useFacebookLeads.ts
│ │ ├── useLeadsStats.ts
│ │ └── useLeadOperations.ts
│ └── services/ # Servicios API
│ ├── authService.ts
│ └── facebookLeadsService.ts
├── assets/ # Imágenes y recursos
├── app.json # Configuración de Expo
└── package.json
La aplicación usa Firebase Authentication para la autenticación de usuarios:
- Login: Pantalla de inicio de sesión con Firebase Auth
- Protección de rutas: Las rutas están protegidas automáticamente
- Tokens JWT: Firebase genera tokens que se envían automáticamente al backend
- Observador de estado: El estado de autenticación se sincroniza automáticamente
- Logout: Botón de cerrar sesión en el header
- Usuario ingresa email y contraseña
- Firebase Auth valida las credenciales
- Se obtiene el ID Token de Firebase
- Se consulta el backend para obtener datos del usuario:
GET /users/byFireBaseId/:firebaseId - El token se incluye automáticamente en todas las peticiones al backend
- Obtener usuario:
GET {API_URL}/users/byFireBaseId/:firebaseId- Requiere: Header
Authorization: Bearer <firebase_id_token> - Retorna: Datos del usuario con
userType(Admin, Manager, Seller)
- Requiere: Header
-
Lista de Leads
- Visualización de todos los leads
- Filtrado por Client ID
- Eliminación de leads
- Información completa de cada lead
-
Estadísticas
- Total de leads
- Leads con/sin cliente
- Leads con teléfono
- Leads con email
-
Formulario
- Crear nuevos leads
- Editar leads existentes
- Campos: nombre, teléfono, email, proyecto, ciudad, data1-5
La aplicación espera los siguientes endpoints:
GET {API_URL}/facebook-leads # Listar leads
GET {API_URL}/facebook-leads/:id # Obtener un lead
POST {API_URL}/facebook-leads # Crear lead
PATCH {API_URL}/facebook-leads/:id # Actualizar lead
DELETE {API_URL}/facebook-leads/:id # Eliminar lead
GET {API_URL}/facebook-leads/stats # Estadísticas
Todos los endpoints requieren autenticación mediante Bearer Token (Firebase ID Token).
Para recibir leads desde Zapier, configura un webhook:
-
URL del Webhook:
POST {API_URL}/facebook-leads -
Headers:
Content-Type: application/json Authorization: Bearer {token} -
Body (ejemplo):
{ "clientId": 123, "name": "Juan Pérez", "phoneManual": "+5491123456789", "phoneAuto": "+5491123456789", "project": "Casa en La Plata", "city": "La Plata", "email": "juan@example.com", "data1": "Información adicional 1", "data2": "Información adicional 2", "data3": "Información adicional 3", "data4": "Información adicional 4", "data5": "Información adicional 5" }
- React Native - Framework multiplataforma
- Expo - Herramientas y servicios
- Expo Router - Navegación basada en archivos
- TypeScript - Tipado estático
- Firebase Authentication - Autenticación de usuarios
- Axios - Cliente HTTP con interceptores
- AsyncStorage - Almacenamiento local (opcional)
pnpm start- Inicia el servidor de desarrollopnpm run web- Ejecuta en navegador webpnpm run ios- Ejecuta en iOS (requiere macOS)pnpm run android- Ejecuta en Android
pnpm run web
# Luego usar el build generado en web-build/eas build --platform ioseas build --platform android- El proyecto está configurado para usar Expo Router (navegación basada en archivos)
- Las variables de entorno deben usar el prefijo
EXPO_PUBLIC_para estar disponibles en el cliente - El token de autenticación se guarda automáticamente y se incluye en todas las peticiones
- La aplicación redirige automáticamente según el estado de autenticación
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
Este proyecto es privado y de uso interno.
Desarrollado con ❤️ para CM La Platas