Docs

Landing Page

Sitio web público de Nvito (nvito.mx) con página Coming Soon, smart link para deeplinks y adapter condicional Cloudflare/Node.

v1.1PublicadoMarzo 2026Equipo de desarrollo, arquitectos, stakeholders
CampoValor
StackAstro 5.7, TypeScript 5, Tailwind CSS 4
Dependencias5 (astro, @astrojs/cloudflare, @astrojs/node, tailwindcss, @tailwindcss/vite)
Puerto local4321 (dev), 4000 (Docker)
Dominionvito.mx (PROD), dev-landing.nvito.mx (DEV), test-landing.nvito.mx (TEST)
EstadoComing Soon + Smart Link SSR

1. Propósito

nvito-landing es el sitio web público de la marca Nvito. Cumple dos funciones principales:

  1. Coming Soon: Página de marketing con animaciones cinematográficas puras en CSS, sin JavaScript en el bundle final
  2. Smart Link: Ruta SSR /join/[token] que actúa como punto de entrada para deeplinks de la app móvil

Principio de diseño: Máxima calidad visual con mínimo peso. Las páginas estáticas logran Lighthouse 100/100/100/100 al ser HTML + CSS puro.

2. Stack y arquitectura

TecnologíaVersiónRol
Astro5.7.10Framework SSG + SSR híbrido
@astrojs/cloudflarelatestAdapter para producción (Cloudflare Pages)
@astrojs/nodelatestAdapter para DEV/TEST (Docker en Coolify)
Tailwind CSS4.1.4Utility-first CSS, zero-runtime
@tailwindcss/vite4.1.4Plugin de build para Vite
TypeScriptstrictTipado de configuración

Adapter condicional

nvito-landing usa un adapter condicional controlado por la variable de entorno ASTRO_ADAPTER:

  • Producción (sin ASTRO_ADAPTER o valor por defecto): @astrojs/cloudflare para Cloudflare Pages
  • DEV/TEST (ASTRO_ADAPTER=node): @astrojs/node para ejecución en Docker vía Coolify

Todas las páginas son estáticas excepto /join/[token], que tiene prerender = false para servir contenido dinámico basado en el token del invitado.

Al enviar invitaciones por email, WhatsApp o SMS, nvito-api incluye un link con formato:

https://nvito.mx/join/(token)

Donde (token) es el access token del invitado (GuestAccessToken). Cuando el invitado abre este link:

  1. Si la app está instalada: iOS (Universal Links) o Android (App Links) interceptan el link y abren la app directamente
  2. Si la app NO está instalada: El navegador carga la página SSR del smart link

La ruta /join/[token] es SSR (prerender = false) y muestra:

  • Logo y branding de Nvito
  • Botón App Store: Link a la app en Apple App Store
  • Botón Google Play: Link a la app en Google Play Store
  • Link "Continuar en el navegador": Redirige a la PWA (app.nvito.mx) pasando el token
  • Instrucciones paso a paso para descargar e ingresar con el token

3.3 Archivos .well-known

Para que iOS y Android reconozcan la app como manejador de links del dominio nvito.mx:

  • /.well-known/apple-app-site-association: Configura Universal Links para iOS con TEAM_ID.com.nvito.client y paths ["/join/*"]
  • /.well-known/assetlinks.json: Configura App Links para Android con com.nvito.client

nvito-api usa la variable APP_DEEP_LINK_URL para construir los links en las notificaciones:

AmbienteValor
Localhttp://localhost:4000
DEVhttps://dev-landing.nvito.mx
TESThttps://test-landing.nvito.mx
PRODhttps://nvito.mx

Dominio nvito.mx para deeplinks

Se decidió usar nvito.mx (dominio principal registrado) como dominio de deeplinks. Se descartó nvito.app porque no está registrado y registrar un dominio .app adicional no aporta beneficio funcional. El dominio principal ya tiene SSL, DNS y Cloudflare configurados.

4. Estructura de archivos

Estructura de Directorios

nvito-landing/
├── src/
├── pages/
└── index.astroPagina principal (Coming Soon)
├── layouts/
└── base.astroLayout base (meta, fonts, SEO)
└── styles/
└── global.cssEstilos + tema Tailwind + 23 keyframes
├── public/
├── favicon.icoFavicon
├── apple-touch-icon.pngiOS icon
└── og-image.pngOpen Graph preview
├── astro.config.mjsOutput static, Tailwind vite plugin
└── tsconfig.jsonextends astro/tsconfigs/strict

5. Design system

Paleta oficial Nvito

TokenColorUso
nvito-blue#0B3D5AColor principal de marca
nvito-orange#F17F3AColor de acento
nvito-orange-intense#FC5A0FAcento intenso
nvito-blue-comp#005587Complementario azul
nvito-orange-comp#F1993AComplementario naranja
nvito-gray#BDC0C2Fondo gris
nvito-cream#FBECD4Fondo crema

Los colores se definen como CSS variables via @theme inline de Tailwind CSS 4.

