# creador_apps_luxury > /* Navy - Color Secundario */ --anclora-navy: #2C3E50; --anclora-navy-light: #34495E; --anclora-navy-dark: #1A252F; - Author: ToniIAPro73 - Repository: ToniIAPro73/Anclora-Agents-Skills - Version: 20260207191158 - Stars: 0 - Forks: 0 - Last Updated: 2026-02-07 - Source: https://github.com/ToniIAPro73/Anclora-Agents-Skills - Web: https://mule.run/skillshub/@@ToniIAPro73/Anclora-Agents-Skills~creador_apps_luxury:20260207191158 --- # COMPENDIO SKILL ANCLORA - COMPLETO (v3 + v4 + Guía + Textos Legales) **Fecha:** 24 Enero 2026 --- ## Contenido de SKILL_MASTER_v4.0.md # ANCLORA SKILL MASTER v4.0 ## Sistema Completo de Desarrollo para Anclora Private Estates y Ecosistema --- **Versión:** 4.0.0 **Fecha:** 24 Enero 2026 **Paradigma:** Spec-Driven Development (SDD) **Alcance:** Web Principal + Aplicaciones Ecosistema + Sistema Legal **Coherencia:** Brand Kit Universal Obligatorio + Compliance Legal --- # TABLA DE CONTENIDOS ## PARTE I: BRAND KIT UNIVERSAL ANCLORA 1. [Identidad Visual Corporativa](#1-identidad-visual-corporativa) 2. [Sistema de Diseño](#2-sistema-de-diseño) 3. [Componentes Base Reutilizables](#3-componentes-base-reutilizables) - 3.1 Button Component - 3.2 Card Component - 3.3 Header Component - 3.4 Footer Component - **3.5 Sistema Legal del Footer** ⭐ NUEVO 4. **[Textos Legales Obligatorios](#4-textos-legales-obligatorios)** ⭐ NUEVO ## PARTE II: SKILL WEB PRINCIPAL 5. [Arquitectura Web Corporativa](#5-arquitectura-web-corporativa) 6. [Estructura de Directorios Web Principal](#6-estructura-de-directorios-web-principal) 7. [Archivos Críticos Web Principal](#7-archivos-criticos-web-principal) ## PARTE III: SKILL APPS ECOSISTEMA 8. [Arquitectura Apps Ecosistema](#8-arquitectura-apps-ecosistema) 9. [Tipos de Aplicaciones](#9-tipos-de-aplicaciones) 10. [Estructura Apps Landing Pages](#10-estructura-apps-landing-pages) ## PARTE IV: SISTEMA OPERATIVO 11. [Onboarding Adaptativo](#11-onboarding-adaptativo) 12. [Constitution Template](#12-constitution-template) 13. [Sistema QA/KPIs](#13-sistema-qa-kpis) 14. [Instrucciones para Anti-Gravity](#14-instrucciones-para-anti-gravity) --- # PARTE I: BRAND KIT UNIVERSAL ANCLORA ## 1. IDENTIDAD VISUAL CORPORATIVA ### 1.1 Paleta de Colores Anclora (INNEGOCIABLE) ```css /* PALETA PRIMARIA - Usar en TODAS las aplicaciones del ecosistema */ :root { /* Oro Anclora - Color Principal */ --anclora-gold: #D4AF37; --anclora-gold-light: #E6C96E; --anclora-gold-dark: #B9915F; --anclora-gold-10: rgba(212, 175, 55, 0.1); --anclora-gold-20: rgba(212, 175, 55, 0.2); /* Navy - Color Secundario */ --anclora-navy: #2C3E50; --anclora-navy-light: #34495E; --anclora-navy-dark: #1A252F; /* Bronce - Acento Mediterráneo */ --anclora-bronze: #B9915F; --anclora-bronze-light: #C9A578; --anclora-bronze-dark: #9A7A4F; /* Neutros */ --anclora-cream: #F5F5F0; --anclora-stone: #EAEAE5; --anclora-white: #FFFFFF; --anclora-black: #1A1A1A; /* Gradientes Signature */ --gold-gradient: linear-gradient(135deg, #D4AF37 0%, #E6C96E 100%); --navy-gradient: linear-gradient(135deg, #2C3E50 0%, #1A252F 100%); --sunset-gradient: linear-gradient(135deg, #D4AF37 0%, #B9915F 50%, #2C3E50 100%); } ``` **REGLAS DE USO:** | Elemento | Color Obligatorio | Ejemplo | |----------|-------------------|---------| | CTAs Principales | `--anclora-gold` | Botones "Contactar", "Ver Propiedades" | | Headers/Footers | `--anclora-navy` | Navegación principal, pie de página | | Hover States | `--anclora-gold-light` | Al pasar sobre links, tarjetas | | Backgrounds | `--anclora-cream` | Fondo general de secciones | | Textos Principales | `--anclora-black` | Cuerpo de texto, títulos | | Acentos Cálidos | `--anclora-bronze` | Badges, iconos destacados | ### 1.2 Tipografía Universal ```typescript // CONFIGURACIÓN OBLIGATORIA EN TODAS LAS APPS const ancloraFonts = { // Títulos y Headers (Serif Elegante) heading: { family: 'Playfair Display', weights: [400, 600, 700], usage: 'H1, H2, H3, títulos de propiedades, hero sections', }, // Cuerpo y UI (Sans-Serif Moderna) body: { family: 'Montserrat', weights: [300, 400, 500, 600, 700], usage: 'Párrafos, navegación, botones, formularios', }, }; ``` **ESCALA TIPOGRÁFICA:** ```css /* Aplicar en tailwind.config.ts de TODAS las apps */ .text-display { font-family: var(--font-playfair); font-size: 4.5rem; /* 72px */ font-weight: 700; line-height: 1.1; letter-spacing: -0.02em; } .text-h1 { font-family: var(--font-playfair); font-size: 3.5rem; /* 56px */ font-weight: 600; line-height: 1.2; } .text-h2 { font-family: var(--font-playfair); font-size: 2.5rem; /* 40px */ font-weight: 600; line-height: 1.3; } .text-h3 { font-family: var(--font-playfair); font-size: 2rem; /* 32px */ font-weight: 600; line-height: 1.4; } .text-body-lg { font-family: var(--font-montserrat); font-size: 1.125rem; /* 18px */ font-weight: 400; line-height: 1.7; } .text-body { font-family: var(--font-montserrat); font-size: 1rem; /* 16px */ font-weight: 400; line-height: 1.6; } .text-small { font-family: var(--font-montserrat); font-size: 0.875rem; /* 14px */ font-weight: 400; line-height: 1.5; } .text-caption { font-family: var(--font-montserrat); font-size: 0.75rem; /* 12px */ font-weight: 500; line-height: 1.4; letter-spacing: 0.05em; text-transform: uppercase; } ``` ### 1.3 Logos y Assets Corporativos **VARIANTES DE LOGO OBLIGATORIAS:** ``` public/assets/brand/ ├── logo-anclora-full-gold.svg # Logo completo dorado (para fondos oscuros) ├── logo-anclora-full-navy.svg # Logo completo navy (para fondos claros) ├── logo-anclora-icon-gold.svg # Isotipo dorado ├── logo-anclora-icon-navy.svg # Isotipo navy ├── logo-anclora-nexus-group.svg # Logo grupo (para footers) ├── badges/ │ ├── badge-gdpr.svg # Badge GDPR compliance │ ├── badge-iso-9001.svg # Badge ISO 9001:2015 │ └── badge-eu-reg.svg # Badge EU Registration └── favicon/ ├── favicon.ico ├── favicon-16x16.png ├── favicon-32x32.png └── apple-touch-icon.png ``` **REGLAS DE USO:** - ✅ Usar `logo-anclora-full-gold.svg` en headers con fondo navy - ✅ Usar `logo-anclora-full-navy.svg` en headers con fondo cream/white - ✅ Altura mínima de logo: 40px (desktop), 32px (mobile) - ❌ NUNCA distorsionar proporciones - ❌ NUNCA cambiar colores del logo --- ## 3. COMPONENTES BASE REUTILIZABLES [... contenido anterior del documento ...] ### 3.5 Sistema Legal del Footer **CRÍTICO:** Este sistema legal es OBLIGATORIO en TODAS las aplicaciones del ecosistema Anclora (web principal, landings de proyectos, landings de ubicación, etc.). #### 3.5.1 Estructura del Footer Legal ```tsx // components/layout/Footer.tsx export function Footer() { const t = useTranslations('footer'); return ( ); } ``` #### 3.5.2 Componente Certification Badge ```tsx // components/ui/CertificationBadge.tsx interface CertificationBadgeProps { icon: 'gdpr' | 'iso9001' | 'eureg'; label: string; } export function CertificationBadge({ icon, label }: CertificationBadgeProps) { return (
{label}
{label}
); } ``` #### 3.5.3 Archivos i18n para Footer Legal ```typescript // locales/es/footer.json { "legal": { "privacidad": "PRIVACIDAD", "cookies": "COOKIES", "codigo_etico": "CÓDIGO ÉTICO", "terminos_b2b": "TÉRMINOS B2B" } } // locales/en/footer.json { "legal": { "privacidad": "PRIVACY", "cookies": "COOKIES", "codigo_etico": "CODE OF ETHICS", "terminos_b2b": "B2B TERMS" } } // locales/de/footer.json { "legal": { "privacidad": "DATENSCHUTZ", "cookies": "COOKIES", "codigo_etico": "ETHIKKODEX", "terminos_b2b": "B2B-BEDINGUNGEN" } } ``` #### 3.5.4 Estructura de Páginas Legales (OBLIGATORIAS) ``` app/[locale]/legal/ ├── privacidad/ │ └── page.tsx → Política de Privacidad GDPR completa ├── cookies/ │ └── page.tsx → Política de Cookies con tablas técnicas ├── codigo-etico/ │ └── page.tsx → Código Ético Corporativo └── terminos-b2b/ └── page.tsx → Términos del Programa de Partners B2B ``` #### 3.5.5 Template de Página Legal ```tsx // app/[locale]/legal/privacidad/page.tsx import { useTranslations } from 'next-intl'; import ReactMarkdown from 'react-markdown'; import { LegalPageLayout } from '@/components/legal/LegalPageLayout'; export default function PrivacidadPage({ params }: { params: { locale: string } }) { const t = useTranslations('legal'); // El contenido Markdown se carga desde /data/legal/ const content = await import(`@/data/legal/privacidad-${params.locale}.md`); return (
{content.default}
); } ``` #### 3.5.6 Component LegalPageLayout ```tsx // components/legal/LegalPageLayout.tsx interface LegalPageLayoutProps { title: string; lastUpdated: string; children: React.ReactNode; } export function LegalPageLayout({ title, lastUpdated, children }: LegalPageLayoutProps) { return (
{/* Header de página legal */}

