Última actualización 2026-07-15
Despliegue y entorno
Para quién es esta página
Esta página es para quienes despliegan meridian. Los visitantes habituales no necesitan estos ajustes. Una demo funcional solo necesita OPENWEATHER_API_KEY; todo lo demás es stretch opcional.
Entorno requerido
OPENWEATHER_API_KEY — requerido para tiempo y geocode. DATABASE_PATH — archivo SQLite (por defecto ./data/meridian.db); volumen persistente en producción para que caché y suscripciones sobrevivan reinicios. NEXT_PUBLIC_SHOW_HOME_STRETCH=0 oculta anuncio del panel + Journal (activado por defecto). NEXT_PUBLIC_SHOW_DEMO_POPULAR_SEARCHES=0 desactiva ciudades populares de demostración cuando la API está vacía.
Entorno de imagen hero
UNSPLASH_ACCESS_KEY — opcional; primer proveedor de fotos para heroes de ubicación (solo servidor, en caché en hero_image_cache). PEXELS_API_KEY — tercer proveedor opcional tras Unsplash y Wikimedia Commons. NEXT_PUBLIC_CITY_HERO_OSM — poner a 0 para desactivar encabezado de mapa satelital (activado por defecto). NEXT_PUBLIC_CITY_HERO_STREET_VIEW=1 — opt-in Google Street View cuando OSM está off. NEXT_PUBLIC_GOOGLE_MAPS_API_KEY — clave Maps Embed API opcional para iframes Street View.
Entorno de correo
Multi-ESP vía conector activo en platform_settings (selector admin): Resend (RESEND_API_KEY, RESEND_FROM_EMAIL), SendGrid (SENDGRID_API_KEY, SENDGRID_FROM_EMAIL), Amazon SES (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SES_REGION, AWS_SES_FROM_EMAIL) o SMTP (SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASSWORD, SMTP_FROM_EMAIL, SMTP_SECURE). NEXT_PUBLIC_APP_URL — URL base para enlaces de baja en correos (listado en .env.example; requerido en producción).
Cron y admin
CRON_SECRET — Bearer para /api/cron/* (denegado si unset en producción). ADMIN_SECRET — firma la cookie de sesión admin y cifra secretos de conectores. ADMIN_PASSWORD — login root solo para ADMIN_EMAIL. Bypass de desarrollo solo con NODE_ENV=development, ALLOW_DEV_ADMIN_BYPASS=1 y ADMIN_SECRET unset. Ver docs/SECURITY.md. Programar cron externamente: weekly-digests (p. ej. lunes por la mañana), weather-alerts (p. ej. cada 15–30 minutos).
Entorno AdSense
GOOGLE_ADSENSE_CLIENT_ID (ca-pub-…). GOOGLE_ADSENSE_SLOT_DASHBOARD, SLOT_HERO, SLOT_RECENT, SLOT_CITY_DETAIL, SLOT_DEFAULT — IDs de unidades display. OAuth AdSense Management API: GOOGLE_ADSENSE_OAUTH_CLIENT_ID, GOOGLE_ADSENSE_OAUTH_CLIENT_SECRET, GOOGLE_ADSENSE_OAUTH_REDIRECT_URI opcional (por defecto ${NEXT_PUBLIC_APP_URL}/api/admin/adsense/oauth/callback). Mantener ID de cliente solo en secretos del host. /ads.txt generado en tiempo de ejecución desde ID de cliente.
Entorno de analytics
NEXT_PUBLIC_GA_MEASUREMENT_ID — cargador GA4 opcional cuando consent.analytics está activado. NEXT_PUBLIC_GOOGLE_SITE_VERIFICATION — metaetiqueta Search Console.
Scripts npm
dev, build, start — Next.js. lint, test, test:watch, verify — puerta de calidad (verify = lint + test + build). copy:icons — Meteocons a public (también postinstall). seed:checks — snapshots demo North England. backfill:city-slugs — rellenar city_slug en locations existentes. email — servidor de vista previa React Email. audit:deps — npm audit --omit=dev.
Tablas SQLite
Tiempo núcleo: weather_snapshots, api_call_log. Ubicaciones y checks: locations, location_weather_checks, weather_observations, weather_forecast_archive. Suscripciones: subscriptions, subscription_send_log. Plataforma: platform_settings (singleton). Heroes: hero_image_cache. Monetización: adsense_report_snapshots. Analytics: site_analytics_events. Correo/CMS: email_templates, cms_pages. Admin: admin_users, admin_invites, admin_password_resets, admin_audit_log. Esquema en src/lib/db/index.js. Primera apertura siembra platform_settings con refresh 1h, stale 2h, límite diario 1000, soft block 950, warning 800, per-minute 60.
Middleware
src/middleware.js reescribe el host docs.localhost a /docs para subdominio de documentación local. Sin middleware de auth en rutas principales de la app.
Claves de almacenamiento del navegador
Desde storage-keys.js: meridian:client-id, meridian:saved-cities, meridian:checked-cities, meridian:user-location, meridian:weather-cache, meridian:theme, meridian:cookie-consent, meridian:subscriptions, meridian:tier (reservado), meridian:consent, meridian:accessibility, meridian:city-detail-accordion, meridian:temperature-unit, meridian:preferred-locale, meridian:weather-refresh-mode. sessionStorage meridian_analytics_sid — ID de sesión analytics first-party. Cookie admin meridian_admin_session (HttpOnly, definida por servidor). Evento custom meridian:storage sincroniza hooks tras escrituras.