Tipografía

FuenteUsoCarga
Playfair DisplayDisplay / títulosGoogle Fonts preload
DM SansBody / texto generalGoogle Fonts preload

Background cinematografico

El fondo combina un gradiente lineal de 3 paradas (#005587 a #0B3D5A a #072a3e) con un overlay radial sutil, creando profundidad visual sin imagenes.

6. Componentes visuales

La página Coming Soon se compone de elementos puramente CSS sin JavaScript:

ComponenteDescripción
Partículas flotantes10 círculos con 5 patrones de movimiento CSS
Logo SVG animadoBreathing glow + ambient light + 3 orbital rings
Tagline"vive tu evento" con text-shadow glow
Shimmer lineLínea decorativa con animación de brillo
Hero title"MUY PRONTO" responsivo (2rem-4.5rem)
Season text"verano 2026"
Email linkhola@nvito.mx

Animaciones

  • 23 keyframes CSS definidos en global.css
  • Staggered fade-in-up: 6 reveals con delays de 0.3s a 2.3s y easing cubic-bezier
  • Breathing glow: Animación continua del logo SVG
  • Partículas: 5 patrones de movimiento distintos (float, drift, ascend, sway, orbit)

7. Performance

MétricaValor
JavaScript payload (Coming Soon)0 KB
HidrataciónNinguna (páginas estáticas)
Lighthouse Performance100
Lighthouse Accessibility100
Lighthouse Best Practices100
Lighthouse SEO100

Las páginas estáticas son HTML + CSS puro. La ruta SSR /join/[token] genera HTML en el servidor sin JavaScript del lado del cliente.

8. Accesibilidad

  • aria-hidden="true" en todos los elementos decorativos (partículas, orbital rings)
  • role="img" + aria-label en el logo SVG
  • lang="es" en el elemento <html>
  • prefers-reduced-motion: deshabilita todas las 23 animaciones CSS

9. SEO

  • Meta description optimizada
  • Open Graph tags (og:title, og:description, og:image)
  • Twitter Card meta tags
  • Favicon + Apple Touch Icon
  • theme-color meta tag (#0B3D5A)

10. Deployment

Producción (Cloudflare Pages)

AspectoDetalle
PlataformaCloudflare Pages
Adapter@astrojs/cloudflare
Deploy triggerPush a main (auto-deploy)
Dominionvito.mx
CDNCloudflare global edge
HTTPSAutomático
Costo$0 (free tier)

DEV/TEST (Docker en Coolify)

AspectoDetalle
PlataformaVPS + Coolify
Adapter@astrojs/node
Puerto4000
Dominio DEVdev-landing.nvito.mx
Dominio TESTtest-landing.nvito.mx
ProtecciónCloudflare Zero Trust
Deploy triggerGitLab webhook a Coolify

Dockerfile (DEV/TEST)

nvito-landing incluye un Dockerfile multi-stage para despliegue en Coolify:

FROM node:20-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
ENV ASTRO_ADAPTER=node
RUN npm run build

FROM node:20-alpine AS runtime
WORKDIR /app
COPY --from=build /app/dist ./dist
COPY --from=build /app/node_modules ./node_modules
COPY --from=build /app/package.json ./
EXPOSE 4000
ENV HOST=0.0.0.0
ENV PORT=4000
CMD ["node", "dist/server/entry.mjs"]

11. Variables de entorno

VariableProyectoDescripciónEjemplo
ASTRO_ADAPTERnvito-landingAdapter a usar (node para Docker, omitir para Cloudflare)node
PUBLIC_PWA_URLnvito-landingURL de la PWA para fallback del smart linkhttps://app.nvito.mx
APP_DEEP_LINK_URLnvito-apiURL base para construir deeplinks en notificacioneshttps://nvito.mx

12. Desarrollo local

# Clonar y configurar
cd nvito-landing
npm install

# Desarrollo
npm run dev                          # http://localhost:4321

# Build (modo Cloudflare, por defecto)
npm run build                        # Genera dist/

# Build (modo Node, para probar Docker localmente)
ASTRO_ADAPTER=node npm run build     # Genera dist/ con server

# Preview
npm run preview                      # Sirve dist/ localmente

Smart link en desarrollo local

Para probar el flujo de deeplinks localmente, usar ASTRO_ADAPTER=node npm run build y ejecutar node dist/server/entry.mjs. La ruta /join/(token) estará disponible en http://localhost:4000/join/(token). Configurar APP_DEEP_LINK_URL=http://localhost:4000 en nvito-api para que las notificaciones apunten al servidor local.

Referencias

  • app.json: nvito-client/app.json -- Configuración de associatedDomains e intentFilters para deeplinks
  • Dominios y DNS: Dominios -- Mapa de subdominios incluyendo dev-landing y test-landing
  • Ambientes: Ambientes -- Variables APP_DEEP_LINK_URL y PUBLIC_PWA_URL por ambiente
Esta pagina fue util?