{title}

Última actualización: {lastUpdated}

{/* Contenido */} {children} {/* Botón volver */}
Volver a Inicio
); } ``` #### 3.5.7 Estilos Prose para Páginas Legales ```typescript // tailwind.config.ts export default { theme: { extend: { typography: { anclora: { css: { '--tw-prose-body': '#2C3E50', '--tw-prose-headings': '#2C3E50', '--tw-prose-links': '#D4AF37', '--tw-prose-bold': '#2C3E50', '--tw-prose-counters': '#D4AF37', '--tw-prose-bullets': '#D4AF37', '--tw-prose-quotes': '#2C3E50', '--tw-prose-quote-borders': '#D4AF37', h1: { fontFamily: 'Playfair Display, serif', fontWeight: '700', fontSize: '2.5rem', marginBottom: '2rem', }, h2: { fontFamily: 'Playfair Display, serif', fontWeight: '600', fontSize: '2rem', marginTop: '3rem', marginBottom: '1.5rem', borderBottom: '2px solid #D4AF37', paddingBottom: '0.5rem', }, h3: { fontFamily: 'Montserrat, sans-serif', fontWeight: '600', fontSize: '1.5rem', marginTop: '2rem', }, p: { fontFamily: 'Montserrat, sans-serif', fontSize: '1rem', lineHeight: '1.75', marginBottom: '1.25rem', }, a: { color: '#D4AF37', textDecoration: 'underline', '&:hover': { color: '#B9915F', }, }, table: { width: '100%', marginTop: '2rem', marginBottom: '2rem', borderCollapse: 'collapse', }, 'thead th': { backgroundColor: '#2C3E50', color: '#FFFFFF', padding: '1rem', textAlign: 'left', fontWeight: '600', }, 'tbody td': { padding: '1rem', borderBottom: '1px solid #E5E7EB', }, 'tbody tr:hover': { backgroundColor: '#F5F5F0', }, }, }, }, }, }, plugins: [ require('@tailwindcss/typography'), ], }; ``` --- ## 4. TEXTOS LEGALES OBLIGATORIOS **CRÍTICO:** Estos textos son OBLIGATORIOS en TODAS las aplicaciones del ecosistema. Deben almacenarse en `/data/legal/` y estar disponibles en los 3 idiomas (ES/EN/DE). ### 4.1 Mapeo de Textos Legales | Link Footer | URL | Archivo Fuente | Idiomas | Extensión | |-------------|-----|----------------|---------|-----------| | **PRIVACIDAD** | `/legal/privacidad` | `privacidad-{locale}.md` | ES, EN, DE | ~4.500 palabras | | **COOKIES** | `/legal/cookies` | `cookies-{locale}.md` | ES, EN, DE | ~3.000 palabras | | **CÓDIGO ÉTICO** | `/legal/codigo-etico` | `codigo-etico-{locale}.md` | ES, EN, DE | ~3.500 palabras | | **TÉRMINOS B2B** | `/legal/terminos-b2b` | `terminos-b2b-{locale}.md` | ES, EN, DE | ~5.000 palabras | ### 4.2 Política de Privacidad (RGPD/GDPR) **Contenido Obligatorio:** 1. **Responsable del Tratamiento:** - Identidad: Anclora Private Estates S.L. - NIF: B-XXXXXXXX (completar con dato real) - Dirección: Paseo del Borne 15, 07012 Palma de Mallorca - Email: privacidad@ancloraprivateestates.com - DPO: dpo@ancloraprivateestates.com 2. **Datos que Recopilamos:** - ✅ Datos de contacto (nombre, email, teléfono) - ✅ Datos de identificación (DNI/NIE para visitas presenciales) - ✅ Datos profesionales/económicos (presupuesto, interés de compra) - ✅ Datos de navegación (cookies, analytics) - ❌ NO recopilamos: Datos bancarios completos, salud, ideología, biométricos 3. **Finalidades del Tratamiento (5 categorías):** - Gestión de consultas y contactos (24 meses) - Newsletter y comunicaciones comerciales (hasta baja voluntaria) - Gestión de visitas a propiedades (10 años por SEPBLAC) - Gestión de partners B2B (duración del contrato + 6 años) - Analítica web (26 meses) 4. **Destinatarios de Datos:** | Proveedor | Finalidad | Ubicación | Garantías | |-----------|-----------|-----------|-----------| | Google Analytics | Analítica web | EE.UU. | Decisión Adecuación UE-EE.UU. | | Mailchimp | Email marketing | EE.UU. | Cláusulas Contractuales Tipo | | Meta Pixel | Publicidad | EE.UU. | Decisión Adecuación UE-EE.UU. | | n8n (self-hosted) | Automatización | AWS Frankfurt | Dentro UE | | Twenty CRM (self-hosted) | CRM | AWS Frankfurt | Dentro UE | 5. **Derechos RGPD (7 derechos):** - Acceso, Rectificación, Supresión, Limitación, Portabilidad, Oposición, No decisiones automatizadas - Ejercicio: privacidad@ancloraprivateestates.com con copia DNI/NIE - Plazo respuesta: 1 mes - Reclamación: AEPD (www.aepd.es) 6. **Seguridad:** - Cifrado SSL/TLS en tránsito - Cifrado en reposo (AES-256) - Control de acceso basado en roles (RBAC) - Backups cifrados diarios - Auditorías trimestrales - Certificaciones: ISO 27001, ISO 9001 7. **Marco Legal:** - RGPD (UE) 2016/679 - LOPDGDD 3/2018 (España) - LSSI-CE 34/2002 - Ley 10/2010 (Prevención Blanqueo Capitales) **Archivo:** `/data/legal/privacidad-es.md` (y variantes en/de) ### 4.3 Política de Cookies **Contenido Obligatorio:** 1. **Categorías de Cookies:** **A. ESTRICTAMENTE NECESARIAS (NO requieren consentimiento):** | Cookie | Duración | Finalidad | |--------|----------|-----------| | cookie-consent | 1 año | Almacenar preferencias de consentimiento | | NEXT_LOCALE | Sesión | Idioma seleccionado | | csrf-token | Sesión | Seguridad CSRF | | session-id | Sesión | Sesión del usuario | **B. ANALÍTICAS (requieren consentimiento):** | Cookie | Duración | Proveedor | Finalidad | |--------|----------|-----------|-----------| | _ga | 2 años | Google Analytics | Distinguir usuarios | | _ga_XXXXXXXXXX | 2 años | Google Analytics | Persistir estado de sesión | | _gid | 24 horas | Google Analytics | Distinguir usuarios | | _gat | 1 minuto | Google Analytics | Limitar tasa de peticiones | **C. MARKETING (requieren consentimiento):** | Cookie | Duración | Proveedor | Finalidad | |--------|----------|-----------|-----------| | _fbp | 90 días | Meta Pixel | Publicidad en Facebook | | fr | 90 días | Meta Pixel | Publicidad dirigida | | _gcl_au | 90 días | Google Ads | Conversiones | 2. **Consentimiento:** - Banner con 3 opciones: Aceptar todas / Rechazar no esenciales / Configurar - Almacenamiento: localStorage, 12 meses - Icono 🍪 permanente en esquina inferior derecha 3. **Gestión:** - Instrucciones para Chrome, Firefox, Safari, Edge - Links a configuración de cada navegador - Opción de modo incógnito **Archivo:** `/data/legal/cookies-es.md` (y variantes en/de) ### 4.4 Código Ético Corporativo **Contenido Obligatorio:** 1. **Valores Fundamentales (5 pilares):** - 🔒 **CONFIDENCIALIDAD:** Privacidad de clientes UHNWI sagrada - ✨ **INTEGRIDAD:** No comisiones ocultas, transparencia total - 🎓 **PROFESIONALIDAD:** Formación continua (40h anuales), colegiación API - 🤝 **RESPETO Y DIVERSIDAD:** Tolerancia cero discriminación - 🌱 **SOSTENIBILIDAD:** Compromiso medioambiental Mallorca 2. **Normas de Conducta Específicas:** - Relaciones con clientes (deber asesoramiento objetivo) - Relaciones con partners (comisiones transparentes) - Prevención blanqueo capitales (KYC, verificación origen fondos >10.000€) - Protección de datos (más allá RGPD mínimo) 3. **Responsabilidad Social:** - Compromiso Mallorca (0.5% comisiones a Fundació Patrimoni Mallorca) - Política medioambiental (oficina paperless, flota híbrida/eléctrica) - Inversión ética (no explotación laboral, no incumplidores) 4. **Cumplimiento:** - Comité Ética (reuniones trimestrales) - Canal denuncias: etica@ancloraprivateestates.com - Sanciones: Leve → Grave → Muy Grave (hasta rescisión + denuncia) **Archivo:** `/data/legal/codigo-etico-es.md` (y variantes en/de) ### 4.5 Términos y Condiciones B2B **Contenido Obligatorio:** 1. **Requisitos Admisión:** - Licencia API vigente - Seguro RC profesional (mínimo 300.000€) - Formación blanqueo capitales actualizada - Proceso: Solicitud → Revisión → Entrevista → Aprobación → Onboarding (10-15 días) 2. **Modelos de Colaboración:** **MODELO A: REFERRAL** - Comisión: 20% comisión Anclora - Ejemplo: Venta 2M€ → Partner 12.000€ + IVA - Partner NO gestiona cliente **MODELO B: CO-BROKERAGE** - Comisión: Split 50/50 - Ejemplo: Venta 2M€ → Partner 30.000€ + IVA - Partner participa activamente **MODELO C: EXCLUSIVE PARTNERSHIP** - Comisiones negociables - Exclusividad territorial/nicho - Mínimo 1 transacción cada 6 meses 3. **Condiciones Económicas:** | Rango Precio | Comisión Anclora | Referral (20%) | Co-brokerage (50%) | |--------------|------------------|----------------|-------------------| | < 1M€ | 3% + IVA | 0.6% + IVA | 1.5% + IVA | | 1M€ - 3M€ | 3% + IVA | 0.6% + IVA | 1.5% + IVA | | > 3M€ | Negociable (min 2.5%) | 0.5% + IVA | 1.25% + IVA | 4. **Plazos de Pago:** - Referral: 30 días desde cierre notarial - Co-brokerage: 15 días (prioritario) 5. **Bonificaciones por Volumen:** - 3-5 transacciones/año: +5% - 6-10 transacciones/año: +10% - 11+ transacciones/año: +15% 6. **Partner Portal:** - Lead Management (tracking tiempo real) - Property Access (catálogo completo, fichas PDF) - Marketing Materials (brochures personalizables) - Reporting & Analytics (dashboard KPIs) 7. **Protección Leads:** - Regla "First Touch Wins" - Protección: Referral 12 meses, Co-brokerage 18 meses 8. **Código de Conducta:** - ✅ Permitido: Promocionar propiedades, usar materiales, coordinar visitas - ❌ Prohibido: Plagiar, modificar precios, marca blanca no autorizada, spam 9. **Resolución Disputas:** - 1º: Mediación Colegio API Baleares (30 días) - 2º: Arbitraje Palma de Mallorca - 3º: Juzgados Palma **Archivo:** `/data/legal/terminos-b2b-es.md` (y variantes en/de) ### 4.6 Cookie Banner Component ```tsx // components/legal/CookieBanner.tsx 'use client'; import { useState, useEffect } from 'react'; import { Button } from '@/components/ui/Button'; export function CookieBanner() { const [showBanner, setShowBanner] = useState(false); const [showSettings, setShowSettings] = useState(false); useEffect(() => { const consent = localStorage.getItem('cookie-consent'); if (!consent) { setShowBanner(true); } }, []); const handleAcceptAll = () => { localStorage.setItem('cookie-consent', JSON.stringify({ necessary: true, analytics: true, marketing: true, timestamp: Date.now(), })); setShowBanner(false); loadAnalytics(); loadMarketing(); }; const handleRejectNonEssential = () => { localStorage.setItem('cookie-consent', JSON.stringify({ necessary: true, analytics: false, marketing: false, timestamp: Date.now(), })); setShowBanner(false); }; const handleSaveSettings = (settings: any) => { localStorage.setItem('cookie-consent', JSON.stringify({ ...settings, timestamp: Date.now(), })); setShowBanner(false); setShowSettings(false); if (settings.analytics) loadAnalytics(); if (settings.marketing) loadMarketing(); }; if (!showBanner) return null; return (
{!showSettings ? (

🍪 Utilizamos cookies

Usamos cookies propias y de terceros para mejorar tu experiencia. Consulta nuestra{' '} Política de Cookies .

) : ( setShowSettings(false)} /> )}
); } function loadAnalytics() { // Cargar Google Analytics const script = document.createElement('script'); script.src = 'https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX'; script.async = true; document.head.appendChild(script); window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-XXXXXXXXXX'); } function loadMarketing() { // Cargar Meta Pixel !function(f,b,e,v,n,t,s) {if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)}; if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t,s)}(window, document,'script', 'https://connect.facebook.net/en_US/fbevents.js'); fbq('init', 'XXXXXXXXXXXXXXX'); fbq('track', 'PageView'); } ``` ### 4.7 Datos Críticos Pendientes de Completar **ANTES DE PRODUCCIÓN - OBLIGATORIO:** ```typescript // lib/config/legal-data.ts export const LEGAL_DATA = { // ❌ DATOS TEMPORALES - REEMPLAZAR CON REALES company: { name: 'Anclora Private Estates S.L.', cif: 'B-XXXXXXXX', // ← COMPLETAR address: 'Paseo del Borne 15, 07012 Palma de Mallorca', registroMercantil: { tomo: 'XXXX', // ← COMPLETAR folio: 'XXX', // ← COMPLETAR seccion: 'X', // ← COMPLETAR hoja: 'XX-XXXX', // ← COMPLETAR }, apiNumber: 'XXXX', // ← Nº Colegio API Baleares insurance: { company: 'XXXXXXX', // ← Aseguradora policyNumber: 'XXXXXXXXXXXX', // ← Nº Póliza coverage: '300.000€', }, }, emails: { general: 'info@ancloraprivateestates.com', privacy: 'privacidad@ancloraprivateestates.com', // ← CONFIGURAR dpo: 'dpo@ancloraprivateestates.com', // ← CONFIGURAR legal: 'legal@ancloraprivateestates.com', // ← CONFIGURAR ethics: 'etica@ancloraprivateestates.com', // ← CONFIGURAR partners: 'partners@ancloraprivateestates.com', // ← CONFIGURAR cookies: 'cookies@ancloraprivateestates.com', // ← CONFIGURAR }, certifications: { iso9001: { number: 'XXXX-XXXX-XXXX', // ← COMPLETAR expiry: '2027-XX-XX', }, iso27001: { number: 'XXXX-XXXX-XXXX', // ← COMPLETAR expiry: '2027-XX-XX', }, }, }; ``` --- ## 6. ESTRUCTURA DE DIRECTORIOS WEB PRINCIPAL ``` anclora-private-estates/ ├── app/ │ └── [locale]/ │ ├── page.tsx # Homepage │ ├── propiedades/ │ │ ├── page.tsx # Catálogo │ │ ├── [slug]/page.tsx # Detalle propiedad │ │ └── ubicacion/ │ │ └── [slug]/page.tsx # SEO Landing ubicación │ ├── servicios/ │ ├── inversores/ │ ├── partners/ │ ├── blog/ │ ├── contacto/ │ ├── valoracion/ │ │ │ └── legal/ # ⭐ SECCIÓN LEGAL OBLIGATORIA │ ├── privacidad/ │ │ └── page.tsx │ ├── cookies/ │ │ └── page.tsx │ ├── codigo-etico/ │ │ └── page.tsx │ └── terminos-b2b/ │ └── page.tsx │ ├── components/ │ ├── ui/ │ │ ├── Button.tsx │ │ ├── Card.tsx │ │ └── CertificationBadge.tsx # ⭐ NUEVO │ ├── layout/ │ │ ├── Header.tsx │ │ └── Footer.tsx # ⭐ CON SISTEMA LEGAL │ └── legal/ # ⭐ NUEVO │ ├── LegalPageLayout.tsx │ ├── CookieBanner.tsx │ └── CookieSettings.tsx │ ├── data/ │ └── legal/ # ⭐ TEXTOS LEGALES OBLIGATORIOS │ ├── privacidad-es.md │ ├── privacidad-en.md │ ├── privacidad-de.md │ ├── cookies-es.md │ ├── cookies-en.md │ ├── cookies-de.md │ ├── codigo-etico-es.md │ ├── codigo-etico-en.md │ ├── codigo-etico-de.md │ ├── terminos-b2b-es.md │ ├── terminos-b2b-en.md │ └── terminos-b2b-de.md │ ├── public/ │ └── assets/ │ └── brand/ │ ├── badges/ # ⭐ NUEVO │ │ ├── badge-gdpr.svg │ │ ├── badge-iso-9001.svg │ │ └── badge-eu-reg.svg │ └── ... │ ├── lib/ │ └── config/ │ └── legal-data.ts # ⭐ DATOS LEGALES CENTRALIZADOS │ └── locales/ ├── es/ │ └── footer.json # ⭐ CON TEXTOS LEGALES ├── en/ │ └── footer.json └── de/ └── footer.json ``` --- ## 14. INSTRUCCIONES PARA ANTI-GRAVITY ### 14.1 Workflow del Agente (ACTUALIZADO) ``` PASO 1: ONBOARDING ├─ Detectar tipo de proyecto ├─ Hacer preguntas según tipo └─ Almacenar parámetros en memoria persistente PASO 2: GENERACIÓN DE SCAFFOLD ├─ Crear estructura de directorios según tipo ├─ Generar .specify/memory/constitution.md └─ Crear archivos críticos con contenido mandatorio PASO 3: POBLADO DE BRAND KIT + SISTEMA LEGAL ⭐ ├─ Copiar componentes del Brand Kit (Button, Card, Header, Footer) ├─ Configurar tailwind.config.ts con paleta Anclora ├─ Cargar fuentes Playfair Display + Montserrat ├─ Crear lib/config.ts con datos del proyecto │ ├─ ⭐ CREAR SISTEMA LEGAL (OBLIGATORIO EN TODAS LAS APPS): │ ├─ Crear carpeta app/[locale]/legal/ con 4 páginas │ ├─ Copiar 12 archivos .md a data/legal/ (4 textos × 3 idiomas) │ ├─ Implementar Footer con 4 links legales │ ├─ Añadir CertificationBadge component │ ├─ Implementar CookieBanner component │ ├─ Configurar prose-anclora en tailwind │ └─ Crear lib/config/legal-data.ts PASO 4: CONTENIDO ESPECÍFICO ├─ [Según tipo de aplicación...] │ PASO 5: QA AUTOMÁTICO ├─ Validar estructura de carpetas ├─ Verificar archivos críticos existen ├─ Comprobar Brand Kit implementado ├─ ⭐ VALIDAR SISTEMA LEGAL: │ ├─ ✓ 4 páginas legales existen │ ├─ ✓ 12 archivos .md en data/legal/ │ ├─ ✓ Footer incluye 4 links legales │ ├─ ✓ CookieBanner implementado │ └─ ✓ Badges GDPR/ISO/EUREG presentes ├─ Ejecutar checks de coherencia └─ Generar reporte de score PASO 6: ENTREGA ├─ Si score >= 4/5 → Presentar proyecto ├─ Si score < 4/5 → Iterar └─ Si modo producción + score < 3/5 → BLOQUEAR ``` ### 14.2 Checklist QA Sistema Legal **Anti-Gravity DEBE verificar:** ```typescript // .specify/qa/legal-compliance-check.ts export const legalComplianceChecks = { // Archivos Markdown de textos legales legalMarkdownFiles: [ 'data/legal/privacidad-es.md', 'data/legal/privacidad-en.md', 'data/legal/privacidad-de.md', 'data/legal/cookies-es.md', 'data/legal/cookies-en.md', 'data/legal/cookies-de.md', 'data/legal/codigo-etico-es.md', 'data/legal/codigo-etico-en.md', 'data/legal/codigo-etico-de.md', 'data/legal/terminos-b2b-es.md', 'data/legal/terminos-b2b-en.md', 'data/legal/terminos-b2b-de.md', ], // Páginas legales legalPages: [ 'app/[locale]/legal/privacidad/page.tsx', 'app/[locale]/legal/cookies/page.tsx', 'app/[locale]/legal/codigo-etico/page.tsx', 'app/[locale]/legal/terminos-b2b/page.tsx', ], // Componentes legales legalComponents: [ 'components/legal/LegalPageLayout.tsx', 'components/legal/CookieBanner.tsx', 'components/legal/CookieSettings.tsx', 'components/ui/CertificationBadge.tsx', ], // Assets de badges badgeAssets: [ 'public/assets/brand/badges/badge-gdpr.svg', 'public/assets/brand/badges/badge-iso-9001.svg', 'public/assets/brand/badges/badge-eu-reg.svg', ], // Configuración legal legalConfig: [ 'lib/config/legal-data.ts', ], // i18n footer legal footerTranslations: [ 'locales/es/footer.json', // Debe incluir legal.privacidad, legal.cookies, etc. 'locales/en/footer.json', 'locales/de/footer.json', ], // Footer component debe incluir sección legal footerLegalSection: { file: 'components/layout/Footer.tsx', mustInclude: [ 'CertificationBadge', '/legal/privacidad', '/legal/cookies', '/legal/codigo-etico', '/legal/terminos-b2b', 'ANCLORA NEXUS GROUP', 'ANG-PRT-2026-EU', ], }, }; ``` ### 14.3 Reglas de Gobernanza Actualizadas **EL AGENTE DEBE:** - ✅ Leer `.specify/memory/constitution.md` ANTES de generar cualquier código - ✅ Usar SIEMPRE componentes del Brand Kit (nunca recrearlos) - ✅ Aplicar paleta Anclora Gold/Navy sin excepción - ✅ Extraer TODO el texto visible a archivos de traducción - ✅ Validar cada archivo crítico contra la spec - ✅ Generar código de PRODUCCIÓN (no TODOs, no placeholders) - ✅ Ejecutar QA automático antes de entregar - ✅ **⭐ CREAR SISTEMA LEGAL COMPLETO (4 páginas + 12 .md + Footer + CookieBanner)** - ✅ **⭐ INCLUIR 3 BADGES DE CERTIFICACIÓN (GDPR, ISO 9001, EU REG)** - ✅ **⭐ REFERENCIA A ANCLORA NEXUS GROUP EN FOOTER (obligatorio)** **EL AGENTE NO DEBE:** - ❌ Improvisar arquitectura (seguir scaffold al pie de la letra) - ❌ Hardcodear textos en componentes - ❌ Usar colores fuera de la paleta Anclora - ❌ Mezclar journeys inversor/partner - ❌ Cambiar el stack tecnológico - ❌ Omitir la referencia a Anclora Nexus Group en footer - ❌ Generar código "ejemplo" o "demo" (siempre producción) - ❌ **⭐ OMITIR CUALQUIERA DE LAS 4 PÁGINAS LEGALES** - ❌ **⭐ CREAR FOOTER SIN LINKS LEGALES** - ❌ **⭐ OMITIR COOKIEBANNER** --- # FIN DEL SKILL MASTER v4.0 --- ## NOTAS FINALES PARA ANTONIO **Este documento es TU BIBLIA de desarrollo Anclora.** ### NOVEDADES VERSIÓN 4.0 ✅ **Sistema Legal Completo Integrado:** - 4 páginas legales obligatorias en todas las apps - 12 archivos Markdown (4 textos × 3 idiomas) - Footer con links legales + badges de certificación - CookieBanner con consentimiento granular - Estilos prose-anclora para páginas legales ✅ **Compliance RGPD/GDPR:** - Política de Privacidad completa (ES/EN/DE) - Política de Cookies con tablas técnicas - Código Ético corporativo - Términos B2B para Partners ✅ **Anti-Gravity Actualizado:** - Workflow incluye creación automática del sistema legal - QA valida presencia de todos los archivos legales - Bloqueo si falta cualquier componente legal en producción ### Cómo usarlo: 1. **Para crear la WEB PRINCIPAL:** ``` Crea la web principal siguiendo PARTE II del Skill Master v4.0 Sistema legal: SÍ (obligatorio) Ubicaciones: Son Vida, Port d'Andratx, Bendinat Idiomas: ES, EN, DE ``` 2. **Para crear una LANDING DE PROYECTO (ej. Azure Bay):** ``` Crea landing Azure Bay siguiendo PARTE III del Skill Master v4.0 Sistema legal: SÍ (obligatorio) Tipo: Landing Proyecto Idiomas: ES, EN, DE ``` 3. **Coherencia Legal GARANTIZADA:** - TODAS las apps tienen el mismo footer legal - Mismos 4 links (Privacidad, Cookies, Código Ético, Términos B2B) - Mismos 3 badges (GDPR, ISO 9001, EU REG) - Mismo CookieBanner **ANTES DE PRODUCCIÓN:** 1. Completar datos reales en `lib/config/legal-data.ts`: - CIF/NIF - Nº API Colegio Baleares - Registro Mercantil - Póliza seguro RC 2. Configurar emails operativos (privacidad@, dpo@, legal@, etica@, partners@) 3. Contratar abogado para revisión legal 4. Auditoría GDPR externa (recomendado) **Versión:** 4.0.0 **Última actualización:** 24 Enero 2026 **Autor:** Claude (para Antonio / Anclora Nexus Group) **Changelog v4.0:** Sistema Legal Completo + Footer Universal + Compliance RGPD \n---\n ## Contenido de SKILL_MASTER_CLAUDE.md # ANCLORA SKILL MASTER v3.0 ## Sistema Completo de Desarrollo para Anclora Private Estates y Ecosistema --- **Versión:** 3.0.0 **Fecha:** 24 Enero 2026 **Paradigma:** Spec-Driven Development (SDD) **Alcance:** Web Principal + Aplicaciones Ecosistema **Coherencia:** Brand Kit Universal Obligatorio --- # TABLA DE CONTENIDOS ## PARTE I: BRAND KIT UNIVERSAL ANCLORA 1. [Identidad Visual Corporativa](#1-identidad-visual-corporativa) 2. [Sistema de Diseño](#2-sistema-de-diseño) 3. [Componentes Base Reutilizables](#3-componentes-base-reutilizables) ## PARTE II: SKILL WEB PRINCIPAL 4. [Arquitectura Web Corporativa](#4-arquitectura-web-corporativa) 5. [Estructura de Directorios Web Principal](#5-estructura-de-directorios-web-principal) 6. [Archivos Críticos Web Principal](#6-archivos-criticos-web-principal) ## PARTE III: SKILL APPS ECOSISTEMA 7. [Arquitectura Apps Ecosistema](#7-arquitectura-apps-ecosistema) 8. [Tipos de Aplicaciones](#8-tipos-de-aplicaciones) 9. [Estructura Apps Landing Pages](#9-estructura-apps-landing-pages) ## PARTE IV: SISTEMA OPERATIVO 10. [Onboarding Adaptativo](#10-onboarding-adaptativo) 11. [Constitution Template](#11-constitution-template) 12. [Sistema QA/KPIs](#12-sistema-qa-kpis) 13. [Instrucciones para Anti-Gravity](#13-instrucciones-para-anti-gravity) --- # PARTE I: BRAND KIT UNIVERSAL ANCLORA ## 1. IDENTIDAD VISUAL CORPORATIVA ### 1.1 Paleta de Colores Anclora (INNEGOCIABLE) ```css /* PALETA PRIMARIA - Usar en TODAS las aplicaciones del ecosistema */ :root { /* Oro Anclora - Color Principal */ --anclora-gold: #D4AF37; --anclora-gold-light: #E6C96E; --anclora-gold-dark: #B9915F; --anclora-gold-10: rgba(212, 175, 55, 0.1); --anclora-gold-20: rgba(212, 175, 55, 0.2); /* Navy - Color Secundario */ --anclora-navy: #2C3E50; --anclora-navy-light: #34495E; --anclora-navy-dark: #1A252F; /* Bronce - Acento Mediterráneo */ --anclora-bronze: #B9915F; --anclora-bronze-light: #C9A578; --anclora-bronze-dark: #9A7A4F; /* Neutros */ --anclora-cream: #F5F5F0; --anclora-stone: #EAEAE5; --anclora-white: #FFFFFF; --anclora-black: #1A1A1A; /* Gradientes Signature */ --gold-gradient: linear-gradient(135deg, #D4AF37 0%, #E6C96E 100%); --navy-gradient: linear-gradient(135deg, #2C3E50 0%, #1A252F 100%); --sunset-gradient: linear-gradient(135deg, #D4AF37 0%, #B9915F 50%, #2C3E50 100%); } ``` **REGLAS DE USO:** | Elemento | Color Obligatorio | Ejemplo | |----------|-------------------|---------| | CTAs Principales | `--anclora-gold` | Botones "Contactar", "Ver Propiedades" | | Headers/Footers | `--anclora-navy` | Navegación principal, pie de página | | Hover States | `--anclora-gold-light` | Al pasar sobre links, tarjetas | | Backgrounds | `--anclora-cream` | Fondo general de secciones | | Textos Principales | `--anclora-black` | Cuerpo de texto, títulos | | Acentos Cálidos | `--anclora-bronze` | Badges, iconos destacados | ### 1.2 Tipografía Universal ```typescript // CONFIGURACIÓN OBLIGATORIA EN TODAS LAS APPS const ancloraFonts = { // Títulos y Headers (Serif Elegante) heading: { family: 'Playfair Display', weights: [400, 600, 700], usage: 'H1, H2, H3, títulos de propiedades, hero sections', }, // Cuerpo y UI (Sans-Serif Moderna) body: { family: 'Montserrat', weights: [300, 400, 500, 600, 700], usage: 'Párrafos, navegación, botones, formularios', }, }; ``` **ESCALA TIPOGRÁFICA:** ```css /* Aplicar en tailwind.config.ts de TODAS las apps */ .text-display { font-family: var(--font-playfair); font-size: 4.5rem; /* 72px */ font-weight: 700; line-height: 1.1; letter-spacing: -0.02em; } .text-h1 { font-family: var(--font-playfair); font-size: 3.5rem; /* 56px */ font-weight: 600; line-height: 1.2; } .text-h2 { font-family: var(--font-playfair); font-size: 2.5rem; /* 40px */ font-weight: 600; line-height: 1.3; } .text-h3 { font-family: var(--font-playfair); font-size: 2rem; /* 32px */ font-weight: 600; line-height: 1.4; } .text-body-lg { font-family: var(--font-montserrat); font-size: 1.125rem; /* 18px */ font-weight: 400; line-height: 1.7; } .text-body { font-family: var(--font-montserrat); font-size: 1rem; /* 16px */ font-weight: 400; line-height: 1.6; } .text-small { font-family: var(--font-montserrat); font-size: 0.875rem; /* 14px */ font-weight: 400; line-height: 1.5; } .text-caption { font-family: var(--font-montserrat); font-size: 0.75rem; /* 12px */ font-weight: 500; line-height: 1.4; letter-spacing: 0.05em; text-transform: uppercase; } ``` ### 1.3 Logos y Assets Corporativos **VARIANTES DE LOGO OBLIGATORIAS:** ``` public/assets/brand/ ├── logo-anclora-full-gold.svg # Logo completo dorado (para fondos oscuros) ├── logo-anclora-full-navy.svg # Logo completo navy (para fondos claros) ├── logo-anclora-icon-gold.svg # Isotipo dorado ├── logo-anclora-icon-navy.svg # Isotipo navy ├── logo-anclora-nexus-group.svg # Logo grupo (para footers) └── favicon/ ├── favicon.ico ├── favicon-16x16.png ├── favicon-32x32.png └── apple-touch-icon.png ``` **REGLAS DE USO:** - ✅ Usar `logo-anclora-full-gold.svg` en headers con fondo navy - ✅ Usar `logo-anclora-full-navy.svg` en headers con fondo cream/white - ✅ Altura mínima de logo: 40px (desktop), 32px (mobile) - ❌ NUNCA distorsionar proporciones - ❌ NUNCA cambiar colores del logo --- ## 2. SISTEMA DE DISEÑO ### 2.1 Espaciado Universal ```typescript // tailwind.config.ts - SPACING SYSTEM export default { theme: { extend: { spacing: { // Espaciado de componentes 'xs': '0.25rem', // 4px 'sm': '0.5rem', // 8px 'md': '1rem', // 16px 'lg': '1.5rem', // 24px 'xl': '2rem', // 32px '2xl': '3rem', // 48px '3xl': '4rem', // 64px '4xl': '6rem', // 96px '5xl': '8rem', // 128px // Espaciado de secciones 'section-sm': '3rem', // 48px 'section-md': '5rem', // 80px 'section-lg': '7.5rem', // 120px 'section-xl': '10rem', // 160px }, // Gaps para grids gap: { 'cards': '2rem', // 32px - Gap entre property cards 'grid': '1.5rem', // 24px - Gap general en grids }, // Containers maxWidth: { 'container': '1440px', // Max width de contenido }, }, }, }; ``` ### 2.2 Sombras y Elevaciones ```css /* SHADOW SYSTEM - Aplicar en todas las apps */ .shadow-anclora-sm { box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05), 0 1px 3px 0 rgba(0, 0, 0, 0.1); } .shadow-anclora { box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); } .shadow-anclora-md { box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); } .shadow-anclora-lg { box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); } .shadow-anclora-xl { box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); } /* Sombra con acento dorado - Para elementos premium */ .shadow-gold { box-shadow: 0 10px 30px rgba(212, 175, 55, 0.15), 0 0 20px rgba(212, 175, 55, 0.1); } /* Glassmorphism - Para overlays */ .glass-light { background: rgba(255, 255, 255, 0.8); backdrop-filter: blur(10px); border: 1px solid rgba(255, 255, 255, 0.2); } .glass-dark { background: rgba(44, 62, 80, 0.8); backdrop-filter: blur(10px); border: 1px solid rgba(255, 255, 255, 0.1); } ``` ### 2.3 Animaciones y Transiciones ```css /* ANIMATION SYSTEM - Coherencia en micro-interacciones */ :root { --transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1); --transition-base: 300ms cubic-bezier(0.4, 0, 0.2, 1); --transition-slow: 500ms cubic-bezier(0.4, 0, 0.2, 1); --transition-luxury: 600ms cubic-bezier(0.25, 0.46, 0.45, 0.94); } /* Animaciones de entrada */ @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes slideUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } @keyframes slideInRight { from { opacity: 0; transform: translateX(30px); } to { opacity: 1; transform: translateX(0); } } /* Clases de utilidad */ .animate-fade-in { animation: fadeIn var(--transition-slow) ease-out forwards; } .animate-slide-up { animation: slideUp var(--transition-slow) ease-out forwards; } /* Hover effects - OBLIGATORIO en elementos interactivos */ .hover-lift { transition: transform var(--transition-base), box-shadow var(--transition-base); } .hover-lift:hover { transform: translateY(-4px); box-shadow: var(--shadow-anclora-lg); } .hover-gold { transition: color var(--transition-fast); } .hover-gold:hover { color: var(--anclora-gold); } ``` --- ## 3. COMPONENTES BASE REUTILIZABLES ### 3.1 Button System (Obligatorio en TODO el ecosistema) ```tsx // components/ui/Button.tsx - COMPONENTE MAESTRO import React from 'react'; import { cva, type VariantProps } from 'class-variance-authority'; const buttonVariants = cva( // Base - Aplicado a todos los botones ` inline-flex items-center justify-center gap-2 font-montserrat font-semibold rounded-full transition-all duration-300 focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed `, { variants: { variant: { // Primario - CTAs principales primary: ` bg-anclora-gold text-white hover:bg-anclora-gold-light focus:ring-anclora-gold shadow-md hover:shadow-gold `, // Secundario - Acciones secundarias secondary: ` bg-anclora-navy text-white hover:bg-anclora-navy-light focus:ring-anclora-navy shadow-md hover:shadow-lg `, // Outline - Acciones terciarias outline: ` border-2 border-anclora-gold text-anclora-gold hover:bg-anclora-gold hover:text-white focus:ring-anclora-gold `, // Ghost - Links estilizados ghost: ` text-anclora-navy hover:bg-anclora-gold-10 focus:ring-anclora-gold `, }, size: { sm: 'px-4 py-2 text-sm', md: 'px-6 py-3 text-base', lg: 'px-8 py-4 text-lg', xl: 'px-10 py-5 text-xl', }, }, defaultVariants: { variant: 'primary', size: 'md', }, } ); export interface ButtonProps extends React.ButtonHTMLAttributes, VariantProps { children: React.ReactNode; loading?: boolean; } export const Button = React.forwardRef( ({ className, variant, size, loading, children, ...props }, ref) => { return ( ); } ); Button.displayName = 'Button'; ``` **EJEMPLOS DE USO:** ```tsx // CTA Principal // CTA Secundario // Outline para acciones menos importantes // Link estilizado ``` ### 3.2 Card Component (Property Cards, etc.) ```tsx // components/ui/Card.tsx - COMPONENTE MAESTRO import React from 'react'; interface CardProps { children: React.ReactNode; className?: string; hover?: boolean; glass?: boolean; } export const Card: React.FC = ({ children, className = '', hover = true, glass = false, }) => { return (
{children}
); }; // Sub-componentes para estructura consistente export const CardImage: React.FC<{ src: string; alt: string; aspectRatio?: '16/9' | '4/3' | '1/1'; }> = ({ src, alt, aspectRatio = '4/3' }) => { return (
{alt}
); }; export const CardContent: React.FC<{ children: React.ReactNode }> = ({ children }) => { return
{children}
; }; export const CardTitle: React.FC<{ children: React.ReactNode }> = ({ children }) => { return (

{children}

); }; export const CardDescription: React.FC<{ children: React.ReactNode }> = ({ children }) => { return (

{children}

); }; ``` ### 3.3 Header Universal (Todas las apps) ```tsx // components/layout/Header.tsx - OBLIGATORIO EN TODAS LAS APPS 'use client'; import React, { useState, useEffect } from 'react'; import Link from 'next/link'; import { usePathname } from 'next/navigation'; interface HeaderProps { variant?: 'transparent' | 'solid'; showLanguageToggle?: boolean; } export const Header: React.FC = ({ variant = 'transparent', showLanguageToggle = true, }) => { const [scrolled, setScrolled] = useState(false); const pathname = usePathname(); useEffect(() => { const handleScroll = () => { setScrolled(window.scrollY > 50); }; window.addEventListener('scroll', handleScroll); return () => window.removeEventListener('scroll', handleScroll); }, []); const isTransparent = variant === 'transparent' && !scrolled; return (
{/* Logo */} Anclora Private Estates {/* Navigation - Desktop */} {/* Language Toggle */} {showLanguageToggle && ( )} {/* Mobile Menu Button */}
); }; // NavLink Component const NavLink: React.FC<{ href: string; children: React.ReactNode; active?: boolean; light?: boolean; }> = ({ href, children, active, light }) => { return ( {children} {active && ( )} ); }; ``` ### 3.4 Footer Universal ```tsx // components/layout/Footer.tsx - OBLIGATORIO EN TODAS LAS APPS import React from 'react'; import Link from 'next/link'; export const Footer: React.FC = () => { return (
{/* Main Footer Content */}
{/* Column 1: Brand */}
Anclora Private Estates

