Docs

Dominios y DNS

Mapa completo de subdominios nvito.mx, configuración DNS en Cloudflare, y convención de nombres por ambiente

v1.1PublicadoMarzo 2026Equipo de desarrollo, arquitectos, stakeholders

1. Dominio Raíz

El dominio principal de Nvito es nvito.mx, registrado y gestionado íntegramente a través de Cloudflare Registrar. Esta decisión consolida DNS, proxy, SSL, WAF y registrar en un solo proveedor, eliminando la necesidad de coordinar nameservers entre servicios.

CampoValor
Dominionvito.mx
RegistrarCloudflare Registrar
NameserversCloudflare (automático al usar CF Registrar)
RenovaciónAnual (~$10.11 USD/año para .mx)
WHOIS PrivacyIncluido por Cloudflare
DNSSECHabilitado automáticamente

Por qué Cloudflare Registrar

Cloudflare cobra el precio de costo del registro de dominio sin markup. Al tener el dominio y el DNS en el mismo proveedor, no hay propagación de nameservers y los cambios DNS toman efecto en segundos.

2. Mapa de Subdominios

Nvito utiliza 21 subdominios (incluyendo el dominio raíz) distribuidos en 3 ambientes (producción, DEV y TEST). Cada subdominio apunta a un servicio específico con un propósito bien definido.

2.1 Producción

SubdominioServicioHostingAccesoDescripción
nvito.mxLanding page + Smart LinkCloudflare Pages (PROD) / Coolify Docker (DEV/TEST)PúblicoSitio institucional, marketing y ruta SSR /join/[token] para deeplinks
app.nvito.mxnvito-pwaRailwayPúblicoProgressive Web App para invitados y anfitriones
inv.nvito.mxnvito-invitationsRailwayPúblicoMicrositios de invitaciones generados por el motor
api.nvito.mxCloudflare Worker → RailwayWorker proxyPúblico (API)API REST backend, protegida por Worker que oculta el origin
cdn.nvito.mxCloudflare R2R2 Custom DomainPúblicoImágenes, assets, templates HTML de invitaciones
admin.nvito.mxnvito-adminRailwayPrivado (CF Access + Clerk)Panel administrativo para gestión de eventos
docs.nvito.mxnvito-docsCloudflare PagesPrivado (CF Access)Documentación técnica y de negocio
send.nvito.mxResend (email transaccional)Solo DNS (SPF/DKIM/DMARC)N/ASubdominio dedicado para email transaccional del sistema

Estrategia de email con dos dominios

Nvito separa el correo corporativo del transaccional. El dominio raíz nvito.mx se usa para correo corporativo (hola@, soporte@, contacto@) vía Cloudflare Email Routing. El subdominio send.nvito.mx se usa exclusivamente para email transaccional (noreply@, eventos@) vía Resend. Esta separación protege la reputación del dominio raíz.

2.2 DEV (rama develop)

SubdominioServicioHostingAcceso
dev-api.nvito.mxnvito-api (dev)VPS + CoolifyPúblico (API)
dev-admin.nvito.mxnvito-admin (dev)VPS + CoolifyPrivado (CF Access + Clerk)
dev-app.nvito.mxnvito-pwa (dev)VPS + CoolifyPúblico
dev-inv.nvito.mxnvito-invitations (dev)VPS + CoolifyPúblico
dev-landing.nvito.mxnvito-landing (dev)VPS + CoolifyPrivado (CF Zero Trust)

2.3 TEST (rama test)

SubdominioServicioHostingAcceso
test-api.nvito.mxnvito-api (test)VPS + CoolifyPúblico (API)
test-admin.nvito.mxnvito-admin (test)VPS + CoolifyPrivado (CF Access + Clerk)
test-app.nvito.mxnvito-pwa (test)VPS + CoolifyPúblico
test-inv.nvito.mxnvito-invitations (test)VPS + CoolifyPúblico
test-landing.nvito.mxnvito-landing (test)VPS + CoolifyPrivado (CF Zero Trust)

admin siempre protegido

Independientemente del ambiente, admin.nvito.mx, dev-admin.nvito.mx y test-admin.nvito.mx están protegidos con Cloudflare Access (Zero Trust). El acceso público directo está bloqueado; se requiere autenticación vía email OTP antes de llegar a Clerk.

3. Convención de Nombres

La convención de nombres sigue un patrón predecible que permite identificar inmediatamente el ambiente y el servicio de cualquier subdominio.

Producción

{servicio}.nvito.mx

