Initial commit: Lead Scraper - Google Maps

This commit is contained in:
Mambo
2026-02-11 01:48:37 +01:00
commit 831d63b7e8
13 changed files with 2406 additions and 0 deletions

52
BRIEF.md Normal file
View File

@@ -0,0 +1,52 @@
# Lead Gen Scraper — Google Maps
## Concepto
Aplicación web que scrapea datos de Google Maps usando la API de Apify. Permite buscar negocios por keyword, ciudad y estado/provincia, mostrando resultados en tabla con panel de detalle.
## Stack (adaptado a nuestro entorno)
- **Backend:** Node.js + Express
- **Templates:** EJS
- **Estilos:** Tailwind CSS via CDN (no build step)
- **Scraping:** `apify-client` NPM con actor `compass/crawler-google-places`
- **Database:** JSON file-backed store (portable, sin dependencia Replit)
- **Deploy:** VPS (systemd, como el resto de proyectos)
## Funcionalidades
### Core
1. **Búsqueda** — Formulario con keyword, ciudad, estado, max resultados
2. **Resultados** — Tabla con nombre, teléfono, email, web, reviews + panel detalle slide-in
3. **Historial** — Búsquedas guardadas, ordenadas por fecha, con acciones View/Delete
4. **Leads** — Bookmark de negocios, página dedicada con gestión completa
### UI
- Sidebar fija oscura (dark olive #1a1f1e + green accent #4a7c59)
- Filter bar horizontal superior
- Click en fila → panel detalle deslizante derecha
- Loading states (Apify tarda 30-120s)
- Empty states para todas las páginas
- Error handling con mensajes claros
### Gestión de Leads
- Bookmark toggle (save/unsave) desde tabla y panel
- Sync bidireccional tabla↔panel
- Remove from Leads con actualización en vivo
- Persistencia en JSON local
### Detalles técnicos
- Server timeout 5 min (búsquedas largas)
- Formato búsqueda: "{keyword} in {city}, {state}"
- Keys: `search:{timestamp}`, `lead:{timestamp}`
- dotenv para API token
- .gitignore: node_modules, .env, data/, .DS_Store
## Adaptaciones vs briefing original
- ❌ Replit Database → ✅ JSON file store (siempre)
- ❌ Replit deploy → ✅ VPS systemd
- ❌ Replit Secrets → ✅ .env file
- Se mantiene opción de empaquetado zip para portabilidad
## Notas
- Apify Actor ID: nwua9Gu5YrADL7ZDj
- El usuario necesitará su propio API token de Apify
- Puerto: 8086 (siguiente disponible en VPS)