Una landing page moderna y de alto rendimiento diseñada para un salón de belleza y bienestar. Desarrollada con SvelteKit y Tailwind CSS, enfocada en la velocidad de carga (Core Web Vitals), accesibilidad y SEO.
Visita el sitio: https://aura-beauty.pages.dev/
El sitio ha sido optimizado para alcanzar métricas de excelencia. Auditoría realizada en Febrero 2026. Ver reporte en vivo
| Categoría | Móvil 📱 | Escritorio 💻 |
|---|---|---|
| 🟢 SEO | 100 | 100 |
| 🟢 Best Practices | 100 | 100 |
| 🟢 Performance | 98 | 100 |
| 🟢 Accessibility | 96 | 96 |
fly).ImageReveal propio para carga diferida (lazy loading) con efecto fade-in en el resto del sitio.Si quieres clonar y correr este proyecto localmente:
# 1. Clonar el repositorio
git clone https://github.com/HernandezDev/aura-beauty.git
# 2. Entrar al directorio
cd aura-beauty
# 3. Instalar dependencias
npm install
# 4. Configurar variables de entorno
// ver sección "Configuración de Entorno y Seguridad" más abajo
# 5. Iniciar servidor de desarrollo
npm run dev
src/lib/components/ui/: Componentes de UI reutilizables (design system).src/lib/components/layout/: Layouts compartidos (navbar, footer, FloatingWhatsApp).src/lib/components/sections/: Secciones de contenido pensadas para reescribirse según el cliente/proyecto.Para crear una nueva landing para otro negocio:
npm desde fontsource.org y ajusta src/routes/+layout.svelte y src/lib/styles/layout.css.src/lib/site.config.ts (nombre, URLs, SEO, idioma).src/lib/components/sections/ con el nuevo contenido.src/lib/assets/images/.Este proyecto utiliza variables de entorno para manejar datos sensibles y lógica de despliegue. Crea un archivo .env en la raíz (no se sube al repositorio) basado en el siguiente esquema:
# Datos Privados (Solo Servidor)
PRIVATE_WHATSAPP_NUMBER=5491123456789
# Configuración Pública (Cliente y Build)
PUBLIC_SITE_URL=https://aura-beauty.pages.dev
PRIVATE_WHATSAPP_NUMBER (Seguridad Anti-Scraping)El Problema: Colocar un enlace href="tel:..." o wa.me/... expone el número del cliente directamente en el código fuente HTML, haciéndolo vulnerable a bots y scrapers de spam.
La Solución:
/api/whatsapp) protegido.PUBLIC_SITE_URL (SEO Técnico & Lógica de Entorno)Define la URL canónica del sitio. Esta variable es crítica para dos sistemas:
site.config.ts.index, follow).localhost o test.aura-beauty...): Se activa automáticamente el bloqueo (noindex, nofollow) para evitar contenido duplicado en Google.Nota para Cloudflare Pages: Recuerda configurar estas mismas variables en el panel de control bajo Settings > Environment Variables para tus entornos de Producción y Preview.
site.config.ts)La lógica de negocio y los metadatos estáticos están desacoplados de los componentes visuales. El archivo src/lib/site.config.ts actúa como la "fuente de la verdad" para todo el sitio.
Ventajas de esta arquitectura:
url (actual) y urlProd (objetivo) para activar el bloqueo de robots en entornos de prueba.// Ejemplo de estructura
export const site = {
name: "Aura Beauty",
urlProd: "https://aura-beauty.pages.dev", // URL Oficial
author: "Cliente",
ogImageAlt: "Descripción para accesibilidad...",
themeColor: "#c9a24d",
// ...
};
+layout.svelte)El layout raíz (src/routes/+layout.svelte) no solo envuelve las páginas, sino que gestiona la optimización técnica de assets crítica para el rendimiento.
Se implementó una arquitectura de Self-Hosting gestionada vía NPM (@fontsource) para optimizar el Critical Rendering Path y simplificar el mantenimiento.
Decisiones de Arquitectura:
<link rel="preload">. Esto fuerza al navegador a descargar la fuente en paralelo al CSS, acelerando el primer pintado con texto (LCP) y reduciendo el movimiento visual (CLS).?url de Vite, se genera un hash único en el nombre del archivo (ej: manrope.DHIcAJRg.woff2).<script>
// Obtenemos la URL final procesada por Vite
import fontSans from "@fontsource-variable/manrope/files/manrope-latin-wght-normal.woff2?url";
</script>
<svelte:head>
<link rel="preload" href={fontSans} as="font" type="font/woff2" crossorigin="anonymous" />
</svelte:head>
La configuración de estilos está centralizada en src/lib/styles/layout.css. Se utiliza la nueva arquitectura de Tailwind CSS v4 basada en variables CSS nativas para definir la identidad visual:
@theme {
--font-sans: "Manrope Variable", sans-serif;
--font-serif: "Lora Variable", serif;
--color-gold: #c9a24d;
}
Para los formularios, se utiliza una estrategia híbrida:
@tailwindcss/forms resetea los estilos nativos del navegador, garantizando una base idéntica en Chrome, Safari y Firefox.@layer base. Esto permite que todos los inputs adquieran el diseño automáticamente sin necesidad de clases utilitarias en el HTML./* layout.css */
@layer base {
/* Seleccionamos todos los elementos de formulario normalizados */
[type="text"], [type="email"], textarea, select /* ... */ {
/* Estilos visuales del tema (Dark Mode) */
@apply bg-neutral-900 border-neutral-700 text-neutral-300;
/* Focus state corporativo (forzando prioridad sobre el plugin con !) */
@apply focus:outline-none focus:ring-gold! focus:border-gold!;
}
}
añadir nodejs_compat a las compatibility flags en el panel de control de cloudflare pages
© 2026 Aura Beauty Project