ProspectMap es un SaaS de prospección B2B sobre mapa construido para coste 0 / casi 0 con:
- Next.js (App Router + TypeScript)
- Tailwind CSS
- Supabase (Auth + PostgreSQL + RLS)
- Leaflet + OpenStreetMap tiles
- Overpass API (negocios reales)
- Nominatim (geocodificación)
- Recharts (dashboard)
- Papaparse (importación CSV)
- pdfjs-dist (extracción local de texto desde PDF)
- Registro/login con email y contraseña.
- Perfil de empresa (nombre + ciudad principal).
- Mapa principal con clustering de marcadores.
- Carga real de negocios por zona visible con Overpass.
- Rediseño UX/UI más premium:
- navegación con naming más comercial (
Centro de control,Territorio,Prioridades,Pipeline,Configuración), - nueva paleta premium grafito + naranja eléctrico (
#0A0B0F,#101217,#171B22,#1D222B,#252C36,#EF8B35), - mejor jerarquía visual, aire y contraste entre capas,
- paneles, overlays y sheets con superficies mucho más refinadas,
- microinteracciones y motion suave en botones, tabs, métricas y paneles,
- escritorio más editorial y menos rígido,
- móvil más cómodo, con sheets, cards y navegación mejor resueltos,
- ficha con tabs (
Informe,Datos,Notas), - mejores previews en mapa,
- mejor lectura de cards, badges y estados.
- navegación con naming más comercial (
- Nuevo modulo
Ataque/ Attack Workspace con:- cola diaria de leads,
- filtros por ciudad, vertical, campaña, servicio, urgencia y zona,
- sesion de ataque persistente,
- briefing operativo del lead,
- registro rapido de resultado,
- siguiente paso recomendado,
- progreso y KPIs de ejecucion,
- atajos de teclado para ejecutar mas rapido (
Ctrl/Cmd + Enter,J/K,S,D,P,E).
- Onboarding comercial guiado.
- Configuración comercial desde formulario estructurado + texto/PDF opcional.
- Perfil comercial de cuenta persistente en Supabase.
- Vista
Hoyconvertida en Centro de control con:- negocios prioritarios del dia,
- follow-ups pendientes o vencidos,
- negocios calientes,
- sin contactar con alto potencial,
- distribucion por servicio recomendado,
- oportunidades por vertical/sector,
- resumen accionable del pipeline,
- valor bruto y valor ponderado.
- Vista
Pipelinede cierre con:- estados claros,
- valor estimado por oportunidad,
- valor ponderado del pipeline,
- días sin tocar,
- oportunidades enfriándose,
- cierre cercano.
- Vista
Prioridadesordenable por score. - Sistema de verticales operativas:
- Autoescuelas
- Clinicas
- Hoteles
- General B2B
- Prospect Score 0-100 con logica visible, editable y persistida por cuenta.
- Scoring ampliado con ICP, oferta, ticket deseado, señales de necesidad y potencial.
- Siguiente mejor accion por negocio.
- Servicio Orbita recomendado por negocio.
- Mensajes sugeridos para apertura y seguimiento.
- Objeciones probables + respuesta corta sugerida.
- Informe detallado del negocio con:
- resumen ejecutivo,
- encaje,
- riesgos,
- CTA,
- que revisar antes de contactar,
- que no decir,
- angulo comercial,
- bloque
Por qué atacarlo, - valor estimado.
- Modo
Preparar prospeccionpara copiar playbook casi listo. - Modo Barrido sobre la zona visible del mapa.
- Señales destacadas integradas:
- alta oportunidad,
- buen encaje por servicio,
- urgencia comercial,
- foco de ataque.
- Ficha lateral (desktop) / bottom sheet (móvil) con:
- edición de datos comerciales,
- estado de prospección,
- prioridad,
- siguiente follow-up,
- datos de decisor,
- timeline comercial unificado (notas + eventos),
- informe comercial,
- score,
- dolor principal detectado,
- foco comercial,
- acción recomendada,
- servicio recomendado,
- mensajes sugeridos,
- objeciones y respuestas,
- vertical efectiva por negocio,
- acciones rápidas.
- Recordatorios y caducidad:
next_follow_up_atpor negocio,- leads sin tocar,
- oportunidades enfriándose.
- Valor económico estimado por negocio, pipeline y listas.
- Listas/campañas operativas persistentes con progreso y foco comercial.
- Filtros combinables por sector, estado y prioridad.
- Importación CSV + geocodificación Nominatim + registro de errores.
- Dashboard con métricas y gráficos.
- Aislamiento multitenant por cuenta con RLS en Supabase.
src/app/(auth)login y registro.src/app/(protected)today, attack, ranking, pipeline, mapa, dashboard, settings, onboarding.src/app/api/overpassproxy Overpass + normalización + caché.src/app/api/geocode/*búsqueda de ciudad y geocodificación de direcciones.src/components/commercial/*persistencia de configuracion comercial, selectors y paneles de control.src/components/attack/*Attack Workspace, hook de sesiones y flujo de ejecución diaria.src/components/layout/onboarding-workspace.tsxonboarding de empresa + onboarding comercial.src/components/map/*mapa, ficha comercial, importador CSV.src/components/prospects/*command center, ranking, detalle comercial y UI de prospectos.src/components/dashboard/*cards y gráficos.src/components/ui/pm.tsxprimitivas del design system interno (PmPanel,PmHero,PmMetric,PmBadge,PmNotice,PmEmpty,PmSectionHeader).src/app/globals.csstokens visuales, capas, motion, superficies y estilos base reutilizables.src/lib/commercial/account-profile.tssaneado, persistencia local y resumen heurístico del perfil comercial.src/lib/commercial/business-events.tshelper de registro de actividad comercial (business_events) con fallback seguro.src/lib/commercial/types.tstipos del dominio comercial.src/lib/commercial/verticals.tsconfiguracion centralizada de verticales, presets y librerias.src/lib/commercial/scoring.tscapa de scoring.src/lib/commercial/valuation.tsvalor económico estimado y probabilidad de cierre.src/lib/commercial/pipeline.tsrecordatorios, caducidad y lectura de pipeline.src/lib/commercial/attack.tscola diaria, sesion, razones de prioridad y siguiente paso.src/lib/commercial/recommendations.tscapa de servicio recomendado, dolor, accion y canal.src/lib/commercial/messaging.tsmensajes sugeridos y demo badges.src/lib/commercial/objections.tsobjeciones probables y respuestas.src/lib/commercial/report.tsresumen ejecutivo, checklist, CTA, riesgos y angulos comerciales.src/lib/commercial/engine.tsensamblado final de insights y command center.src/lib/prospect-intelligence.tsfacade/re-export del motor comercial.src/lib/*lógica de negocio (status, métricas, merge de negocios, clientes Supabase).supabase/migrations/0001_init.sqlschema completo + RLS + triggers.supabase/migrations/0002_phase3_commercial_settings.sqlmigracion incremental para Phase 3 sobre proyectos ya creados.supabase/migrations/0003_phase4_account_profiles.sqlmigracion incremental para onboarding comercial y perfil de cuenta.supabase/migrations/0004_phase5_pipeline_lists.sqlmigracion incremental para follow-ups y listas/campañas.supabase/migrations/0005_fix_missing_account_settings.sqlreparacion idempotente para proyectos donde faltaaccount_settingso el trigger de alta de usuario quedó roto.supabase/migrations/0006_attack_workspace.sqlmigracion incremental para sesiones de ataque y registro de resultados.supabase/migrations/0007_business_events.sqlmigracion incremental para timeline comercial unificado y actividad reciente por eventos.
La fase actual deja una base visual más seria y reutilizable sin cambiar la arquitectura del producto.
Paleta principal:
- fondo base
#0A0B0F - fondo secundario
#101217 - superficie
#171B22 - superficie terciaria
#1D222B - superficie flotante
rgba(20, 24, 31, 0.74) - borde sutil
rgba(247, 236, 220, 0.075) - borde fuerte
rgba(247, 236, 220, 0.14) - texto principal
#F6F1E8 - texto secundario
#C7BCAE - texto tenue
#8F877B - acento
#EF8B35 - hover acento
#F6A24C - éxito
#4EC086 - advertencia
#DDAE55 - riesgo
#D76F7B - info neutra
#9A93AF
Decisiones de diseño:
- menos aspecto de dashboard genérico y más sensación de sistema operativo comercial,
- paneles con mejor profundidad, bordes suaves y elevación sutil,
- tipografía y spacing más consistentes entre vistas,
- badges y estados comerciales más legibles,
- mapas, sheets y paneles laterales más refinados,
- mejor ergonomía móvil sin meter complejidad funcional nueva.
Componentes más rehechos visualmente:
Centro de controlTerritorioPrioridadesPipelineAnalíticaConfiguraciónOnboarding- ficha de negocio
- hoja
Preparar prospección - diálogos y overlays como CSV, barrido y conquista
- Node.js 20+
- npm 10+
- cuenta gratuita de Supabase
- Copia variables:
cp .env.example .env.local
- Rellena
.env.localcon tu URL y anon key de Supabase. - Instala dependencias:
npm install
- Arranca en local:
npm run dev
- Abre http://localhost:3000
La app abrirá directamente en /today.
Si quieres entrar sin pasar por login mientras desarrollas en local:
- En
.env.localañade:LOCAL_AUTH_BYPASS=true LOCAL_BYPASS_EMAIL=tu-email-ya-registrado-en-supabase LOCAL_BYPASS_PASSWORD=tu-password
- Reinicia
npm run dev.
Con ese modo activo, la app hace auto-login en local y abre directamente el flujo protegido.
- Crea un proyecto en Supabase Free.
- Ve a SQL Editor y ejecuta:
- proyecto nuevo desde cero:
supabase/migrations/0001_init.sql - proyecto ya existente con Phase 1/2:
supabase/migrations/0002_phase3_commercial_settings.sql, despuessupabase/migrations/0003_phase4_account_profiles.sql, despuessupabase/migrations/0004_phase5_pipeline_lists.sql, despuessupabase/migrations/0006_attack_workspace.sqly despuessupabase/migrations/0007_business_events.sql - si la UI muestra
Error guardandoen configuracion comercial o el registro devuelveDatabase error saving new user: ejecutasupabase/migrations/0005_fix_missing_account_settings.sql
- proyecto nuevo desde cero:
- En Authentication > Providers:
- Email activado.
- En Authentication > URL Configuration:
- añade
http://localhost:3000para local.
- añade
- Para acceso directo con contraseña (sin validación manual):
- desactiva
Confirm emailen Authentication > Providers > Email.
- desactiva
Tablas implementadas:
profilesbusinessesbusiness_notescsv_import_errorsaccount_settingsaccount_profilesprospect_listsprospect_list_itemsattack_sessionsattack_session_itemsattack_resultsbusiness_events
RLS:
- cada operación valida
auth.uid()contraid/user_id. - una empresa no puede leer ni modificar datos de otra.
- el estado comercial y notas siempre son privadas por cuenta.
- la configuracion comercial (vertical, pesos y preferencias; el flag de presentacion sigue interno) tambien es privada por cuenta.
- el perfil comercial de cuenta (ICP, oferta, ticket, texto base y resumen estructurado) tambien es privado por cuenta.
- las listas/campañas y sus elementos tambien son privadas por cuenta.
- las sesiones de ataque y sus resultados tambien son privadas por cuenta.
- los eventos comerciales y el timeline tambien son privados por cuenta.
Datos públicos (Overpass/OSM):
- solo se consumen para mostrar oportunidades.
- la capa comercial se guarda privada en Supabase.
La fase actual convierte ProspectMap en un motor comercial determinista por capas, con perfil comercial real por cuenta y sin IA externa ni APIs de pago.
Capas:
scoring.ts: calcula score 0-100 y desglose.recommendations.ts: detecta dolor principal, servicio recomendado, canal y siguiente accion.messaging.ts: construye mensaje inicial, follow-up 1, follow-up 2 y señales destacadas.objections.ts: adjunta objeciones probables y su respuesta corta.report.ts: construye resumen ejecutivo, checklist, riesgos, CTA y angulo comercial.valuation.ts: estima valor bruto, valor ponderado y probabilidad de cierre.pipeline.ts: decide seguimiento vencido, enfriamiento y foto del pipeline.engine.ts: compone el insight final del negocio y resume centro de control + pipeline.
El onboarding ya no se limita a empresa + ciudad.
Ahora existe un segundo paso donde la cuenta puede definir:
- sector principal
- verticales y subsectores objetivo
- cliente ideal
- empresas que encajan / no encajan
- zonas geograficas
- oferta principal y secundaria
- problema principal que resuelve
- propuesta de valor
- objeciones tipicas
- canales preferidos
- estilo comercial
- CTA preferida
- checklist previo y cosas que no decir
Tambien puede subir:
- texto base
.txt.md.pdf
El PDF/TXT se procesa localmente con pdfjs-dist y heuristicas simples para generar un resumen estructurado. No se usa IA de pago.
Archivos clave:
src/components/commercial/account-commercial-profile-form.tsxsrc/components/commercial/use-account-commercial-profile.tssrc/lib/commercial/account-profile.ts
Se guarda en account_profiles con una estructura simple pero extensible:
sectortarget_verticalstarget_subsectorsideal_customer_profileoffer_profilepricing_profileprospecting_preferencesknowledge_base_textknowledge_summaryonboarding_completed
Verticales activas:
autoescuelasclinicashotelesgeneral_b2b
Cada vertical influye en:
- pesos del scoring,
- foco comercial,
- servicio Orbita recomendado,
- mensajes sugeridos,
- objeciones probables,
- respuestas sugeridas.
Archivo central:
src/lib/commercial/verticals.ts
El usuario puede cambiar vertical:
- globalmente por cuenta/demo,
- y por negocio mediante
businesses.vertical_override.
El score se calcula entre 0 y 100 usando reglas transparentes y editables.
Factores incluidos:
- encaje sectorial,
- encaje con ICP,
- compatibilidad con la oferta,
- encaje de ticket,
- contactabilidad,
- hueco digital visible,
- acceso a decisor,
- prioridad interna,
- momento comercial segun estado,
- urgencia del follow-up,
- senal de necesidad,
- senal de potencial.
Penalizacion:
perdidoybloqueadoreducen fuertemente el score.
Etiquetas:
75+= alta oportunidad50-74= media oportunidad<50= baja oportunidad
La configuracion comercial ya no vive solo en navegador.
Se persiste por cuenta en account_settings:
verticaldemo_mode(interno; ya no aparece como control visible principal)scoring_configcommercial_preferences
Comportamiento:
- intenta leer/escribir desde Supabase,
- si la tabla no existe todavia, hace fallback automatico a
localStorage, - el UI muestra si la configuracion esta en Supabase o solo en local.
Hook principal:
src/components/commercial/use-commercial-config.tssrc/components/commercial/use-account-commercial-profile.ts
Cada negocio recibe:
- acción recomendada,
- canal sugerido,
- motivo,
- urgencia,
- valor económico estimado,
- probabilidad de cierre,
- estado de atención (
seguimiento vencido,oportunidad enfriándose, etc.).
La recomendación depende de:
- estado actual,
- antigüedad de la última interacción,
- disponibilidad de canales de contacto,
- score total.
- preferencias comerciales de la cuenta.
- perfil comercial de la cuenta.
Servicios contemplados:
- asistente/agente multicanal,
- automatización interna,
- vídeos con avatar IA,
- SaaS a medida.
La recomendación se basa en heurísticas baratas y transparentes:
- tipo de sector,
- señales operativas (horarios, teléfono, web, decisor),
- madurez comercial del lead.
- vertical efectiva y vertical de mercado detectada.
- compatibilidad con la oferta real declarada por la cuenta.
Cada ficha genera:
- mensaje inicial,
- follow-up 1,
- follow-up 2.
Se adaptan a:
- sector detectado,
- servicio recomendado,
- dolor comercial más probable del negocio.
- narrativa comercial de la cuenta.
- propuesta de valor y CTA declaradas por la cuenta.
Cada vertical incorpora una libreria corta de objeciones y respuestas.
Objetivo:
- que el equipo sepa que ofrecer,
- que decir,
- y como responder sin depender de IA externa.
La ficha y el panel de detalle ahora muestran un informe comercial mucho mas util:
- resumen ejecutivo
- nivel de encaje
- prioridad comercial y oportunidad
- dolor principal
- servicio recomendado
- por que encaja
- por que atacarlo
- riesgos y objeciones
- siguiente mejor accion
- mejor canal
- valor estimado y ponderado
- CTA sugerida
- que revisar antes de contactar
- que no decir
- angulo comercial recomendado
Tambien existe Preparar prospeccion, que abre un playbook listo para copiar y usar.
- Funciona sobre la zona visible actual del mapa.
- Ordena negocios por score.
- Muestra servicio recomendado, siguiente accion, objeciones y guiones sugeridos.
- En esta fase no hay selección manual de polígono; solo zona visible para mantener simplicidad y coste cero.
La fase actual añade una capa orientada a cierre y uso diario:
Pipelinecon valor bruto, valor ponderado y oportunidades por estado.next_follow_up_atpor negocio para seguimiento real.- deteccion de leads enfriandose por dias sin tocar y estado actual.
- listas/campañas guardadas (
prospect_lists,prospect_list_items) para reutilizar focos de prospeccion. - progreso por lista basado en leads trabajados.
ProspectMap ya no solo detecta y prioriza. Ahora tambien ejecuta.
La vista Ataque funciona como sistema operativo diario para prospeccion activa:
- monta una cola de leads del dia,
- permite arrancar una sesion de trabajo real,
- muestra un briefing operativo escaneable,
- registra el resultado en segundos,
- y deja el siguiente paso recomendado listo.
- parte de negocios ya guardados en la cuenta.
- cruza score, urgencia, follow-up, valor ponderado, vertical, servicio y contexto de entrada.
- puede arrancarse desde:
Centro de control(alertas),Prioridades,Pipeline,Campañas,Territoriosobre la zona visible.
- cada entrada muestra:
- nombre,
- sector,
- score,
- urgencia,
- servicio recomendado,
- siguiente accion,
- valor estimado,
- estado,
- por que entra hoy.
- al pulsar
Empezar sesion, ProspectMap crea una sesion persistente con los mejores leads del foco actual. - guarda:
- origen de la sesion,
- filtros aplicados,
- orden de cola,
- razon de inclusion,
- zona,
- estado de cada item.
- permite:
- trabajar ahora,
- saltar,
- mover al final,
- fijar para hoy,
- marcar no relevante,
- pausar o cerrar la sesion.
Cada lead abierto en Ataque muestra una version operativa del informe:
- resumen ejecutivo,
- por que atacarlo,
- dolor principal,
- servicio recomendado,
- angulo comercial,
- mensaje inicial,
- follow-up 1,
- follow-up 2,
- objeciones probables,
- que revisar antes,
- que no decir,
- valor estimado y urgencia.
El bloque de resultado permite marcar:
- no contactado
- contacto intentado
- hablo con alguien
- interesado
- reunion conseguida
- propuesta pendiente
- no encaja
- perdido
- volver mas tarde
Ademas permite:
- nota rapida,
- fecha de follow-up,
- cambio de prioridad,
- mover a pipeline,
- añadir a campaña,
- sacar del foco.
El guardado actualiza:
businesses.prospect_statusbusinesses.prioritybusinesses.last_contact_atbusinesses.next_follow_up_at- notas en
business_notes - resultado de ataque en
attack_results - evento comercial en
business_events(resultado, cambio de estado, prioridad y follow-up) - estado del item dentro de la sesion
Tras elegir resultado, ProspectMap propone automaticamente el siguiente movimiento:
- reintentar mañana,
- follow-up en 2 dias,
- subir prioridad,
- mover a pipeline,
- cerrar y sacar del foco,
- revisar mas tarde.
El usuario puede aceptar la sugerencia o sobrescribirla manualmente.
Centro de controlenvia alertas al moduloAtaque.Prioridadesabre una sesion centrada en score y valor.Pipelineabre una sesion orientada a seguimiento y cierre.Campañaspermiten trabajar una lista guardada como sesion.TerritoriolanzaAtaquesobre la zona visible del mapa.
attack_sessions: cabecera de sesion.attack_session_items: cola persistida de negocios por sesion.attack_results: resultado registrado tras trabajar cada lead.business_events: timeline comercial de cambios, resultados y seguimiento.
Ctrl/Cmd + Enter: guardar resultado del lead en foco.J/K: siguiente o anterior lead en la cola.S: saltar lead (si esta en sesion).D: descartar lead rapido.P: fijar o desfijar lead para hoy (si esta en sesion).E: mover lead al final de la cola (si esta en sesion).
- Total prospectados: estado distinto de
sin_contactar. - Tasa de contacto:
contactado o superior / (intento_contacto + estados posteriores). - Tasa de respuesta:
reunion_agendada o superior / contactado o superior. - Tasa de éxito:
ganado / total prospectados.
Gráficos:
- embudo por estado,
- distribución por estado,
- evolución temporal (30 días por
updated_at+ eventos comerciales), - distribución por sector,
- actividad reciente (eventos + notas + actualizaciones).
Campos esperados:
- obligatorios:
nombre,direccion - opcionales:
telefono,email,sector,contacto,notas,ciudad
Comportamiento:
- parsea CSV,
- geocodifica fila a fila con Nominatim,
- inserta negocios válidos,
- registra fallos en
csv_import_errors, - muestra resumen (ok/errores/ignorados).
Límite MVP por importación: 150 filas para respetar APIs gratuitas.
- Sube este proyecto a GitHub.
- En Vercel: Import Project.
- Define variables de entorno de
.env.exampleen Vercel. - Deploy.
- En Supabase Auth URL Configuration añade tu dominio de Vercel.
No se requiere backend separado ni infraestructura adicional.
Cambios mas importantes:
- verticales, textos, dolores, objeciones, boosts de servicio:
src/lib/commercial/verticals.ts
- calculo de score:
src/lib/commercial/scoring.ts
- valor económico y probabilidad:
src/lib/commercial/valuation.ts
- pipeline, atención y caducidad:
src/lib/commercial/pipeline.ts
- accion, canal y servicio recomendado:
src/lib/commercial/recommendations.ts
- mensajes sugeridos y señales destacadas:
src/lib/commercial/messaging.ts
- objeciones y respuestas:
src/lib/commercial/objections.ts
- composicion final del insight:
src/lib/commercial/engine.ts
- resumen ejecutivo, CTA, checklist, riesgos y angulo:
src/lib/commercial/report.ts
- persistencia por cuenta:
src/components/commercial/use-commercial-config.tssrc/lib/commercial/account-settings.ts
- perfil comercial de cuenta:
src/components/commercial/use-account-commercial-profile.tssrc/lib/commercial/account-profile.ts
- configuracion comercial por cuenta en tabla propia (
account_settings) - perfil comercial de cuenta en tabla propia (
account_profiles) - listas/campañas por cuenta con RLS (
prospect_lists,prospect_list_items) - sesiones de ataque y resultados por cuenta con RLS (
attack_sessions,attack_session_items,attack_results) - sistema de verticales centralizado y extensible
- separacion clara entre dominio comercial y UI
- override de vertical por negocio sin romper la vertical global
- motor determinista por capas facil de ampliar
- capa de valoración y pipeline separada del scoring
- fallback local si la persistencia remota no esta disponible
- componentes reutilizables para mapa, ranking, command center y ficha
- onboarding reutilizable y ampliable
- capa de informe comercial preparada para enriquecerse en futuras fases
No se ha implementado todavia:
- multiusuario por empresa
- billing
- automatizaciones externas
- CRM completo
- integraciones con email o WhatsApp real
- Overpass puede tardar o fallar en picos de uso (timeout/rate limit).
- Nominatim exige ritmo bajo de peticiones y uso responsable.
- Datos OSM no siempre traen telefono/email/web/sector completos.
- Geocodificacion no es perfecta; algunas direcciones ambiguas fallaran.
- Sin PostGIS ni motores premium, no hay analisis geoespacial avanzado.
- El motor comercial sigue siendo determinista; no usa enrichment externo ni IA generativa.
- El barrido funciona sobre la zona visible actual, no sobre poligonos dibujados.
- La extraccion de PDF es local y heuristica; si el archivo viene mal estructurado, tocara revisar manualmente el texto resumido.
El código queda preparado para sustituir endpoints externos en el futuro sin romper el dominio principal.
- tabla de historial de cambios de estado para auditoría exacta.
- cola de importación asíncrona para CSV grandes.
- deduplicación avanzada (fuzzy matching nombre+dirección).
- mapa con capas sectoriales predefinidas.
- búsquedas de texto completas sobre cartera.
- configuracion comercial multiusuario por empresa.
- barrido con selección manual de área en lugar de solo zona visible.
- librerias de objeciones y mensajes mas profundas por vertical.
- cuentas demo precargadas para presentaciones.
npm run dev
npm run lint
npm run build
npm run start