Agencia boutique especializada en propiedades de lujo en Mallorca.

{/* Column 2: Servicios */}

Servicios

    Compra Venta Valoración Gestión
{/* Column 3: Propiedades */}

Propiedades

    Villas Apartamentos Fincas Son Vida
{/* Column 4: Contacto */}

Contacto

{/* Bottom Bar - REFERENCIA OBLIGATORIA A ANCLORA NEXUS GROUP */}

© 2026 Anclora Private Estates. Una iniciativa de{' '} Anclora Nexus Group

Privacidad Cookies Términos
); }; const FooterLink: React.FC<{ href: string; children: React.ReactNode }> = ({ href, children }) => { return (
  • {children}
  • ); }; const SocialLink: React.FC<{ href: string; icon: string }> = ({ href, icon }) => { return ( {/* Icon SVG aquí */} ); }; ``` --- # PARTE II: SKILL WEB PRINCIPAL ## 4. ARQUITECTURA WEB CORPORATIVA ### 4.1 Objetivo de la Web Principal **URL:** `https://ancloraprivateestates.com` **Propósito:** - Sitio corporativo completo de Anclora Private Estates - Catálogo de propiedades de lujo en Mallorca - Captación de inversores HNWI/UHNWI - Generación de leads cualificados - Hub de servicios inmobiliarios premium **Stack Tecnológico:** ```json { "framework": "Next.js 15 (App Router)", "language": "TypeScript 5.x (Strict Mode)", "styling": "Tailwind CSS 3.4+", "i18n": "next-intl 3.0", "database": "Redis 7.x (BullMQ)", "cms": "Sanity.io (para blog)", "deployment": "Docker + AWS ECS" } ``` ### 4.2 Páginas Principales (Mapa del Sitio) ``` https://ancloraprivateestates.com/ ├── / (Homepage) │ ├── Hero con video background │ ├── Problem/Opportunity (Inversor vs Vendedor) │ ├── Featured Properties (6 destacadas) │ ├── Location Showcase (Son Vida, Port d'Andratx, Bendinat) │ ├── Services Overview │ ├── Testimonials │ └── Final CTA │ ├── /propiedades │ ├── Catálogo completo con filtros avanzados │ ├── /propiedades/[slug] (Detalle de propiedad) │ └── /propiedades/ubicacion/[slug] (Landing SEO por zona) │ ├── /servicios │ ├── /servicios/compra │ ├── /servicios/venta │ ├── /servicios/valoracion │ └── /servicios/gestion │ ├── /inversores │ ├── Tesis de inversión │ ├── Data Lab (ROI calculator) │ ├── Market insights │ └── CTA cualificación │ ├── /partners │ ├── Propuesta colaboración B2B │ ├── Beneficios y comisiones │ ├── Portal de registro │ └── Sistema de atribución │ ├── /nosotros │ ├── Historia y misión │ ├── Equipo │ ├── Valores │ └── Certificaciones │ ├── /blog │ ├── Artículos de mercado inmobiliario │ ├── Guías de zonas │ └── Consejos de inversión │ ├── /contacto │ └── Formulario con lead scoring │ ├── /valoracion │ └── Formulario de tasación │ └── /legal ├── /legal/privacidad ├── /legal/cookies └── /legal/terminos ``` --- ## 5. ESTRUCTURA DE DIRECTORIOS WEB PRINCIPAL ### 5.1 Scaffold Completo ``` anclora-private-estates/ (WEB PRINCIPAL) │ ├── .specify/ # ⚡ NÚCLEO SDD │ ├── memory/ │ │ └── constitution.md # Constitución del proyecto │ ├── templates/ │ │ ├── feature-request.md │ │ └── bug-report.md │ └── specs/ │ ├── homepage.md │ ├── property-detail.md │ └── lead-scoring.md │ ├── app/ # Next.js 15 App Router │ ├── [locale]/ # Rutas localizadas (es/en/de) │ │ ├── layout.tsx # ⚡ CRÍTICO - Layout raíz │ │ ├── page.tsx # Homepage │ │ │ │ │ ├── propiedades/ │ │ │ ├── page.tsx # Catálogo de propiedades │ │ │ ├── [slug]/ │ │ │ │ └── page.tsx # Detalle de propiedad │ │ │ └── ubicacion/ │ │ │ └── [slug]/ │ │ │ └── page.tsx # Landing SEO por zona │ │ │ │ │ ├── servicios/ │ │ │ ├── page.tsx │ │ │ ├── compra/ │ │ │ ├── venta/ │ │ │ ├── valoracion/ │ │ │ └── gestion/ │ │ │ │ │ ├── inversores/ │ │ │ └── page.tsx # Journey inversor │ │ │ │ │ ├── partners/ │ │ │ └── page.tsx # Journey partners │ │ │ │ │ ├── nosotros/ │ │ │ └── page.tsx │ │ │ │ │ ├── blog/ │ │ │ ├── page.tsx │ │ │ └── [slug]/ │ │ │ └── page.tsx │ │ │ │ │ ├── contacto/ │ │ │ └── page.tsx │ │ │ │ │ ├── valoracion/ │ │ │ └── page.tsx │ │ │ │ │ └── legal/ │ │ ├── privacidad/ │ │ ├── cookies/ │ │ └── terminos/ │ │ │ ├── api/ # API Routes │ │ ├── whatsapp/ │ │ │ └── webhook/ │ │ │ └── route.ts # ⚡ CRÍTICO - Evolution API webhook │ │ ├── leads/ │ │ │ ├── route.ts # Captura de leads │ │ │ └── score/ │ │ │ └── route.ts # Lead scoring endpoint │ │ └── properties/ │ │ └── route.ts │ │ │ └── globals.css # Estilos globales │ ├── components/ # Componentes React │ ├── ui/ # Design System (desde Brand Kit) │ │ ├── Button.tsx # ⚡ Del Brand Kit │ │ ├── Card.tsx # ⚡ Del Brand Kit │ │ ├── Input.tsx │ │ ├── Select.tsx │ │ ├── Badge.tsx │ │ └── OptimizedImage.tsx │ │ │ ├── layout/ │ │ ├── Header.tsx # ⚡ Del Brand Kit │ │ ├── Footer.tsx # ⚡ Del Brand Kit │ │ ├── LanguageToggle.tsx │ │ ├── Section.tsx │ │ └── Container.tsx │ │ │ ├── home/ # Componentes específicos de Homepage │ │ ├── Hero.tsx │ │ ├── ProblemOpportunity.tsx │ │ ├── FeaturedProperties.tsx │ │ ├── LocationShowcase.tsx │ │ ├── ServicesOverview.tsx │ │ ├── Testimonials.tsx │ │ └── FinalCTA.tsx │ │ │ ├── properties/ │ │ ├── PropertyCard.tsx │ │ ├── PropertyGrid.tsx │ │ ├── PropertyFilters.tsx │ │ ├── PropertyGallery.tsx │ │ ├── PropertySpecs.tsx │ │ └── PropertyMap.tsx │ │ │ ├── forms/ │ │ ├── ContactForm.tsx │ │ ├── ValuationForm.tsx │ │ └── PartnerRegistrationForm.tsx │ │ │ └── shared/ │ ├── ScrollReveal.tsx # Animaciones scroll │ ├── ImageGallery.tsx │ └── VideoPlayer.tsx │ ├── services/ # Lógica de Negocio (Backend) │ ├── lead-scoring/ │ │ ├── scoring-engine.ts # ⚡ CRÍTICO - Algoritmo de scoring │ │ └── crm-integration.ts # Integración con Twenty CRM │ │ │ ├── whatsapp/ │ │ ├── bot-engine.ts # ⚡ CRÍTICO - WhatsApp Bot AI │ │ ├── queue-processor.ts # Worker de BullMQ │ │ └── templates.ts # Plantillas de mensajes │ │ │ ├── properties/ │ │ ├── property-service.ts │ │ └── property-filters.ts │ │ │ └── email/ │ ├── email-service.ts │ └── templates/ │ ├── lib/ # Utilidades y Configuración │ ├── config.ts # ⚡ CRÍTICO - Configuración central │ ├── metadata.ts # SEO metadata generator │ ├── utils.ts │ ├── validation.ts # Esquemas Zod │ └── security.ts # HMAC, sanitización │ ├── data/ # Datos Estáticos │ ├── properties/ │ │ └── properties.json # Propiedades (mock o desde CMS) │ │ │ ├── location-guides.ts # ⚡ CRÍTICO - Guías SEO geográfico │ └── testimonials.json │ ├── locales/ # Traducciones i18n │ ├── es/ │ │ ├── common.json │ │ ├── properties.json │ │ ├── legal.json │ │ └── forms.json │ ├── en/ │ └── de/ │ ├── public/ # Assets Estáticos │ ├── assets/ │ │ ├── brand/ # ⚡ Logos del Brand Kit │ │ │ ├── logo-anclora-full-gold.svg │ │ │ ├── logo-anclora-full-navy.svg │ │ │ └── logo-anclora-nexus-group.svg │ │ ├── videos/ │ │ │ └── hero-background.mp4 │ │ └── images/ │ │ ├── properties/ │ │ └── locations/ │ └── fonts/ │ ├── docker/ # Infraestructura │ ├── Dockerfile │ ├── docker-compose.yml │ └── .dockerignore │ ├── docs/ # Documentación │ ├── WHATSAPP_WEBHOOK_SYSTEM.md │ ├── DEPLOYMENT.md │ └── API_DOCUMENTATION.md │ ├── .env.example # Variables de entorno template ├── .eslintrc.json ├── .prettierrc ├── next.config.ts # ⚡ CRÍTICO - Config Next.js ├── tailwind.config.ts # ⚡ CRÍTICO - Design System ├── tsconfig.json ├── package.json └── README.md ``` --- ## 6. ARCHIVOS CRÍTICOS WEB PRINCIPAL ### 6.1 lib/config.ts (Configuración Central) ```typescript // FILE: lib/config.ts import { SiteConfig } from '@/types'; export const siteConfig: SiteConfig = { // Identidad de Marca name: 'Anclora Private Estates', shortName: 'Anclora', domain: 'ancloraprivateestates.com', version: '1.0.0', // Taglines Multiidioma tagline: { es: 'El privilegio de la privacidad en el Mediterráneo', en: 'The privilege of privacy in the Mediterranean', de: 'Das Privileg der Privatsphäre im Mittelmeer', }, // Descripción SEO description: { es: 'Agencia inmobiliaria de lujo en Mallorca. Propiedades exclusivas, confidencialidad absoluta y asesoría integral para inversores de alto patrimonio.', en: 'Luxury real estate agency in Mallorca. Exclusive properties, absolute confidentiality, and comprehensive advisory for high-net-worth investors.', de: 'Luxusimmobilienagentur auf Mallorca. Exklusive Immobilien, absolute Diskretion und umfassende Beratung für vermögende Investoren.', }, // i18n Configuration i18n: { defaultLocale: 'es', locales: ['es', 'en', 'de'], localeLabels: { es: 'Español', en: 'English', de: 'Deutsch', }, }, // Información de Contacto contact: { email: 'info@ancloraprivateestates.com', phone: '+34 971 000 000', whatsapp: process.env.NEXT_PUBLIC_WHATSAPP_NUMBER || '+34600000000', address: { line1: 'Paseo del Borne, 15', line2: '07012 Palma de Mallorca', region: 'Islas Baleares, España', }, social: { instagram: 'https://instagram.com/ancloraprivateestates', linkedin: 'https://linkedin.com/company/anclora-private-estates', facebook: 'https://facebook.com/ancloraprivateestates', }, }, // Sistema de Diseño (Mapeo a Tailwind) theme: { colors: { primary: '#D4AF37', // Anclora Gold primaryLight: '#E6C96E', primaryDark: '#B9915F', secondary: '#2C3E50', // Navy Blue background: '#F5F5F0', // Cream text: '#1A1A1A', }, fonts: { heading: 'var(--font-playfair)', body: 'var(--font-montserrat)', }, }, // Feature Flags features: { enableBlog: true, enableWhatsAppBot: true, enableLeadScoring: true, enableDarkMode: false, enableInvestorJourney: true, enablePartnerPortal: true, }, // Configuración de Propiedades properties: { currency: 'EUR', priceRanges: [ { min: 1000000, max: 2500000, label: '1M€ - 2.5M€' }, { min: 2500000, max: 5000000, label: '2.5M€ - 5M€' }, { min: 5000000, max: 10000000, label: '5M€ - 10M€' }, { min: 10000000, max: null, label: '> 10M€' }, ], defaultLocation: { lat: 39.5696, lng: 2.6502, // Palma zoom: 12, }, }, // Webhooks n8n webhooks: { leadCapture: process.env.N8N_WEBHOOK_LEAD_CAPTURE || '', propertyInquiry: process.env.N8N_WEBHOOK_PROPERTY_INQUIRY || '', partnerRegistration: process.env.N8N_WEBHOOK_PARTNER_REG || '', }, }; ``` ### 6.2 app/[locale]/layout.tsx ```typescript // FILE: app/[locale]/layout.tsx import React from 'react'; import { Playfair_Display, Montserrat } from 'next/font/google'; import { NextIntlClientProvider } from 'next-intl'; import { getMessages } from 'next-intl/server'; import { notFound } from 'next/navigation'; import { Header } from '@/components/layout/Header'; import { Footer } from '@/components/layout/Footer'; import { siteConfig } from '@/lib/config'; import '@/app/globals.css'; // ⚡ Configuración de Fuentes (OBLIGATORIO) const playfair = Playfair_Display({ subsets: ['latin'], variable: '--font-playfair', display: 'swap', weight: ['400', '600', '700'], }); const montserrat = Montserrat({ subsets: ['latin'], variable: '--font-montserrat', display: 'swap', weight: ['300', '400', '500', '600', '700'], }); // Metadatos SEO Base export const metadata = { title: { default: siteConfig.name, template: `%s | ${siteConfig.name}`, }, description: siteConfig.description.es, keywords: ['propiedades de lujo', 'Mallorca', 'real estate', 'HNWI', 'inversión inmobiliaria'], icons: { icon: '/favicon.ico', apple: '/apple-touch-icon.png', }, openGraph: { type: 'website', locale: 'es_ES', url: `https://${siteConfig.domain}`, siteName: siteConfig.name, images: [ { url: '/assets/images/og-image.jpg', width: 1200, height: 630, alt: siteConfig.name, }, ], }, }; interface RootLayoutProps { children: React.ReactNode; params: { locale: string }; } export default async function RootLayout({ children, params: { locale } }: RootLayoutProps) { // Validación de Locale if (!siteConfig.i18n.locales.includes(locale as any)) { notFound(); } // Carga de mensajes de traducción const messages = await getMessages(); return ( {/* Header Universal */}
    {/* Contenido Principal */}
    {children}
    {/* Footer Universal */}