Sitio web construido con Astro y Tailwind CSS.
- Node.js 20.x
- npm 10.x (o pnpm/yarn si prefieres, ajustando los comandos)
Instala las dependencias con:
npm installnpm run dev: inicia el servidor de desarrollo.npm run build: genera la aplicación lista para producción.npm run preview: sirve la build generada para validación manual.
Copia .env.example a .env.local y rellena los valores para desarrollo local. En producción, configura las mismas variables como Environment Variables en el panel de Vercel. Nunca commitees .env.local.
Variables soportadas:
RESEND_API_KEY,FROM_EMAIL,TO_EMAIL: envío del formulario de contacto vía Resend.EMERGENCY_FROM_EMAIL,EMERGENCY_TO_EMAIL: ruta de fallback si la entrega principal falla.PUBLIC_RECAPTCHA_SITE_KEY,RECAPTCHA_SECRET_KEY,RECAPTCHA_MIN_SCORE: protección anti-spam con reCAPTCHA v3.CONTACT_ALLOWED_ORIGINS: lista separada por comas de orígenes con permiso para hacer POST a/api/contact.N8N_WEBHOOK_URL: integración opcional con n8n.
El sitio incluye un panel oculto en /admin (login con usuario y contraseña, noindex) que
permite al cliente editar todos los textos —con selector por idioma (ca · es · en · de)—
y cambiar todas las imágenes sin tocar código. El motor sigue el patrón
override ?? default: con el almacén vacío, la web se muestra exactamente como el diseño;
el panel solo guarda los cambios.
- Textos por defecto: diccionarios i18n (
src/i18n/locales/*.json). - Imágenes por defecto: ficheros bajo
public/. - Qué es editable:
src/lib/editable-fields.ts(grupos de textos + slots de imagen). - Lectura en las páginas:
src/lib/page-content.ts(makeText/img), con el CMS cargado una vez por request en el middleware (Astro.locals.cms).
- Producción: Vercel KV (contenido y usuarios) + Vercel Blob (imágenes subidas).
- Desarrollo: si faltan las variables de KV/Blob, el motor cae a ficheros locales en
.cache/*.json(git-ignorados). La subida de imágenes requiere Blob; editar por URL funciona siempre.
ADMIN_USER, ADMIN_PASSWORD (admin inicial, se crea en el primer login), SESSION_SECRET
(firma HMAC, ≥ 32 hex), KV_REST_API_URL, KV_REST_API_TOKEN, BLOB_READ_WRITE_TOKEN,
PUBLIC_HIDE_ADMIN_FAB. Ver .env.example.
En
astro dev,astro.config.mjsvuelca los.envenprocess.envpara que el panel funcione en local; en Vercel se usan las variables reales del proyecto en tiempo de ejecución.
El proyecto está preparado para ejecutarse como serverless en Vercel mediante @astrojs/vercel:
- Crea un proyecto en Vercel e importa este repositorio.
- Define el comando de build como
npm run build(Vercel lo detecta automáticamente para Astro). - Configura las variables de entorno necesarias.
- Realiza el deploy; las rutas
/apiy el middleware de Astro funcionarán sobre funciones serverless de Vercel.
Puedes probar localmente la build de producción con:
npm run build
npm run preview