Donde {servicio} es uno de: app, inv, api, cdn, admin, docs, send, landing. El dominio raíz nvito.mx se reserva para la landing page en producción. En ambientes no productivos, se usa {env}-landing.nvito.mx. El subdominio send.nvito.mx solo existe en producción (DNS records, sin servicio web).

Ambientes no productivos

{env}-{servicio}.nvito.mx

Donde {env} es dev o test, y {servicio} es el mismo identificador que en producción.

Ejemplos

PatrónProducciónDEVTEST
API Backendapi.nvito.mxdev-api.nvito.mxtest-api.nvito.mx
Panel Adminadmin.nvito.mxdev-admin.nvito.mxtest-admin.nvito.mx
Invitacionesinv.nvito.mxdev-inv.nvito.mxtest-inv.nvito.mx
PWAapp.nvito.mxdev-app.nvito.mxtest-app.nvito.mx
Landing / Smart Linknvito.mxdev-landing.nvito.mxtest-landing.nvito.mx

Consistencia con variables de entorno

Las variables CORS_ORIGINS, FRONTEND_URL y CDN_URL en cada ambiente siguen exactamente esta convención. Si se agrega un nuevo servicio, el subdominio debe seguir el mismo patrón.

4. Tipos de Registros DNS

Nvito utiliza 4 tipos principales de registros DNS en Cloudflare, cada uno con un propósito distinto.

4.1 Registro A (Address)

Apunta un subdominio a una dirección IPv4 fija. Se usa para los subdominios que apuntan al VPS de Contabo donde corre Coolify.

dev-api.nvito.mx      A    212.28.185.197    Proxied
dev-admin.nvito.mx    A    212.28.185.197    Proxied
test-api.nvito.mx     A    212.28.185.197    Proxied
test-admin.nvito.mx   A    212.28.185.197    Proxied

Todos apuntan a la misma IP del VPS. Traefik (dentro de Coolify) rutea al contenedor correcto según el header Host.

4.2 Registro CNAME (Canonical Name)

Apunta un subdominio a otro dominio (alias). Se usa para servicios managed que proveen su propio dominio.

nvito.mx              CNAME    nvito-landing.pages.dev         # Cloudflare Pages (Astro 5.x)
docs.nvito.mx         CNAME    nvito-docs.pages.dev            # Cloudflare Pages
cdn.nvito.mx          CNAME    {account}.r2.cloudflarestorage.com  # R2 Custom Domain
app.nvito.mx          CNAME    {service}.up.railway.app        # Railway (futuro)

4.3 Registro TXT (Text)

Almacena texto arbitrario. Se usa principalmente para verificación de propiedad y seguridad de email.

nvito.mx              TXT    "v=spf1 include:_spf.google.com include:_spf.mx.cloudflare.net ~all"
send.nvito.mx         TXT    "v=spf1 include:amazonses.com ~all"

Además, send.nvito.mx tiene registros DKIM configurados por Resend para firma de emails transaccionales.

RegistroDominioPropósito
SPF (raiz)nvito.mxAutoriza Gmail y Cloudflare Email Routing como remitentes
SPF (send)send.nvito.mxAutoriza Resend (Amazon SES) como remitente transaccional
DKIMsend.nvito.mxFirma criptográfica de emails transaccionales vía Resend
DMARC_dmarc.nvito.mxPolítica de validación: quarantine para mensajes que fallen SPF/DKIM

4.4 Registro MX (Mail Exchange)

Define los servidores de correo entrante. nvito.mx recibe correo via Cloudflare Email Routing, que redirige las direcciones corporativas (hola@, soporte@, contacto@) a nvito.hq@gmail.com.

nvito.mx    MX    10    isaac.mx.cloudflare.net
nvito.mx    MX    23    linda.mx.cloudflare.net
nvito.mx    MX    6     amir.mx.cloudflare.net

5. Árbol de Subdominios por Ambiente

6. Flujo de Resolución DNS

Cuando un usuario accede a cualquier subdominio de Nvito, el flujo de resolución pasa por Cloudflare antes de llegar al origin server.

Puntos clave del flujo

  1. Anycast: Cloudflare utiliza una red Anycast global. El DNS siempre resuelve a la IP del edge node más cercano al usuario, no a la IP real del origin.
  2. Proxy mode: Todos los subdominios tienen el proxy de Cloudflare habilitado (icono naranja en el dashboard). Esto oculta la IP real del origin.
  3. SSL termination: Cloudflare termina SSL en el edge y re-encripta la conexión al origin (modo Full).
  4. Cache: Los assets estáticos (imágenes, CSS, JS) se cachean en el edge. Las respuestas de API no se cachean.

