# 🏢 Análisis Completo del Proyecto InmoSpace

## 📋 Índice

1. [Descripción General del Proyecto](#1-descripción-general-del-proyecto)
2. [Arquitectura Actual](#2-arquitectura-actual)
3. [Modelo de Datos](#3-modelo-de-datos)
4. [Lógica de Negocio por Módulo](#4-lógica-de-negocio-por-módulo)
5. [Problemas y Limitaciones del Proyecto Actual](#5-problemas-y-limitaciones-del-proyecto-actual)
6. [Recomendación de Stack Tecnológico](#6-recomendación-de-stack-tecnológico)
7. [Plan de Migración por Fases](#7-plan-de-migración-por-fases)
8. [Prompts Detallados por Bloque](#8-prompts-detallados-por-bloque)

---

## 1. Descripción General del Proyecto

**InmoSpace** es una plataforma de gestión inmobiliaria profesional compuesta por **tres subsistemas principales** + un nuevo **portal web público**:

### 1.1 Aplicación de Agencia (VB6 Desktop - "Agencia")
- **Tecnología**: Visual Basic 6, ejecutándose en una VM Windows XP
- **Base de datos**: MySQL (`agencia2`) con **122 tablas**
- **Función**: CRM inmobiliario completo para la gestión de:
  - **Edificios** (7.552 registros): Propiedades con módulos, plantas, superficies, precios
  - **Demandas** (26.410 registros): Solicitudes de clientes buscando inmuebles
  - **Propietarios** (3.483 registros): Dueños de inmuebles
  - **Agencias** colaboradoras con grupos y contactos
  - **Operaciones firmadas** con desglose de rentabilidad
  - **Usuarios** (consultores) con perfiles y objetivos
  - **Visitas** a inmuebles, marketing, envíos

### 1.2 Módulo Catastro (PHP Web)
- **Tecnología**: PHP + PDO + HTML/CSS/JS
- **Base de datos**: MySQL (`catastro`) con **2 tablas principales** (6M+ registros)
- **Función**: Buscador de inmuebles por datos catastrales oficiales
  - Importación de ficheros `.CAT` del Catastro de España
  - Búsqueda por municipio, código postal, tipo de vía, tipo de inmueble
  - Filtrado por superficie, división horizontal
  - Visualización de edificios con superficies por uso (residencial, oficinas, comercial, etc.)
  - Exportación a Excel

### 1.3 Módulo Inversores (PHP Web)
- **Tecnología**: PHP + MySQLi + HTML/CSS/JS + PHPMailer + CKEditor
- **Base de datos**: MySQL (`agencia2`) - misma BBDD que la app VB6
- **Función**: Gestión de inversores inmobiliarios
  - Buscador de inversores por empresa, volumen de inversión, rentabilidad, usos urbanísticos
  - Tabulación de inversores (cualificación)
  - Gestión de acciones pendientes con alertas por colores (urgencia)
  - Envío masivo de correos electrónicos vía Gmail SMTP
  - Registro histórico de observaciones y envíos

### 1.4 🆕 Portal Público Inmobiliario (Web Pública - NUEVO)
- **Tecnología propuesta**: Next.js (SSR/SSG) para SEO óptimo
- **Base de datos**: Misma que el CRM (`agencia2`), usando las tablas `edificios`, `modulos`, `plantas`, `edificiosfotos`, `edificioscaracteristicas`, `pasarela_general`, `pasarela_publicaciones`
- **Función**: Web pública de cara al cliente donde se muestran los inmuebles disponibles
  - Catálogo de inmuebles con filtros (zona, tipo, superficie, precio)
  - Fichas de inmueble con galería de fotos, mapa, características y planos
  - Formulario de contacto/solicitud de visita
  - Buscador con SEO optimizado para posicionamiento
  - Blog/noticias del sector inmobiliario
  - Diseño premium, responsive, con soporte multiidioma (ES/EN)
  - Sincronización automática con el CRM: al marcar un edificio/módulo como "publicar en web" desde el backoffice, aparece en el portal público

> **Nota**: La base de datos legacy ya tenía tablas `pasarela_general` y `pasarela_publicaciones` preparadas para publicar inmuebles en portales externos (Idealista, etc.), lo que confirma que esta funcionalidad estaba prevista pero no implementada como web propia.

---

## 2. Arquitectura Actual

```
┌────────────────────────────────────────────────────────────────────────┐
│                        ARQUITECTURA ACTUAL                            │
│                                                                       │
│  ┌──────────────────┐   ┌───────────────────────────┐                 │
│  │   VM Windows XP  │   │     Servidor Web (LAMP)    │                │
│  │  ┌────────────┐  │   │  ┌──────────┐ ┌────────┐  │                │
│  │  │  App VB6   │  │   │  │ Catastro │ │Inversor│  │                │
│  │  │  "Agencia" │  │   │  │  (PHP)   │ │ (PHP)  │  │                │
│  │  └─────┬──────┘  │   │  └────┬─────┘ └───┬────┘  │                │
│  └────────┼─────────┘   └───────┼────────────┼───────┘                │
│           └──────────┬──────────┘            │                        │
│            ┌─────────▼───────────────────────▼─────┐                  │
│            │           MySQL Server                 │                  │
│            │  ┌──────────────┐  ┌────────────────┐  │                  │
│            │  │   agencia2   │  │    catastro     │  │                  │
│            │  │  122 tablas  │  │   2 tablas      │  │                  │
│            │  └──────────────┘  └────────────────┘  │                  │
│            └────────────────────────────────────────┘                  │
└────────────────────────────────────────────────────────────────────────┘

                    ▼▼▼  ARQUITECTURA NUEVA  ▼▼▼

┌────────────────────────────────────────────────────────────────────────┐
│                      PHOENIX-INMOSPACE (Next.js)                       │
│                                                                       │
│  ┌──────────────────────────────────┐  ┌────────────────────────────┐ │
│  │      BACKOFFICE (Privado)        │  │  PORTAL PÚBLICO (Web)      │ │
│  │  /admin (requiere auth)          │  │  / (acceso libre, SEO)     │ │
│  │                                  │  │                            │ │
│  │  • Dashboard                     │  │  • Home con destacados     │ │
│  │  • Catastro                      │  │  • Catálogo inmuebles      │ │
│  │  • Inversores                    │  │  • Fichas de inmueble      │ │
│  │  • Edificios/Demandas/Prop.      │  │  • Búsqueda + filtros      │ │
│  │  • Operaciones                   │  │  • Mapa interactivo        │ │
│  │  • Marketing                     │  │  • Contacto / Visitas      │ │
│  │  • Usuarios                      │  │  • Blog / Noticias         │ │
│  │  • Publicar en web ←─────────────┼──┼→ Auto-sincronización       │ │
│  └──────────────────────────────────┘  └────────────────────────────┘ │
│                          │                         │                  │
│                  ┌───────▼─────────────────────────▼──────┐           │
│                  │     API Routes (Next.js Server)         │           │
│                  │     Prisma ORM + PostgreSQL/MySQL       │           │
│                  └────────────────────────────────────────┘           │
└────────────────────────────────────────────────────────────────────────┘
```

---

## 3. Modelo de Datos
´
### 3.1 Base de Datos `agencia2` (122 tablas) - Grupos Principales

| Grupo | Tablas Principales | Función |
|-------|-------------------|---------|
| **Edificios** | `edificios`, `modulos`, `plantas`, `edificiosobs`, `edificiosfotos`, `edificiospresentados`, `edificioscaracteristicas` | Gestión de propiedades inmobiliarias |
| **Demandas** | `demandas`, `demandascontactos`, `demandasobs`, `demandassectores`, `demandascentradas`, `demandasestados` | Solicitudes de clientes |
| **Propietarios** | `propietarios`, `propietarioscontactos`, `propietariosobs` | Dueños de inmuebles |
| **Inversores** | `tabprop`, `tabpropzonas`, `inversorestab` (VIEW), `inversoresacciones`, `inversoresenvios` | Gestión de inversores |
| **Agencias** | `agencias`, `agenciascontactos`, `agenciasgrupos` | Agencias colaboradoras |
| **Operaciones** | `opfirmadas`, `opfirmadasmodulos`, `opfirmadasobs`, `opfirmadasplantas`, `opfirmadasrentaconcepto` | Operaciones cerradas |
| **Usuarios** | `usuarios`, `usuariosgrupos`, `usuariosobjetivos` | Consultores y admin |
| **Marketing** | `marketing`, `marketingedificios`, `envios`, `enviosdocumentos` | Campañas y envíos |
| **Visitas** | `visitas`, `visitasmodulos`, `visitasplantas` | Registro de visitas |
| **Portal Web** 🆕 | `pasarela_general`, `pasarela_publicaciones`, `edificiosfotos`, `edificiosfotosuk` | Publicación de inmuebles en web pública y portales externos |
| **Catálogos** | `tzonas`, `tzonassectores`, `tusos`, `testados`, `tsectores`, `tplanta`, `tcaracteristicas`, etc. | Tablas de referencia |

### 3.2 Tablas clave para el Portal Público 🆕

```sql
-- pasarela_general: Datos preparados para publicación en portales
CREATE TABLE pasarela_general (
  id INT AUTO_INCREMENT PRIMARY KEY,
  id_edificio INT,
  tipo VARCHAR(255),                    -- Tipo de inmueble
  edificio_nombre VARCHAR(250),
  regimen VARCHAR(255),                 -- Alquiler/Venta
  poblacion VARCHAR(255),
  calle VARCHAR(255), numero INT,
  planta VARCHAR(50), planta_texto VARCHAR(255),
  visibilidad_portales VARCHAR(255),    -- En qué portales se publica
  cp VARCHAR(10), zona VARCHAR(255),
  interior_exterior INT,
  exclusivo_oficinas INT,
  estado_conservacion INT,
  distribucion INT,
  aire_acondicionado INT,
  calificacion_energetica CHAR(1),
  n_plantas_edificio INT, n_ascensores INT,
  n_servicios INT, n_plazas_garaje INT,
  orientacion INT, seguridad_oficina INT,
  titulo VARCHAR(255),                  -- Título SEO del anuncio
  descripcion VARCHAR(255),             -- Descripción del anuncio
  web VARCHAR(255),                     -- URL del anuncio
  longitud VARCHAR(50), latitud VARCHAR(50),
  precio_alquiler DOUBLE, precio_venta DOUBLE,
  superficie DOUBLE,
  inmospace_referencia VARCHAR(255)      -- Referencia interna
);

-- edificiosfotos: Fotos de edificios (21.580 registros)
CREATE TABLE edificiosfotos (
  id INT AUTO_INCREMENT PRIMARY KEY,
  idedificio INT,
  foto VARCHAR(250),         -- Ruta/nombre de la foto
  omision TINYINT DEFAULT 0, -- Foto principal (si omision=0)
  plano TINYINT DEFAULT 0,   -- Es un plano
  planta TINYINT DEFAULT 0,  -- Es foto de planta
  codigoImagen VARCHAR(50)   -- Código para portales externos
);

-- tcaracteristicas: Catálogo de características (42.494 registros)
CREATE TABLE tcaracteristicas (
  idcaracteristica INT AUTO_INCREMENT PRIMARY KEY,
  caracteristica VARCHAR(250),
  nuevo TINYINT DEFAULT 1,
  caracteristica_ingles VARCHAR(250)   -- Ya soporta bilingüe ES/EN
);
```

### 3.2 Vista `inversorestab` (clave del módulo inversores)
```sql
-- Une Demandas + Propietarios como "inversores"
SELECT d.id AS idinversor, 'D' AS tipoinversor, d.empresa, 
       CASE WHEN t.id IS NOT NULL THEN 'S' ELSE 'N' END AS tabulado
FROM demandas d 
LEFT JOIN tabprop t ON d.id = t.idProp AND t.tipoInversor = 'D'
WHERE (d.idregimen IN (5,6,8,9) OR d.chkinversion = 1) AND d.borrado = 0
UNION
SELECT p.id, 'P', p.empresa, 
       CASE WHEN t.id IS NOT NULL THEN 'S' ELSE 'N' END
FROM propietarios p 
LEFT JOIN tabprop t ON p.id = t.idProp AND t.tipoInversor = 'P'
WHERE p.borrado = 0
```

### 3.3 Base de Datos `catastro` (2 tablas)

| Tabla | Registros | Campos Clave |
|-------|----------|-------------|
| `bienes_inmuebles` | ~6M | ParcelaCat, Municipio, TipoVia, Via, NumPolicia, ClaveGrupo, CoefPropiedad, SupAsocInmueble |
| `construcciones` | ~6M | ParcelaCat, Planta, CodDestinoDGC, SupTotLocal, IndTipoReforma |

---

## 4. Lógica de Negocio por Módulo

### 4.1 Módulo Catastro
1. **Importación CAT → MySQL** (`cat_to_mysql.php`): Parseo de ficheros de ancho fijo del Catastro español, extrayendo campos por posición/longitud
2. **Búsqueda de edificios** (`edificios.php`): Filtrado multi-criterio (municipio, CP, tipo vía, tipo inmueble, división horizontal, rango superficie)
3. **Descriptivo de edificio** (`descriptivo_plantas.php`): Desglose por plantas con superficies por uso
4. **Exportación a Excel** (jQuery table2excel)

### 4.2 Módulo Inversores
1. **Búsqueda de inversores** (`index.php` → `inversores.php`): Filtrado por empresa, volumen inversión (±20% margen), rentabilidad, usos urbanísticos, tabulación, estado de inversión
2. **Tabulación** (`tabulacion.php` → `set_tabulacion.php`): Formulario de cualificación con:
   - Estado "invierte/no invierte"
   - Valor añadido
   - Volumen inversión (min/max)
   - Rentabilidad esperada
   - 14 usos urbanísticos (checkboxes)
   - Zonas geográficas
   - Observaciones con historial + consultor
   - Alertas/acciones con fechas
3. **Acciones pendientes** (`index.php`): Dashboard con semáforo de urgencia (rojo/amarillo/naranja/verde)
4. **Envío masivo de emails** (`enviar.php`): SMTP Gmail con PHPMailer, registro en BBDD, firma personalizada por consultor

### 4.3 Aplicación VB6 "Agencia" (dentro de VM)
- CRM completo de gestión inmobiliaria
- Gestión de edificios, módulos, plantas
- Gestión de demandas y propietarios
- Operaciones firmadas
- Gestión de usuarios y permisos
- Marketing y envíos
- Visitas a inmuebles

### 4.4 🆕 Portal Público Inmobiliario (NUEVO)
1. **Publicación desde el backoffice**: El consultor marca un edificio/módulo como "publicar en web" → se genera un registro en `pasarela_general` con todos los datos necesarios (título, descripción, fotos, precio, coordenadas)
2. **Web pública SSR/SSG**: Páginas pre-renderizadas para SEO con:
   - **Home**: Hero con buscador rápido + inmuebles destacados + zonas populares
   - **Catálogo** (`/inmuebles`): Grid/lista con filtros (zona, tipo, superficie, precio, régimen)
   - **Ficha de inmueble** (`/inmuebles/[slug]`): Galería, mapa, características, planos, formulario de contacto
   - **Buscador avanzado**: Filtros combinados + mapa interactivo
   - **Contacto**: Formulario general + datos de la empresa
   - **Blog/Noticias**: Artículos del sector para SEO
3. **Auto-sincronización**: Al crear/editar/eliminar un inmueble en el CRM o cambiar su disponibilidad, la web pública se actualiza (ISR - Incremental Static Regeneration)
4. **Formularios de contacto**: Las solicitudes llegan como notificación al consultor asignado y se registran como demanda en el CRM
5. **Analíticas**: Integración con Google Analytics / Plausible para tracking de visitas por inmueble

---

## 5. Problemas y Limitaciones del Proyecto Actual

| Problema | Impacto |
|----------|---------|
| **VB6 obsoleto** (fin de soporte 2008) | Imposible mantener, ejecuta solo en VM Windows XP |
| **SQL Injection masivo** | Todas las queries concatenan strings sin parametrizar |
| **Sin autenticación web** | Los módulos PHP no tienen login ni control de acceso |
| **Credenciales expuestas** | Contraseñas SMTP, DB en código fuente/INI sin cifrar |
| **Sin API REST** | Cada módulo accede directamente a la BD |
| **Sin responsive design** | Diseño básico, no adaptado a móvil |
| **PHP procedural** | Sin MVC, sin ORM, sin framework |
| **Acoplamiento fuerte** | VB6, PHP y BD están acoplados directamente |
| **Sin tests** | No hay testing automatizado |
| **Sin CI/CD** | Deployment manual |

---

## 6. Recomendación de Stack Tecnológico

### 🎯 Stack Recomendado: **Next.js Full-Stack + PostgreSQL**

| Capa | Tecnología | Justificación |
|------|-----------|--------------|
| **Frontend** | **Next.js 15 (App Router)** + React 19 + TypeScript | SSR/SSG, SEO-ready, full-stack en un solo proyecto |
| **Estilos** | **Tailwind CSS v4** + Shadcn/ui | Componentes premium, dark mode, responsive out-of-the-box |
| **Backend/API** | **Next.js API Routes** + tRPC o REST | Tipado end-to-end, validación con Zod |
| **ORM** | **Prisma** | Type-safe, migraciones, compatible con MySQL y PostgreSQL |
| **Base de datos** | **PostgreSQL** (o mantener MySQL) | Full-text search nativo, JSON, mejor performance con GIS |
| **Autenticación** | **NextAuth.js (Auth.js)** | Roles (admin/consultor/viewer), sessions, OAuth |
| **Email** | **Resend** o **Nodemailer** | API moderna, plantillas React Email |
| **Almacenamiento** | **Supabase Storage** o S3 | Fotos edificios, documentos |
| **Mapas** | **Mapbox** o **Google Maps API** | Visualización geoespacial de inmuebles |
| **Gráficas** | **Recharts** o **Chart.js** | Dashboard de KPIs |
| **Hosting** | **Vercel** + **Supabase/PlanetScale** | Deploy automático, escalable |

### Alternativa: Si se prefiere separar frontend/backend
| Capa | Tecnología |
|------|-----------|
| **Frontend** | React + Vite + TypeScript |
| **Backend** | Node.js + Fastify + TypeScript |
| **API** | REST + OpenAPI/Swagger |

---

## 7. Plan de Migración por Fases

```
FASE 1 ──→ FASE 2 ──→ FASE 3 ──→ FASE 4 ──→ FASE 5 ──→ FASE 6 ──→ FASE 7 ──→ FASE 8
Setup &    Auth &     Catastro   Inversores  CRM Core   Operaciones Portal    Dashboard
Infra      Users      Module     Module      (Edificios) & Market.  Público   & Reportes
(2 sem)    (1 sem)    (2 sem)    (3 sem)     (4 sem)    (3 sem)    (4 sem)   (2 sem)
```

### FASE 1: Infraestructura y Setup Base (2 semanas)
- Proyecto Next.js + TypeScript + Tailwind
- Configuración Prisma + esquema base
- Migración de datos MySQL → PostgreSQL
- Layout base: sidebar, header, tema oscuro/claro
- Sistema de navegación
- **Estructura doble**: rutas `/admin` (backoffice) + `/` (portal público)

### FASE 2: Autenticación y Gestión de Usuarios (1 semana)
- NextAuth.js con roles (Admin, Consultor, Viewer)
- CRUD usuarios
- Middleware de protección de rutas `/admin/*`
- Las rutas públicas `/` no requieren autenticación

### FASE 3: Módulo Catastro (2 semanas)
- Importación de ficheros CAT
- Buscador con filtros avanzados
- Visualización de edificios con mapa
- Descriptivo por plantas
- Exportación Excel/PDF

### FASE 4: Módulo Inversores (3 semanas)
- CRUD inversores (demandas + propietarios)
- Tabulación con formulario completo
- Dashboard de acciones pendientes con semáforo
- Envío masivo de emails
- Histórico de observaciones

### FASE 5: CRM Core - Edificios, Demandas, Propietarios (4 semanas)
- CRUD Edificios con módulos y plantas
- CRUD Demandas con contactos
- CRUD Propietarios con contactos
- Matching automático demanda ↔ edificio
- Galería de fotos
- **Toggle "Publicar en web"** en ficha de edificio/módulo

### FASE 6: Operaciones Firmadas y Marketing (3 semanas)
- Gestión de operaciones cerradas
- Cálculo de rentabilidad
- Campañas de marketing
- Envío de documentos
- Visitas a inmuebles

### FASE 7: 🆕 Portal Público Inmobiliario (4 semanas)
- **Home page**: Hero, buscador rápido, inmuebles destacados, zonas
- **Catálogo de inmuebles**: Grid con filtros, paginación, mapa
- **Fichas de inmueble**: Galería, mapa, características, formulario contacto
- **SEO**: Meta tags dinámicos, sitemap, structured data (JSON-LD)
- **Blog**: CMS integrado para artículos SEO
- **Contacto**: Formulario → notificación al consultor + registro en CRM
- **Multiidioma**: ES/EN (las características ya tienen traducciones)
- **ISR**: Regeneración automática al publicar/despublicar inmuebles

### FASE 8: Dashboard, Reportes y Mejoras (2 semanas)
- Dashboard ejecutivo con KPIs
- Reportes exportables
- Notificaciones push/email
- PWA (Progressive Web App) para móvil
- Analíticas del portal público (visitas por inmueble, conversiones)

---

## 8. Prompts Detallados por Bloque

---

### 📦 BLOQUE 1: Infraestructura y Setup Base

```
PROMPT: Configuración Inicial del Proyecto Phoenix-InmoSpace

Estoy migrando una aplicación inmobiliaria legacy (VB6 + PHP + MySQL) a una 
aplicación web moderna. Crea el proyecto base con las siguientes especificaciones:

TECNOLOGÍAS:
- Next.js 15 (App Router) con TypeScript
- Tailwind CSS v4 con Shadcn/ui
- Prisma ORM
- PostgreSQL (o MySQL 8 si se prefiere mantener compatibilidad)

ESTRUCTURA DEL PROYECTO:
/src
  /app
    /(auth)          → Páginas de login/registro  
    /(dashboard)     → Layout principal con sidebar
      /catastro      → Módulo catastro
      /inversores    → Módulo inversores
      /edificios     → Gestión edificios
      /demandas      → Gestión demandas
      /propietarios  → Gestión propietarios
      /operaciones   → Operaciones firmadas
      /usuarios      → Gestión usuarios
      /dashboard     → Dashboard principal
    /api             → API Routes
  /components
    /ui              → Componentes Shadcn/ui
    /layout          → Header, Sidebar, Footer
    /catastro        → Componentes específicos catastro
    /inversores      → Componentes específicos inversores
    /shared          → Componentes compartidos
  /lib
    /db              → Configuración Prisma
    /utils           → Utilidades
    /validations     → Schemas Zod
    /types           → Tipos TypeScript
  /hooks             → Custom hooks

DISEÑO UI:
- Tema oscuro/claro con toggle
- Sidebar colapsable con navegación por módulos
- Breadcrumbs
- Header con búsqueda global, notificaciones, perfil
- Colores principales: Azul profundo (#1A365D) + Accent dorado (#D69E2E)
- Tipografía: Inter
- Animaciones de transición suaves
- Layout responsive (mobile-first)

ESQUEMA PRISMA INICIAL:
Crear el schema.prisma con las entidades principales migradas del SQL:
- User (tabla usuarios)
- Las enum y tablas de catálogo necesarias

TAREAS ESPECÍFICAS:
1. Inicializar el proyecto Next.js con todas las dependencias
2. Configurar Tailwind v4 + Shadcn/ui
3. Crear el schema Prisma base
4. Crear el layout principal (sidebar + header)
5. Página de inicio con mensaje de bienvenida
6. Configurar ESLint + Prettier
7. Crear un archivo .env.example con las variables necesarias
```

---

### 📦 BLOQUE 2: Autenticación y Gestión de Usuarios

```
PROMPT: Sistema de Autenticación y CRUD de Usuarios

Implementa el sistema de autenticación para la aplicación Phoenix-InmoSpace.

CONTEXTO:
La base de datos legacy tiene una tabla `usuarios` con los campos:
- Id, Nombre, Clave, Activo, Administrador, Email, Iniciales, Firma
- perfil (1=Admin, 2=Consultor), idregimen, movil, cargo
- comision, directormarketing, passmail (contraseña email SMTP)

FUNCIONALIDADES:

1. AUTENTICACIÓN (NextAuth.js / Auth.js):
   - Login con email + contraseña
   - Encriptación bcrypt de contraseñas (la app legacy las guardaba en texto plano)
   - Sesiones con JWT
   - Middleware de protección de rutas
   - Redirect automático al login si no autenticado

2. ROLES Y PERMISOS:
   - ADMIN: Acceso total + gestión de usuarios
   - CONSULTOR: Acceso a módulos de negocio, solo edita sus propios registros
   - VIEWER: Solo lectura

3. CRUD DE USUARIOS (/usuarios):
   - Tabla con listado de usuarios con filtros (activo/inactivo, rol)
   - Formulario de creación/edición con validación
   - Activar/desactivar usuario (soft delete)
   - Cambio de contraseña
   - Avatar con iniciales del usuario

4. PERFIL DE USUARIO:
   - Página de perfil personal
   - Cambio de contraseña
   - Configuración de email SMTP personal (para envío de correos a inversores)
   - Firma de correo personalizada (HTML)

DISEÑO:
- Página de login elegante con el logo de InmoSpace
- Toast notifications para feedback
- Validación en tiempo real con Zod
- Indicador de fuerza de contraseña
```

---

### 📦 BLOQUE 3: Módulo Catastro

```
PROMPT: Módulo Catastro - Buscador de Inmuebles por Datos Catastrales

Implementa el módulo de búsqueda catastral para Phoenix-InmoSpace.

CONTEXTO BASE DE DATOS:
La base de datos catastral tiene 2 tablas principales:
- `bienes_inmuebles` (~6M registros): ID, ParcelaCat, Municipio, TipoVia, Via, 
  NumPolicia1, CodPostal, ClaveGrupo (A=Almacén, V=Residencial, I=Industrial, 
  O=Oficinas, C=Comercial, G=Ocio, Y=Sanidad, E=Cultural, R=Religioso, M=Suelo, 
  P=Singular), SupAsocInmueble, CoefPropiedad, Escalera, Planta, Puerta
- `construcciones` (~6M registros): ParcelaCat, Planta, CodDestinoDGC, 
  SupTotLocal, IndTipoReforma, AnyoReforma, Escalera, Puerta

FUNCIONALIDADES:

1. BÚSQUEDA POR CÓDIGO POSTAL (Tab 1):
   - Selector de municipio (lista predefinida de ~25 ciudades españolas)
   - Multi-selector de códigos postales (se cargan dinámicamente según municipio)
   - Multi-selector de tipo de inmueble (11 tipos con checkboxes)
   - Radio para división horizontal (Todos/Con/Sin)
     * "Con" = CoefPropiedad != 100000000
     * "Sin" = CoefPropiedad = 100000000
   - Rango de superficie (mín/máx en m²)

2. BÚSQUEDA POR CALLE Y NÚMERO (Tab 2):
   - Selector de municipio
   - Selector de tipo de vía (CL, AV, PZ, PS, CR... ~60 tipos)
   - Input texto para nombre de vía
   - Input número
   - Mismos filtros de tipo inmueble, div. horizontal y superficie

3. RESULTADOS - LISTADO DE EDIFICIOS:
   - Tabla con columnas dinámicas según tipos de inmueble seleccionados
   - Columna "Edificio" con enlace al descriptivo
   - Columnas de superficie por cada tipo seleccionado
   - Contador de edificios encontrados
   - Ordenación por columna (click en cabecera)
   - Exportación a Excel
   - LÓGICA: 
     * Buscar bienes_inmuebles que cumplan filtros
     * Para cada edificio (GROUP BY ParcelaCat), calcular superficie por tipo
       de construcción (SELECT LEFT(CodDestinoDGC,1), SUM(SupTotLocal))
     * Caso especial: si Escalera='S', Planta='UE', Puerta='LO' → es suelo,
       superficie = SupAsocInmueble
     * Solo mostrar si superficie dentro del rango filtrado

4. DESCRIPTIVO DE EDIFICIO:
   - Vista detallada por plantas
   - Tabla con superficies por planta y tipo de uso
   - Desglose de construcciones por planta
   - Totales sobre rasante / bajo rasante
   - Exportación individual a Excel

5. IMPORTACIÓN DE DATOS CAT (Admin):
   - Página para subir ficheros .CAT del Catastro
   - Parser de ficheros de ancho fijo (posiciones predefinidas)
   - Barra de progreso de importación
   - Logs de resultado

NUEVAS FUNCIONALIDADES A AÑADIR:
   - Visualización en mapa (Mapbox/Google Maps) de los edificios encontrados
   - Autocompletado de nombres de calle al escribir
   - Cacheo de búsquedas frecuentes
   - Filtro guardado/favoritos
   - Comparador de edificios (seleccionar varios y ver lado a lado)

DISEÑO:
- Formulario de búsqueda en panel lateral izquierdo (estilo filtros e-commerce)
- Resultados en tabla scrollable a la derecha
- Mapa integrado debajo o en split-view
- Chips/badges para filtros activos
- Loading skeleton mientras carga
- Paginación server-side (los resultados pueden ser miles)
```

---

### 📦 BLOQUE 4: Módulo Inversores

```
PROMPT: Módulo Inversores - CRM de Inversores Inmobiliarios

Implementa el módulo de gestión de inversores para Phoenix-InmoSpace.

CONTEXTO BASE DE DATOS:
El módulo usa una VIEW `inversorestab` que une:
- Demandas (tipoinversor='D') con régimen inversión (idregimen IN 5,6,8,9 OR chkinversion=1)
- Propietarios (tipoinversor='P') no borrados
Cada uno se cruza con `tabprop` para saber si está tabulado (cualificado).

Tablas involucradas:
- `inversorestab` (VIEW): idinversor, tipoinversor, empresa, tabulado(S/N)
- `tabprop`: idProp, tipoInversor, invierte(S/N), valorAnadido, superficiemin/max, 
  rentabilidad, chkOfi, chkOec, chkOfiRent, chkOcu, chkLoc, chkLocRent, chkLcu, 
  chkResi, chkRec, chkInd, chkSue, chkEst, chkHot, chkOtr (14 usos urbanísticos)
- `tabpropzonas`: idProp, tipoInversor, idzona
- `tzonassectores`: idzonasector, zonasector, parent
- `demandascontactos` / `propietarioscontactos`: nombre, cargo, telefono1/2, movil, 
  email, chkomision (contacto principal)
- `demandasobs` / `propietariosobs`: fecha, idconsultor, observacion
- `inversoresacciones`: idinversor, tipoinversor, accion, fecha, realizada
- `inversoresenvios`: idinversor, tipoinversor, contacto, email, adjuntos, 
  enviado(S/N), error, fecha
- `usuarios`: Nombre, Iniciales, Email, passmail

FUNCIONALIDADES:

1. DASHBOARD DE INVERSORES (/inversores):
   Panel izquierdo - BUSCADOR:
   - Input empresa (búsqueda parcial LIKE '%x%')
   - Input volumen inversión (formateado con puntos de miles)
     * Lógica: busca inversores cuyo rango [superficiemin, superficiemax] 
       contenga el valor ±20% (MARGEN = 0.2)
   - Inputs rentabilidad mín/máx
   - Multi-selector usos urbanísticos (14 opciones)
   - Radio: Tabulado (Sí/No/Todos) - default: Sí
   - Radio: Invierte (Sí/No/Todos) - default: Todos
   - Radio: Valor añadido (Sí/No/Todos) - default: Todos

   Panel derecho - ACCIONES PENDIENTES:
   - Lista de acciones con semáforo de urgencia:
     * 🔴 Rojo: Fecha pasada ("Hace X días")
     * 🟡 Amarillo: Fecha = hoy ("PARA HOY")
     * 🟠 Naranja: Menos de 7 días ("En X días")
     * 🟢 Verde: 7+ días ("En X días" o "En más de un mes")
   - Click en acción → Modal de edición (acción, fecha, checkbox realizada)

2. LISTADO DE INVERSORES (/inversores/listado):
   - Tabla con 29 columnas:
     Tab | Empresa | Tipo(D/P) | Inv | VA | Vol mín | Vol máx | Rentabilidad |
     Ofi | Oec | OfiRen | Ocu | Loc | LocRen | Lcu | Res | Rec | Ind | Sue | 
     Est | Hot | Otr | Contacto | Cargo | Tel1 | Tel2 | Móvil | Email | ✓
   - Los usos se muestran como ✔ si están activados
   - El contacto principal (chkomision=1) se muestra en negrita
   - Columna de checkbox para seleccionar emails para envío masivo
   - Botón "Enviar" → Modal con formulario de email
   - Botón "Excel" → Exportar tabla
   - Contador de registros
   - Persistencia de filtros en sesión (al volver desde tabulación se mantienen)

3. TABULACIÓN DE INVERSOR (/inversores/tabulacion/[id]):
   Panel izquierdo - DATOS DE TABULACIÓN:
   - Checkbox "No invierte" (deshabilita resto de campos si marcado)
   - Checkbox "Valor añadido"
   - Inputs volumen inversión mín/máx (formateados)
   - Input rentabilidad
   - Multi-selector usos urbanísticos (14 opciones, preseleccionados)
   - Multi-selector zonas geográficas (cargadas de tzonassectores)
   - Textarea observación
   - Selector consultor (requerido si hay observación)
   - Inputs alerta: acción + fecha
   - Botones: Volver | Restablecer | Guardar
   - LÓGICA DE GUARDADO (transacción):
     a) DELETE + INSERT tabpropzonas (zonas)
     b) UPDATE o INSERT tabprop (datos tabulación)
     c) INSERT observación si no vacía
     d) INSERT alerta si no vacía
     e) COMMIT o ROLLBACK

   Panel derecho - HISTÓRICO DE OBSERVACIONES:
   - Tabla con Fecha | Consultor | Observación
   - Texto largo con "ver más/menos"
   - Ordenado por fecha DESC

4. ENVÍO MASIVO DE EMAILS:
   - Modal con:
     * Selector remitente (usuarios activos con email configurado)
     * Input asunto
     * Editor de texto enriquecido (CKEditor → Tiptap o similar en React)
     * Adjuntos (futuro)
   - LÓGICA:
     * Para cada email seleccionado en el listado:
       - Enviar vía SMTP (Gmail TLS:587)
       - Añadir firma HTML personalizada del remitente
       - Registrar en inversoresenvios (resultado S/N + error)
     * Mostrar tabla de resultados del envío

NUEVAS FUNCIONALIDADES:
   - Pipeline visual (Kanban) de estado de inversores
   - Timeline de interacciones por inversor
   - Estadísticas: inversores por uso, por zona, por volumen
   - Notificaciones en tiempo real de acciones vencidas
   - Búsqueda global con autocompletado
   - Exportación de ficha de inversor a PDF

DISEÑO:
- Dashboard dividido en dos paneles (buscador + acciones)
- Tabla con sticky header y scroll horizontal
- Modal de email con editor WYSIWYG moderno
- Cards para acciones pendientes con borde lateral coloreado
- Animaciones de transición entre vistas
```

---

### 📦 BLOQUE 5: CRM Core - Edificios, Demandas y Propietarios

```
PROMPT: CRM Core - Gestión de Edificios, Demandas y Propietarios

Implementa los módulos centrales del CRM inmobiliario Phoenix-InmoSpace.

CONTEXTO BASE DE DATOS:

A) EDIFICIOS (tabla `edificios`, 90+ campos):
   - Datos base: edificio, numarchivo, calle, numero, poblacion, cp
   - Ubicación: idzona, idsector, idprovincia, distrito, longitud, latitud
   - Estado: activo, borrado, completo, unico, unicoalquiler
   - Financiero: precioventa, divisibilidad, divisibilidadventa
   - Documentación: chkplanos, chkibi, chkestatutos, chkdossier, etc.
   - Construcción: chksuelo, chkconstruccion, chkrehabilitacion, chkterminado
   - Web: web, enlaceweb, inmoref
   - Energético: calificacionenergetica, indiceenergetico
   - Relaciones:
     * `plantas` → lista de plantas del edificio
     * `modulos` → módulos/oficinas por planta con superficie, renta, venta, 
       disponibilidad, plazas parking
     * `edificiosfotos` → galería de fotos
     * `edificiosobs` → observaciones
     * `edificioscaracteristicas` → características del edificio
     * `edificiospresentados` → presentaciones a demandas
     * `moduosagencias` → agencias asignadas

B) DEMANDAS (tabla `demandas`):
   - Datos: empresa, dirección, idconsultor, fechaentrada
   - Necesidades: idactividad, idregimen, iduso, superficiemin/max, 
     ventamin/max, alquilermin/max, presupuesto
   - Estado: idestado, idavance, activa, prevision
   - Financiero: honpotencialkf, honpotencial3ag, comision
   - Relaciones:
     * `demandascontactos` → contactos de la demanda
     * `demandasobs` → observaciones
     * `demandassectores` → sectores de interés
     * `demandascentradas` → demandas centradas en edificios
     * `demandasestados` → histórico de estados

C) PROPIETARIOS (tabla `propietarios`):
   - Datos: empresa, dirección, nif
   - Financiero: superficiemin/max, factalquiler, factventa, volumen
   - Relaciones:
     * `propietarioscontactos` → contactos
     * `propietariosobs` → observaciones

FUNCIONALIDADES POR MÓDULO:

1. EDIFICIOS (/edificios):
   - Listado con filtros: zona, sector, tipo vía, población, activo, disponible
   - Tarjetas de edificio con foto principal, dirección, superficie total, precio
   - Vista detallada de edificio:
     * Datos generales con mapa de ubicación
     * Tabla de plantas y módulos con disponibilidad
     * Galería de fotos con lightbox
     * Documentación disponible (checklist)
     * Historial de observaciones
     * Historial de presentaciones a demandas
   - Formulario de creación/edición
   - Gestión de módulos: CRUD inline o modal

2. DEMANDAS (/demandas):
   - Listado con filtros: estado, consultor, régimen, uso, superficie, fecha
   - Ficha de demanda:
     * Datos generales
     * Contactos (CRUD inline)
     * Sectores de interés
     * Observaciones con timeline
     * Edificios presentados
     * Matching automático: sugerir edificios que coincidan con criterios
   - Pipeline visual (Kanban) por estado/avance
   - Alertas de demandas sin actividad

3. PROPIETARIOS (/propietarios):
   - Listado con búsqueda por empresa, NIF
   - Ficha con contactos y observaciones
   - Listado de edificios asociados
   - Historial de comunicaciones

4. MATCHING EDIFICIO-DEMANDA (NUEVA):
   - Algoritmo que cruza criterios de demanda con edificios disponibles
   - Sugerir edificios al consultar una demanda
   - Sugerir demandas al consultar un edificio
   - Score de coincidencia (%)

DISEÑO:
- Cards/Grid para edificios con foto, datos clave y estado
- Timeline visual para observaciones
- Kanban para pipeline de demandas
- Split-view para ficha: datos a la izquierda, mapa/fotos a la derecha
- Tags coloreados para estados
```

---

### 📦 BLOQUE 6: Operaciones Firmadas y Marketing

```
PROMPT: Módulo de Operaciones Firmadas, Marketing y Visitas

Implementa los módulos de operaciones, marketing y visitas de Phoenix-InmoSpace.

CONTEXTO BASE DE DATOS:

A) OPERACIONES FIRMADAS:
   - `opfirmadas`: id, idedificio, iddemanda, idpropietario, superficie, 
     renta mensual, garantías, inicio contrato...
   - `opfirmadasmodulos`: módulos incluidos en la operación
   - `opfirmadasplantas`: plantas afectadas
   - `opfirmadasobs`: observaciones de la operación
   - `opfirmadasannorenta`: rentas anuales
   - `opfirmadasrentaconcepto`: desglose por conceptos
   - `opfirmadasproporcionalidad`: distribución proporcional

B) MARKETING:
   - `marketing`: campañas de marketing
   - `marketingedificios`: edificios incluidos en campañas
   - `envios`: histórico de envíos
   - `enviosdocumentos`: documentos adjuntos

C) VISITAS:
   - `visitas`: registro de visitas a edificios
   - `visitasmodulos`: módulos visitados
   - `visitasplantas`: plantas visitadas

FUNCIONALIDADES:

1. OPERACIONES FIRMADAS (/operaciones):
   - Listado con filtros: fecha, edificio, consultor, tipo
   - Ficha de operación:
     * Datos del contrato
     * Edificio y módulos afectados
     * Demanda y propietario
     * Desglose de rentas
     * Documentos adjuntos
     * Observaciones
   - Dashboard de operaciones:
     * KPIs: operaciones del mes/trimestre/año
     * Facturación total
     * Superficie operada
   - Formulario de nueva operación vinculando edificio + demanda

2. MARKETING (/marketing):
   - Gestión de campañas con edificios incluidos
   - Histórico de envíos con documentos
   - Plantillas de email reutilizables

3. VISITAS (/visitas):
   - Registro de visitas con módulos/plantas visitados
   - Calendario de visitas
   - Integración con agenda (Google Calendar)

NUEVAS FUNCIONALIDADES:
   - Pipeline de ventas con forecast
   - Cálculo automático de comisiones
   - Generación automática de contratos (PDF)
   - Recordatorios de renovación de contratos
```

---

### 📦 BLOQUE 7: Dashboard Ejecutivo y Reportes

```
PROMPT: Dashboard Ejecutivo, Reportes y PWA

Implementa el dashboard principal y sistema de reportes de Phoenix-InmoSpace.

FUNCIONALIDADES:

1. DASHBOARD EJECUTIVO (/dashboard):
   - KPIs principales en cards animadas:
     * Edificios activos / Total
     * Demandas activas / Total
     * Operaciones del mes / año
     * Facturación total
     * Inversores tabulados / Total
   - Gráfica de operaciones por mes (barras)
   - Gráfica de facturación acumulada (línea)
   - Top 5 zonas con más demanda (donut)
   - Mapa de calor de edificios por zona
   - Últimas acciones pendientes (feed)
   - Actividad reciente (timeline)

2. REPORTES (/reportes):
   - Generador de informes con filtros personalizables
   - Tipos de informe:
     * Stock de superficies disponibles por zona
     * Evolución de precios de alquiler/venta
     * Actividad por consultor
     * Análisis de demandas por uso/régimen
     * Listado de edificios para inversores filtrado
   - Exportación a PDF y Excel
   - Programación de informes periódicos por email

3. NOTIFICACIONES:
   - Sistema de notificaciones in-app
   - Badge en campana del header
   - Tipos: acciones vencidas, nuevas demandas, operaciones completadas
   - Configuración de preferencias de notificación por usuario

4. PWA (Progressive Web App):
   - Manifest + Service Worker
   - Instalable en móvil
   - Modo offline para consulta de edificios guardados
   - Push notifications para acciones urgentes

5. BÚSQUEDA GLOBAL:
   - Searchbar en header con Cmd+K
   - Busca en edificios, demandas, propietarios, inversores
   - Resultados agrupados por tipo con preview
   - Histórico de búsquedas recientes

DISEÑO:
- Grid de cards con micro-animaciones de entrada
- Gráficas interactivas con tooltips
- Mapa interactivo a pantalla completa
- Tema oscuro con gradientes sutiles (#0F172A → #1E293B)
- Animaciones con Framer Motion
```

---

### 📦 BLOQUE 8: 🆕 Portal Público Inmobiliario

```
PROMPT: Portal Público Inmobiliario - Web de Inmuebles para Clientes

Implementa el portal web público de InmoSpace donde se muestran los inmuebles 
disponibles a clientes e inversores potenciales. Este portal es la cara visible 
de la empresa en Internet.

CONTEXTO TÉCNICO:
Este portal forma parte de la misma aplicación Next.js que el backoffice, pero 
son rutas públicas (sin autenticación) bajo el path `/`. El backoffice está 
bajo `/admin`. Ambos comparten la misma base de datos y los mismos modelos 
Prisma, pero con layouts completamente distintos.

CONTEXTO BASE DE DATOS:
Los inmuebles a mostrar provienen de estas tablas:

- `edificios` (7.552 registros): Datos del edificio
  * Campos relevantes para web: edificio, calle, numero, poblacion, cp, 
    idzona, idprovincia, distrito, longitud, latitud, precioventa,
    calificacionenergetica, situacion, situacionen (bilingüe),
    comunicaciones, comunicacionesen (bilingüe), web (flag 0/1),
    enlaceweb, inmoref (referencia InmoSpace), inquilinos, coord
  * El campo `web = 1` indica que el edificio debe mostrarse en la web pública
  * El campo `activo = 1` y `borrado = 0` filtran los válidos

- `modulos` (53.434 registros): Módulos/oficinas dentro de cada edificio
  * Campos web: modulo (nombre), superficie, fdisponible, disponible (0/1), 
    renta (€/m²/mes), venta (€/m²), idregimen (alquiler/venta/ambos),
    plazasventa, plazasalquiler, descriptivo
  * Solo se muestran los que tienen `disponible = 1` y `borrado = 0`

- `plantas` (32.112 registros): Plantas del edificio
  * nombre, idedificio, superficietotal, idplanta

- `edificiosfotos` (21.580 registros): Galería de fotos
  * idedificio, foto (ruta/nombre), omision (0=principal), plano (0/1)
  * Las fotos con `plano = 1` son planos y se muestran en sección separada

- `edificioscaracteristicas` (558.787 registros): Características
  * idedificio, idcaracteristica → JOIN con `tcaracteristicas`

- `tcaracteristicas` (42.494 registros): Catálogo de características
  * caracteristica (ES), caracteristica_ingles (EN) → soporte bilingüe

- `pasarela_general`: Datos preparados para portales
  * titulo, descripcion, precio_alquiler, precio_venta, superficie,
    longitud, latitud, calificacion_energetica, zona, etc.
  * inmospace_referencia → referencia única del anuncio

- `tzonas` / `tzonassectores`: Zonas geográficas para filtrar
- `tregimen`: Tipos de régimen (alquiler, venta, ambos)

LÓGICA DE PUBLICACIÓN:
- Desde el backoffice (Bloque 5), el consultor puede:
  a) Marcar edificio con `web = 1` → aparece en la web pública
  b) Configurar título SEO y descripción para el anuncio
  c) Seleccionar fotos a mostrar (omision = 0 para foto principal)
  d) Los módulos `disponible = 1` del edificio se listan automáticamente
- Al guardar, se dispara ISR (Incremental Static Regeneration) para 
  regenerar la página del inmueble sin necesidad de rebuild completo

ESTRUCTURA DE RUTAS PÚBLICAS:
/                           → Home page
/inmuebles                  → Catálogo con filtros y mapa
/inmuebles/[slug]           → Ficha de inmueble
/inmuebles/zona/[zona]      → Inmuebles por zona
/contacto                   → Formulario de contacto general
/nosotros                   → Sobre InmoSpace
/blog                       → Listado de artículos
/blog/[slug]                → Artículo individual
/aviso-legal                → Legal
/politica-privacidad        → RGPD

FUNCIONALIDADES DETALLADAS:

1. HOME PAGE (/):
   - Hero section espectacular con imagen de fondo (edificio premium)
   - Buscador rápido superpuesto al hero:
     * Selector: Alquiler / Venta / Inversión
     * Selector zona/ubicación
     * Rango de superficie
     * Rango de precio
     * Botón "Buscar"
   - Sección "Inmuebles destacados" (los 6 últimos publicados o marcados)
   - Sección "Zonas" con cards por zona + nº de inmuebles disponibles
   - Sección "Servicios" (consultoría, inversión, gestión patrimonial)
   - Sección "Por qué InmoSpace" (datos/cifras de la empresa)
   - Footer con datos de contacto, redes sociales, mapa del sitio

2. CATÁLOGO DE INMUEBLES (/inmuebles):
   - Layout a dos columnas: filtros (izquierda) + resultados (derecha)
   - FILTROS (panel lateral colapsable en móvil):
     * Régimen: Alquiler / Venta / Todos
     * Zona: Multi-selector con zonas disponibles
     * Tipo: Oficina, Local, Residencial, Industrial, etc.
     * Superficie: Slider doble (mín-máx en m²)
     * Precio: Slider doble (mín-máx en €)
     * Calificación energética: Multi-checkbox
     * Disponibilidad: Inmediata / Fecha concreta
     * Características: Aire acondicionado, plazas garaje, etc.
   - RESULTADOS:
     * Toggle vista: Grid (cards) / Lista / Mapa
     * Ordenar por: Precio ↑↓, Superficie ↑↓, Más reciente, Zona
     * Cards con: Foto principal, dirección, superficie, precio, etiqueta 
       (Alquiler/Venta), referencia, zona
     * Paginación o scroll infinito
     * Contador: "X inmuebles encontrados"
   - MAPA (vista mapa):
     * Mapa interactivo (Mapbox o Google Maps) con pins por inmueble
     * Popup al clickar pin con foto + datos básicos + enlace
     * Zoom a cluster cuando hay muchos pins juntos
     * Filtros se aplican también al mapa

3. FICHA DE INMUEBLE (/inmuebles/[slug]):
   - Breadcrumb: Inicio > Inmuebles > Zona > Nombre edificio
   - GALERÍA DE FOTOS:
     * Carrusel principal con imagen grande
     * Thumbnails debajo o lateral
     * Lightbox a pantalla completa
     * Separar fotos de planos (pestañas: "Fotos" | "Planos")
     * Lazy loading de imágenes
   - DATOS PRINCIPALES (sidebar derecho):
     * Precio: X €/m²/mes (alquiler) o X € (venta)
     * Superficie total disponible
     * Referencia InmoSpace (inmoref)
     * Calificación energética (badge con color)
     * Botón CTA: "Solicitar información" → abre modal de contacto
     * Botón: "Solicitar visita" → abre modal con calendario
     * Botón: "Descargar ficha PDF"
     * Compartir: WhatsApp, Email, LinkedIn, copiar enlace
   - DESCRIPCIÓN:
     * Texto descriptivo del edificio (situacion/situacionen)
     * Comunicaciones y accesos (comunicaciones/comunicacionesen)
   - MÓDULOS DISPONIBLES:
     * Tabla/cards con cada módulo disponible:
       - Planta, superficie, renta/venta, estado
       - Fecha disponibilidad si no inmediata
       - Plazas de garaje incluidas
   - CARACTERÍSTICAS:
     * Grid de iconos con las características del edificio
     * Agrupadas por categoría (climatización, seguridad, servicios)
   - MAPA DE UBICACIÓN:
     * Mapa embebido con pin del edificio
     * Puntos de interés cercanos (metro, bus, restaurantes)
     * Street View integrado si disponible
   - INMUEBLES SIMILARES:
     * 3-4 cards de inmuebles en la misma zona con características similares
   - FORMULARIO DE CONTACTO:
     * Nombre, Email, Teléfono, Mensaje
     * Checkbox RGPD
     * Al enviar: 
       a) Email al consultor asignado al edificio (idconsultor)
       b) Email de confirmación al usuario
       c) Registro como nueva demanda en el CRM
       d) Notificación in-app al consultor

4. SEO Y RENDIMIENTO:
   - generateStaticParams() para pre-renderizar fichas de inmuebles
   - ISR con revalidación cada hora o on-demand al publicar
   - Meta tags dinámicos por inmueble:
     * <title>Oficina en alquiler en [zona] - [superficie]m² | InmoSpace</title>
     * <meta description> con precio, superficie, ubicación
     * Open Graph tags para compartir en redes
     * Twitter Cards
   - JSON-LD Structured Data (schema.org/RealEstateListing)
   - Sitemap.xml dinámico con todos los inmuebles activos
   - robots.txt
   - Canonical URLs
   - Imágenes optimizadas con next/image + WebP
   - Core Web Vitals optimizados (LCP, FID, CLS)

5. MULTIIDIOMA (ES/EN):
   - next-intl o similar para internacionalización
   - Rutas: /es/inmuebles/... y /en/properties/...
   - Las descripciones y características ya tienen versión en inglés 
     en la BD (situacionen, comunicacionesen, caracteristica_ingles)
   - Selector de idioma en header
   - Etiquetas hreflang para SEO multiidioma

6. BLOG/NOTICIAS (/blog):
   - CMS ligero integrado (MDX o base de datos)
   - Artículos del sector inmobiliario para SEO
   - Categorías: Mercado, Inversión, Zonas, Tendencias
   - Artículos automáticos tipo "Oficinas disponibles en [zona]" 
     generados a partir de los datos de la BD

7. FORMULARIO DE CONTACTO GENERAL (/contacto):
   - Datos de la empresa (dirección, teléfono, email)
   - Mapa con ubicación de InmoSpace
   - Formulario: Nombre, Email, Teléfono, Tipo interés, Mensaje
   - Protección anti-spam (hCaptcha o Turnstile)
   - Registro en BD como nueva demanda

8. ANALÍTICAS:
   - Tracking de visitas por inmueble (qué fichas se ven más)
   - Conversiones: formularios enviados / visitas a ficha
   - Dashboard en backoffice con métricas del portal
   - Eventos: click en teléfono, descarga PDF, compartir

DISEÑO:
- Diseño premium, limpio y profesional (inspirado en webs como JLL, CBRE, 
  Savills, Cushman & Wakefield)
- Color scheme: Azul oscuro (#0A1628) + Blanco + Accent dorado (#C5A55A)
- Tipografía elegante: Outfit para títulos, Inter para cuerpo
- Hero con imagen full-width y overlay gradiente
- Cards con hover effect (ligera elevación + sombra)
- Transiciones suaves entre páginas (view transitions API)
- Galería con animaciones tipo lightbox profesional
- Mobile-first: menú hamburguesa, filtros como bottom sheet
- Modo oscuro/claro
- Micro-interacciones: like/favoritos, animaciones de carga
- Performance: Lighthouse score > 90 en todas las métricas

INTEGRACIONES:
- Google Maps / Mapbox para mapas
- Google Analytics 4 / Plausible para analíticas
- Resend / Nodemailer para emails transaccionales
- Vercel OG para generar imágenes Open Graph dinámicas
- next-sitemap para sitemap automático
```

---

## Resumen de Estimación

| Fase | Bloque | Duración | Prioridad |
|------|--------|----------|-----------|
| 1 | Infraestructura y Setup | 2 semanas | 🔴 Crítica |
| 2 | Autenticación y Usuarios | 1 semana | 🔴 Crítica |
| 3 | Módulo Catastro | 2 semanas | 🟠 Alta |
| 4 | Módulo Inversores | 3 semanas | 🟠 Alta |
| 5 | CRM Core (Edificios/Demandas/Propietarios) | 4 semanas | 🟡 Media-Alta |
| 6 | Operaciones y Marketing | 3 semanas | 🟡 Media |
| 7 | **🆕 Portal Público Inmobiliario** | **4 semanas** | **🟠 Alta** |
| 8 | Dashboard y Reportes | 2 semanas | 🟢 Media-Baja |
| **TOTAL** | | **~21 semanas** | |

---

> **Nota**: Este documento es un análisis vivo. Cada fase debe completarse y validarse antes de iniciar la siguiente. Los prompts de cada bloque contienen todo el contexto necesario para comenzar el desarrollo de forma independiente.
>
> **Sobre el Portal Público (Fase 7)**: Aunque está planificado como Fase 7, podría adelantarse si la prioridad del negocio es tener presencia web cuanto antes. En ese caso, se pueden crear fichas estáticas de inmueble a partir de las tablas `pasarela_general` y `edificios` ya existentes, y enriquecer progresivamente con las funcionalidades del backoffice conforme se completen las fases 5 y 6.