7. Configuración Cloudflare

7.1 SSL/TLS

ConfiguraciónValorDescripción
Modo SSLFull (Strict)Cloudflare verifica el certificado del origin
Always Use HTTPSHabilitadoRedirect automático HTTP → HTTPS
Minimum TLS Version1.2Rechaza conexiones TLS 1.0 y 1.1
HSTSHabilitadomax-age=31536000; includeSubDomains
Automatic HTTPS RewritesHabilitadoReescribe URLs http:// en el HTML

7.2 Proxy Mode

Todos los subdominios activos tienen el proxy de Cloudflare habilitado (icono naranja). Esto significa que:

  • La IP real del origin nunca se expone en respuestas DNS públicas
  • Todo el tráfico pasa por el edge de Cloudflare para DDoS protection, WAF y cache
  • Los headers CF-Connecting-IP y X-Forwarded-For contienen la IP real del cliente

Nunca desactivar proxy mode en producción

Si se desactiva el proxy (icono gris / DNS Only), la IP real del origin queda expuesta y se pierde toda la protección de Cloudflare: WAF, DDoS, SSL edge, Access. Solo se usa DNS Only para registros MX o TXT que no soportan proxy.

7.3 TTL de Registros DNS

ContextoTTLRazón
Proxied recordsAuto (300s)Cloudflare controla el TTL cuando el proxy está activo
DNS Only records3600s (1h)TTL estándar para registros no proxied (MX, TXT)

Cuando un registro está proxied, Cloudflare ignora el TTL configurado y usa su propio (típicamente 300 segundos). Esto permite propagación rápida de cambios.

7.4 Page Rules y Configuration Rules

ReglaAplica aConfiguración
Cache Level: Standardcdn.nvito.mx/*Cache agresivo para assets estáticos
Browser Cache TTL: 4hcdn.nvito.mx/*Assets cached en el browser 4 horas
Security Level: Highapi.nvito.mx/*Challenge sospechosos antes de llegar al API
Cache Level: Bypassapi.nvito.mx/v1/*Nunca cachear respuestas de la API REST

8. Cloudflare Email Routing

Nvito utiliza Cloudflare Email Routing para gestionar el correo corporativo del dominio raíz nvito.mx. Este servicio gratuito redirige correos entrantes a un buzón centralizado sin necesidad de un servidor de correo propio.

8.1 Direcciones Configuradas

DirecciónDestinoPropósito
hola@nvito.mxnvito.hq@gmail.comCanal principal de contacto
soporte@nvito.mxnvito.hq@gmail.comSoporte al cliente
contacto@nvito.mxnvito.hq@gmail.comContacto general y partnerships

Sin catch-all

No se ha habilitado catch-all (capturar correos a direcciones no configuradas). Solo las 3 direcciones listadas aceptan correo. Esto reduce spam y evita que direcciones no existentes acumulen tráfico no deseado.

8.2 Registros DNS Automáticos

Cloudflare configura automáticamente los registros MX y SPF necesarios al activar Email Routing:

MX Records (recepción):

nvito.mx    MX    6     amir.mx.cloudflare.net
nvito.mx    MX    10    isaac.mx.cloudflare.net
nvito.mx    MX    23    linda.mx.cloudflare.net

SPF Record (autorización de envío):

nvito.mx    TXT    "v=spf1 include:_spf.google.com include:_spf.mx.cloudflare.net ~all"

El SPF incluye tanto _spf.google.com (para envío futuro vía Gmail) como _spf.mx.cloudflare.net (para Cloudflare Email Routing).

8.3 Separación Correo Corporativo vs Transaccional

TipoDominioProveedorEjemplos
Corporativonvito.mxCloudflare Email Routing → Gmailhola@, soporte@, contacto@
Transaccionalsend.nvito.mxResend (Amazon SES)noreply@, eventos@

Esta separación protege la reputación del dominio raíz. Si los emails transaccionales generan bounces o quejas de spam, solo afectan al subdominio send.nvito.mx, no al dominio principal.

8.4 Gmail "Enviar como" (PENDIENTE)

Para poder responder correos desde Gmail con el remitente hola@nvito.mx (en lugar de nvito.hq@gmail.com), se necesita configurar "Enviar como" en Gmail usando SMTP de Gmail con un App Password.

PasoEstado
Cuenta Gmail nvito.hq@gmail.com creadaCompletado
Verificación en 2 pasos activadaCompletado
App Password generadoPendiente (Google requiere 24-72h después de activar 2FA)
Configurar "Enviar como" en GmailPendiente

Funcionalidad pendiente

Hasta que se complete la configuración de "Enviar como", los correos recibidos en hola@nvito.mx se pueden leer en Gmail pero las respuestas salen con remitente nvito.hq@gmail.com. No afecta la recepción de correo.

El dominio nvito.mx sirve archivos .well-known necesarios para que iOS y Android reconozcan la app móvil como manejador de links del dominio. Estos archivos permiten que al abrir https://nvito.mx/join/{token} en un dispositivo con la app instalada, el sistema operativo abra la app directamente en lugar del navegador.

(
  "applinks": (
    "apps": [],
    "details": [
      (
        "appIDs": ["TEAM_ID.com.nvito.client"],
        "paths": ["/join/*"]
      )
    ]
  )
)

El archivo se sirve desde /.well-known/apple-app-site-association sin extensión .json. Apple requiere que se sirva con Content-Type: application/json sobre HTTPS.

[
  (
    "relation": ["delegate_permission/common.handle_all_urls"],
    "target": (
      "namespace": "android_app",
      "package_name": "com.nvito.client",
      "sha256_cert_fingerprints": ["SHA256_PLACEHOLDER"]
    )
  )
]

Se sirve desde /.well-known/assetlinks.json. El sha256_cert_fingerprints se actualiza con el fingerprint real del certificado de firma al publicar la app en Google Play.

Dominio de deeplinks

Se decidió usar nvito.mx (dominio principal registrado) como dominio de deeplinks en lugar de nvito.app (no registrado). La ruta /join/[token] es una ruta SSR en nvito-landing que actúa como smart link: si la app está instalada se abre directamente, si no muestra botones de descarga y un fallback a la PWA (app.nvito.mx).

10. Troubleshooting DNS

10.1 Propagación DNS

Problema: Un cambio de DNS no se refleja inmediatamente.

Diagnostico:

# Verificar resolución actual
dig admin.nvito.mx +short

# Verificar directamente contra nameservers de Cloudflare
dig @1.1.1.1 admin.nvito.mx +short

# Verificar TTL restante
dig admin.nvito.mx +noall +answer

Solución: Los registros proxied de Cloudflare propagan en segundos. Si el cambio no se refleja, limpiar cache DNS local (sudo dscacheutil -flushcache en macOS) y verificar que no haya cache del browser.

10.2 Error 526 (Invalid SSL Certificate)

Problema: Cloudflare muestra error 526 al acceder a un subdominio.

Causa: El modo SSL está en "Full (Strict)" pero el origin no tiene un certificado válido.

Solución:

  1. Verificar que el origin tiene SSL (Let's Encrypt via Coolify/Traefik, o Railway auto-SSL)
  2. Si el certificado expiró, renovar en Coolify o cambiar temporalmente a modo "Full" (sin Strict)
  3. Para origins sin SSL propio, usar un Cloudflare Origin Certificate (15 años, gratuito)

10.3 Proxy Mode vs DNS Only

Problema: Un subdominio no carga o muestra timeout.

Diagnostico: Verificar si el registro está proxied:

# Si retorna IP de Cloudflare (104.x.x.x, 172.x.x.x) → proxied
# Si retorna IP del VPS (212.28.185.197) → DNS Only
dig admin.nvito.mx +short

Causa común: Si el registro está en DNS Only, el tráfico va directo al VPS sin pasar por Cloudflare. Si el VPS no tiene SSL configurado para ese dominio, el navegador rechaza la conexión.

10.4 Cache de Cloudflare

Problema: Cambios en la aplicación no se reflejan en el navegador.

Solución:

  1. Purge cache en Cloudflare: Dashboard > Caching > Purge Everything (o por URL específica)
  2. Development Mode: Activar temporalmente en Cloudflare para bypass de cache (3 horas)
  3. Verificar headers de cache: curl -I https://cdn.nvito.mx/path/to/asset y revisar CF-Cache-Status
CF-Cache-StatusSignificado
HITServido desde cache de Cloudflare
MISSOrigin consultado, respuesta cacheada para próximas requests
BYPASSCache deshabilitado para esta ruta
DYNAMICContenido dinámico, no cacheable
EXPIREDCache existía pero el TTL expiró, se re-validó con origin
Esta pagina fue util?